Go to the documentation of this file.00001
00002
00003
00004
00005 #include <gsl/gsl_cdf.h>
00006
00007 #include <math.h>
00008 #include <assert.h>
00009
00010 #include <rmol/bom/EmsrUtils.hpp>
00011 #include <rmol/bom/Bucket.hpp>
00012 #include <rmol/basic/BasConst_General.hpp>
00013
00014 namespace RMOL {
00015
00016 void EmsrUtils::computeAggregatedBucket (Bucket& ioAggregatedBucket,
00017 Bucket& ioCurrentBucket) {
00018
00019
00020 const double lAggregatedMean = ioAggregatedBucket.getMean();
00021 const double lCurrentMean = ioCurrentBucket.getMean();
00022 const double lAggregatedSD = ioAggregatedBucket.getStandardDeviation();
00023 const double lCurrentSD = ioCurrentBucket.getStandardDeviation();
00024 const double lAggregatedAverageYield = ioAggregatedBucket.getAverageYield();
00025 const double lCurrentAverageYield = ioCurrentBucket.getAverageYield();
00026
00027
00028
00029 const double lNewMean = lAggregatedMean + lCurrentMean;
00030 const double lNewSD =
00031 sqrt(lAggregatedSD*lAggregatedSD + lCurrentSD*lCurrentSD);
00032 double lNewAverageYield = lCurrentAverageYield;
00033 if (lNewMean > 0) {
00034 lNewAverageYield = (lAggregatedAverageYield*lAggregatedMean +
00035 lCurrentAverageYield*lCurrentMean)/lNewMean;
00036 }
00037
00038 ioAggregatedBucket.setYieldRange(lNewAverageYield);
00039
00040
00041 ioAggregatedBucket.setDemandParameters (lNewMean, lNewSD);
00042 }
00043
00044
00045 const double EmsrUtils::computeProtectionLevel (Bucket& ioAggregatedBucket,
00046 Bucket& ioNextBucket) {
00047
00048
00049
00050 const double lMean = ioAggregatedBucket.getMean();
00051 const double lSD = ioAggregatedBucket.getStandardDeviation();
00052 const double lAggreatedYield = ioAggregatedBucket.getAverageYield();
00053 const double lNextYield = ioNextBucket.getAverageYield();
00054 assert (lAggreatedYield != 0);
00055
00056
00057 const double lProtection =
00058 lMean + gsl_cdf_gaussian_Qinv (lNextYield/lAggreatedYield, lSD);
00059
00060 return lProtection;
00061 }
00062
00063
00064 const double EmsrUtils::computeProtectionLevelwithSellup (Bucket& iHigherBucket,
00065 Bucket& iBucket,
00066 double iSellupFactor){
00067
00068
00069
00070 const double lMean = iHigherBucket.getMean();
00071 const double lSD = iHigherBucket.getStandardDeviation();
00072 const double lHigherBucketYield = iHigherBucket.getAverageYield();
00073 const double lBucketYield = iBucket.getAverageYield();
00074 assert (lHigherBucketYield > DEFAULT_EPSILON);
00075 assert (1-iSellupFactor > DEFAULT_EPSILON);
00076
00077
00078 const double lProtectionLevel =
00079 lMean +
00080 gsl_cdf_gaussian_Pinv((lHigherBucketYield-lBucketYield)/
00081 (lHigherBucketYield*(1-iSellupFactor)),lSD);
00082
00083 return lProtectionLevel;
00084 }
00085
00086
00087 const double EmsrUtils::computeEmsrValue (double iCapacity, Bucket& ioBucket) {
00088
00089
00090 const double lMean = ioBucket.getMean();
00091 const double lSD = ioBucket.getStandardDeviation();
00092 const double lYield = ioBucket.getAverageYield();
00093
00094
00095 const double emsrValue = lYield * gsl_cdf_gaussian_Q(iCapacity-lMean, lSD);
00096
00097 return emsrValue;
00098 }
00099 }