$treeview $search $mathjax
00001 #ifndef __RMOL_SVC_RMOL_SERVICE_HPP 00002 #define __RMOL_SVC_RMOL_SERVICE_HPP 00003 00004 // ////////////////////////////////////////////////////////////////////// 00005 // Import section 00006 // ////////////////////////////////////////////////////////////////////// 00007 // STL 00008 #include <string> 00009 // StdAir 00010 #include <stdair/stdair_basic_types.hpp> 00011 #include <stdair/stdair_inventory_types.hpp> 00012 #include <stdair/stdair_service_types.hpp> 00013 #include <stdair/stdair_maths_types.hpp> 00014 #include <stdair/basic/UnconstrainingMethod.hpp> 00015 #include <stdair/basic/ForecastingMethod.hpp> 00016 #include <stdair/basic/PreOptimisationMethod.hpp> 00017 #include <stdair/basic/OptimisationMethod.hpp> 00018 #include <stdair/basic/PartnershipTechnique.hpp> 00019 // RMOL 00020 #include <rmol/RMOL_Types.hpp> 00021 00023 namespace stdair { 00024 class FlightDate; 00025 struct BasLogParams; 00026 struct BasDBParams; 00027 class BomRoot; 00028 class AirlineClassList; 00029 class YieldFeatures; 00030 class Inventory; 00031 class OnDDate; 00032 class SegmentCabin; 00033 } 00034 00035 namespace RMOL { 00036 00038 class RMOL_ServiceContext; 00039 00043 class RMOL_Service { 00044 public: 00045 // ////////// Constructors and destructors ////////// 00061 RMOL_Service (const stdair::BasLogParams&, const stdair::BasDBParams&); 00062 00074 RMOL_Service (const stdair::BasLogParams&); 00075 00091 RMOL_Service (stdair::STDAIR_ServicePtr_T); 00092 00116 void parseAndLoad (const stdair::CabinCapacity_T& iCabinCapacity, 00117 const stdair::Filename_T& iDemandAndClassDataFile); 00118 00122 void setUpStudyStatManager(); 00123 00127 ~RMOL_Service(); 00128 00129 00130 public: 00131 // /////////////// Business Methods ///////////////// 00137 void buildSampleBom(); 00138 00142 void clonePersistentBom (); 00143 00148 void buildComplementaryLinks (stdair::BomRoot&); 00149 00153 void optimalOptimisationByMCIntegration (const int K); 00154 00158 void optimalOptimisationByDP(); 00159 00163 void heuristicOptimisationByEmsr(); 00164 00168 void heuristicOptimisationByEmsrA(); 00169 00173 void heuristicOptimisationByEmsrB(); 00174 00178 void heuristicOptimisationByMCIntegrationForQFF(); 00179 00183 void heuristicOptimisationByEmsrBForQFF(); 00184 00188 void MRTForNewQFF(); 00189 00197 const stdair::SegmentCabin& 00198 retrieveDummySegmentCabin(const bool isForFareFamilies = false); 00199 00203 bool optimise (stdair::FlightDate&, const stdair::DateTime_T&, 00204 const stdair::UnconstrainingMethod&, 00205 const stdair::ForecastingMethod&, 00206 const stdair::PreOptimisationMethod&, 00207 const stdair::OptimisationMethod&, 00208 const stdair::PartnershipTechnique&); 00209 00214 // O&D based forecast 00215 void forecastOnD (const stdair::DateTime_T&); 00216 00217 stdair::YieldFeatures* getYieldFeatures(const stdair::OnDDate&, const stdair::CabinCode_T&, 00218 stdair::BomRoot&); 00219 00220 void forecastOnD (const stdair::YieldFeatures&, stdair::OnDDate&, 00221 const stdair::CabinCode_T&, const stdair::DTD_T&, 00222 stdair::BomRoot&); 00223 00224 void setOnDForecast (const stdair::AirlineClassList&, const stdair::MeanValue_T&, 00225 const stdair::StdDevValue_T&, stdair::OnDDate&, const stdair::CabinCode_T&, 00226 stdair::BomRoot&); 00227 00228 // Single segment O&D 00229 void setOnDForecast (const stdair::AirlineCode_T&, const stdair::Date_T&, const stdair::AirportCode_T&, 00230 const stdair::AirportCode_T&, const stdair::CabinCode_T&, const stdair::ClassCode_T&, 00231 const stdair::MeanValue_T&, const stdair::StdDevValue_T&, const stdair::Yield_T&, stdair::BomRoot&); 00232 00233 // Multiple segment O&D 00234 void setOnDForecast (const stdair::AirlineCodeList_T&, const stdair::AirlineCode_T&,const stdair::Date_T&, 00235 const stdair::AirportCode_T&, const stdair::AirportCode_T&, const stdair::CabinCode_T&, 00236 const stdair::ClassCodeList_T&, const stdair::MeanValue_T&, const stdair::StdDevValue_T&, 00237 const stdair::Yield_T&, stdair::BomRoot&); 00238 00239 // Initialise (or re-initialise) the demand projections in all leg cabins 00240 void resetDemandInformation (const stdair::DateTime_T&); 00241 00242 void resetDemandInformation (const stdair::DateTime_T&, const stdair::Inventory&); 00243 00244 /* Projection of demand */ 00245 00246 // Aggregated demand at booking class level. 00247 void projectAggregatedDemandOnLegCabins(const stdair::DateTime_T&); 00248 00249 // Static rule prorated yield 00250 void projectOnDDemandOnLegCabinsUsingYP(const stdair::DateTime_T&); 00251 00252 // Displacement-adjusted yield 00253 void projectOnDDemandOnLegCabinsUsingDA(const stdair::DateTime_T&); 00254 00255 // Dynamic yield proration (PF = BP_i/BP_{total}, where BP_{total} = sum(BP_i)) 00256 void projectOnDDemandOnLegCabinsUsingDYP(const stdair::DateTime_T&); 00257 00258 void projectOnDDemandOnLegCabinsUsingDYP(const stdair::DateTime_T&, const stdair::Inventory&); 00259 00261 // O&D-based optimisation (using demand aggregation or demand aggregation). 00262 void optimiseOnD (const stdair::DateTime_T&); 00263 00264 // O&D-based optimisation using displacement-adjusted yield. 00265 void optimiseOnDUsingRMCooperation (const stdair::DateTime_T&); 00266 00267 // Advanced version of O&D-based optimisation using displacement-adjusted yield. 00268 // Network optimisation instead of separate inventory optimisation. 00269 void optimiseOnDUsingAdvancedRMCooperation (const stdair::DateTime_T&); 00270 00271 // Update bid priceand send to partners 00272 void updateBidPrice (const stdair::DateTime_T&); 00273 void updateBidPrice (const stdair::FlightDate&, stdair::BomRoot&); 00274 00275 public: 00276 // //////////////// Export support methods ///////////////// 00287 std::string jsonExport (const stdair::AirlineCode_T&, 00288 const stdair::FlightNumber_T&, 00289 const stdair::Date_T& iDepartureDate) const; 00290 00291 00292 public: 00293 // //////////////// Display support methods ///////////////// 00301 std::string csvDisplay() const; 00302 00303 00304 private: 00305 // /////// Construction and Destruction helper methods /////// 00309 RMOL_Service(); 00310 00314 RMOL_Service (const RMOL_Service&); 00315 00325 stdair::STDAIR_ServicePtr_T initStdAirService (const stdair::BasLogParams&, 00326 const stdair::BasDBParams&); 00327 00336 stdair::STDAIR_ServicePtr_T initStdAirService (const stdair::BasLogParams&); 00337 00346 void addStdAirService (stdair::STDAIR_ServicePtr_T, 00347 const bool iOwnStdairService); 00348 00353 void initServiceContext(); 00354 00361 void initRmolService(); 00362 00366 void finalise(); 00367 00368 00369 private: 00370 // ////////// Service Context ////////// 00374 RMOL_ServiceContext* _rmolServiceContext; 00375 00377 stdair::Date_T _previousForecastDate; 00378 }; 00379 } 00380 #endif // __RMOL_SVC_RMOL_SERVICE_HPP