$treeview $search $mathjax
RMOL Logo  1.00.0
$projectbrief
$projectbrief
$searchbox

rmol/RMOL_Service.hpp

Go to the documentation of this file.
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