Go to the documentation of this file.00001
00002
00003
00004
00005 #include <cassert>
00006 #include <cmath>
00007
00008 #include <boost/math/distributions/normal.hpp>
00009
00010 #include <stdair/stdair_maths_types.hpp>
00011 #include <stdair/bom/VirtualClassStruct.hpp>
00012
00013 #include <rmol/bom/EmsrUtils.hpp>
00014 #include <rmol/basic/BasConst_General.hpp>
00015
00016 namespace RMOL {
00017
00018 void EmsrUtils::computeAggregatedVirtualClass
00019 (stdair::VirtualClassStruct& ioAggregatedVirtualClass,
00020 stdair::VirtualClassStruct& ioCurrentVirtualClass) {
00021
00022
00023 const stdair::MeanValue_T lAggregatedMean =
00024 ioAggregatedVirtualClass.getMean();
00025 const stdair::MeanValue_T lCurrentMean = ioCurrentVirtualClass.getMean();
00026 const stdair::StdDevValue_T lAggregatedSD =
00027 ioAggregatedVirtualClass.getStdDev();
00028 const stdair::StdDevValue_T lCurrentSD = ioCurrentVirtualClass.getStdDev();
00029 const stdair::Yield_T lAggregatedYield =
00030 ioAggregatedVirtualClass.getYield();
00031 const stdair::Yield_T lCurrentYield = ioCurrentVirtualClass.getYield();
00032
00033
00034
00035 const stdair::MeanValue_T lNewMean = lAggregatedMean + lCurrentMean;
00036 const stdair::StdDevValue_T lNewSD =
00037 sqrt (lAggregatedSD*lAggregatedSD + lCurrentSD*lCurrentSD);
00038 stdair::Yield_T lNewYield = lCurrentYield;
00039 if (lNewMean > 0) {
00040 lNewYield = (lAggregatedYield*lAggregatedMean +
00041 lCurrentYield*lCurrentMean) / lNewMean;
00042 }
00043
00044 ioAggregatedVirtualClass.setYield(lNewYield);
00045
00046
00047 ioAggregatedVirtualClass.setMean (lNewMean);
00048 ioAggregatedVirtualClass.setStdDev (lNewSD);
00049 }
00050
00051
00052 const stdair::ProtectionLevel_T EmsrUtils::
00053 computeProtectionLevel (stdair::VirtualClassStruct& ioAggregatedVirtualClass,
00054 stdair::VirtualClassStruct& ioNextVirtualClass) {
00055
00056
00057
00058 const stdair::MeanValue_T lMean = ioAggregatedVirtualClass.getMean();
00059 const stdair::StdDevValue_T lSD = ioAggregatedVirtualClass.getStdDev();
00060 const stdair::Yield_T lAggreatedYield = ioAggregatedVirtualClass.getYield();
00061 const stdair::Yield_T lNextYield = ioNextVirtualClass.getYield();
00062 assert (lAggreatedYield != 0);
00063
00064
00065 const double lYieldRatio = lNextYield / lAggreatedYield;
00066
00070 boost::math::normal lNormalDistribution (lMean, lSD);
00071 const stdair::ProtectionLevel_T lProtection =
00072 boost::math::quantile (boost::math::complement (lNormalDistribution,
00073 lYieldRatio));
00074
00075 return lProtection;
00076 }
00077
00078
00079 const double EmsrUtils::
00080 computeEmsrValue (double iCapacity,
00081 stdair::VirtualClassStruct& ioVirtualClass){
00082
00083
00084 const stdair::MeanValue_T lMean = ioVirtualClass.getMean();
00085 const stdair::StdDevValue_T lSD = ioVirtualClass.getStdDev();
00086 const stdair::Yield_T lYield = ioVirtualClass.getYield();
00087
00088
00089 boost::math::normal lNormalDistribution (lMean, lSD);
00090 const double emsrValue =
00091 lYield * boost::math::cdf (boost::math::complement (lNormalDistribution,
00092 iCapacity));
00093
00094 return emsrValue;
00095 }
00096 }