Go to the documentation of this file.00001
00002
00003
00004
00005 #include <cassert>
00006 #include <sstream>
00007
00008 #include <stdair/basic/BasConst_General.hpp>
00009 #include <stdair/basic/RandomGeneration.hpp>
00010 #include <stdair/bom/BomManager.hpp>
00011 #include <stdair/bom/FlightDate.hpp>
00012 #include <stdair/bom/LegDate.hpp>
00013 #include <stdair/bom/SegmentDate.hpp>
00014 #include <stdair/bom/LegCabin.hpp>
00015 #include <stdair/bom/SegmentCabin.hpp>
00016 #include <stdair/bom/FareFamily.hpp>
00017 #include <stdair/bom/BookingClass.hpp>
00018 #include <stdair/service/Logger.hpp>
00019
00020 #include <rmol/bom/MCOptimiser.hpp>
00021 #include <rmol/bom/Emsr.hpp>
00022 #include <rmol/bom/DPOptimiser.hpp>
00023 #include <rmol/command/Optimiser.hpp>
00024
00025 namespace RMOL {
00026
00027
00028 void Optimiser::
00029 optimalOptimisationByMCIntegration (const int K,
00030 stdair::LegCabin& ioLegCabin) {
00031
00032 const stdair::SegmentCabinList_T lSegmentCabinList =
00033 stdair::BomManager::getList<stdair::SegmentCabin> (ioLegCabin);
00034 stdair::SegmentCabinList_T::const_iterator itSC = lSegmentCabinList.begin();
00035 assert (itSC != lSegmentCabinList.end());
00036 const stdair::SegmentCabin* lSegmentCabin_ptr = *itSC;
00037 assert (lSegmentCabin_ptr != NULL);
00038
00039
00040 const stdair::BookingClassList_T lBookingClassList =
00041 stdair::BomManager::getList<stdair::BookingClass> (*lSegmentCabin_ptr);
00042 stdair::RandomGeneration lSeedGenerator (stdair::DEFAULT_RANDOM_SEED);
00043
00044
00045 for (stdair::BookingClassList_T::const_iterator itBC =
00046 lBookingClassList.begin(); itBC != lBookingClassList.end(); ++itBC) {
00047 stdair::RandomSeed_T lRandomSeed =
00048 lSeedGenerator.generateUniform01 () * 1e9;
00049 stdair::BookingClass* lBookingClass_ptr = *itBC;
00050 assert (lBookingClass_ptr != NULL);
00051 lBookingClass_ptr->generateDemandSamples (K, lRandomSeed);
00052
00053
00054
00055
00056 }
00057
00058
00059 MCOptimiser::optimalOptimisationByMCIntegration (ioLegCabin);
00060 }
00061
00062
00063 void Optimiser::optimalOptimisationByDP (stdair::LegCabin& ioLegCabin) {
00064 DPOptimiser::optimalOptimisationByDP (ioLegCabin);
00065 }
00066
00067
00068 void Optimiser::heuristicOptimisationByEmsr (stdair::LegCabin& ioLegCabin) {
00069 Emsr::heuristicOptimisationByEmsr (ioLegCabin);
00070 }
00071
00072
00073 void Optimiser::heuristicOptimisationByEmsrA (stdair::LegCabin& ioLegCabin) {
00074 Emsr::heuristicOptimisationByEmsrA (ioLegCabin);
00075 }
00076
00077
00078 void Optimiser::heuristicOptimisationByEmsrB (stdair::LegCabin& ioLegCabin) {
00079 Emsr::heuristicOptimisationByEmsrB (ioLegCabin);
00080 }
00081
00082
00083 void Optimiser::optimise (stdair::FlightDate& ioFlightDate) {
00084
00085
00086 const stdair::LegDateList_T& lLDList =
00087 stdair::BomManager::getList<stdair::LegDate> (ioFlightDate);
00088 for (stdair::LegDateList_T::const_iterator itLD = lLDList.begin();
00089 itLD != lLDList.end(); ++itLD) {
00090 stdair::LegDate* lLD_ptr = *itLD;
00091 assert (lLD_ptr != NULL);
00092
00093
00094 const stdair::LegCabinList_T& lLCList =
00095 stdair::BomManager::getList<stdair::LegCabin> (*lLD_ptr);
00096 for (stdair::LegCabinList_T::const_iterator itLC = lLCList.begin();
00097 itLC != lLCList.end(); ++itLC) {
00098 stdair::LegCabin* lLC_ptr = *itLC;
00099 assert (lLC_ptr != NULL);
00100
00101
00102 buildVirtualClassListForLegBasedOptimisation (*lLC_ptr);
00103
00104
00105 optimalOptimisationByMCIntegration (10000, *lLC_ptr);
00106 }
00107 }
00108 }
00109
00110
00111 void Optimiser::
00112 buildVirtualClassListForLegBasedOptimisation (stdair::LegCabin& ioLegCabin) {
00113
00114 stdair::VirtualClassMap_T lVirtualClassMap;
00115
00116
00117 const stdair::SegmentCabinList_T lSegmentCabinList =
00118 stdair::BomManager::getList<stdair::SegmentCabin> (ioLegCabin);
00119 stdair::SegmentCabinList_T::const_iterator itSC = lSegmentCabinList.begin();
00120 assert (itSC != lSegmentCabinList.end());
00121 const stdair::SegmentCabin* lSegmentCabin_ptr = *itSC;
00122 assert (lSegmentCabin_ptr != NULL);
00123
00124
00125 const stdair::BookingClassList_T lBookingClassList =
00126 stdair::BomManager::getList<stdair::BookingClass> (*lSegmentCabin_ptr);
00127
00128
00129 for (stdair::BookingClassList_T::const_iterator itBC =
00130 lBookingClassList.begin(); itBC != lBookingClassList.end(); ++itBC) {
00131 stdair::BookingClass* lBookingClass_ptr = *itBC;
00132 assert (lBookingClass_ptr != NULL);
00133
00134 const stdair::Yield_T& lYield = lBookingClass_ptr->getYield();
00135 stdair::VirtualClassStruct lVirtualClass (*lBookingClass_ptr);
00136 lVirtualClass.setYield (lYield);
00137 lVirtualClass.setMean (lBookingClass_ptr->getMean());
00138 lVirtualClass.setStdDev (lBookingClass_ptr->getStdDev());
00139
00140 lVirtualClassMap.insert (stdair::VirtualClassMap_T::
00141 value_type (lYield, lVirtualClass));
00142 }
00143
00144
00145 ioLegCabin.emptyVirtualClassList();
00146 for (stdair::VirtualClassMap_T::reverse_iterator itVC =
00147 lVirtualClassMap.rbegin(); itVC != lVirtualClassMap.rend(); ++itVC) {
00148 stdair::VirtualClassStruct& lVC = itVC->second;
00149
00150 ioLegCabin.addVirtualClass (lVC);
00151 }
00152 }
00153
00154
00155 double Optimiser::
00156 optimiseUsingOnDForecast (stdair::FlightDate& ioFlightDate,
00157 const bool& iReduceFluctuations) {
00158 double lMaxBPVariation = 0.0;
00159
00160
00161 if (stdair::BomManager::hasList<stdair::LegDate> (ioFlightDate)) {
00162 STDAIR_LOG_DEBUG ("Optimisation for the flight date: "
00163 << ioFlightDate.toString());
00164 const stdair::LegDateList_T& lLDList =
00165 stdair::BomManager::getList<stdair::LegDate> (ioFlightDate);
00166 for (stdair::LegDateList_T::const_iterator itLD = lLDList.begin();
00167 itLD != lLDList.end(); ++itLD) {
00168 stdair::LegDate* lLD_ptr = *itLD;
00169 assert (lLD_ptr != NULL);
00170
00171
00172 const stdair::LegCabinList_T& lLCList =
00173 stdair::BomManager::getList<stdair::LegCabin> (*lLD_ptr);
00174 for (stdair::LegCabinList_T::const_iterator itLC = lLCList.begin();
00175 itLC != lLCList.end(); ++itLC) {
00176 stdair::LegCabin* lLC_ptr = *itLC;
00177 assert (lLC_ptr != NULL);
00178 MCOptimiser::optimisationByMCIntegration (*lLC_ptr);
00179 const stdair::BidPrice_T& lCurrentBidPrice =
00180 lLC_ptr->getCurrentBidPrice();
00181 const stdair::BidPrice_T& lPreviousBidPrice =
00182 lLC_ptr->getPreviousBidPrice();
00183 assert (lPreviousBidPrice != 0);
00184 const double lBPVariation =
00185 std::abs((lCurrentBidPrice - lPreviousBidPrice)/lPreviousBidPrice);
00186 lMaxBPVariation = std::max(lMaxBPVariation, lBPVariation);
00187 }
00188 }
00189 }
00190 return lMaxBPVariation;
00191 }
00192
00193 }