RMOL Logo  0.25.3
C++ library of Revenue Management and Optimisation classes and functions
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/ForecastingMethod.hpp>
00015 #include <stdair/basic/PartnershipTechnique.hpp>
00016 // RMOL
00017 #include <rmol/RMOL_Types.hpp>
00018 
00020 namespace stdair {
00021   class FlightDate;
00022   struct BasLogParams;
00023   struct BasDBParams;
00024   class BomRoot;
00025   class AirlineClassList;
00026   class YieldFeatures;
00027   class Inventory;
00028   class OnDDate;
00029 }
00030 
00031 namespace RMOL {
00032 
00034   class RMOL_ServiceContext;
00035 
00039   class RMOL_Service {
00040   public:
00041     // ////////// Constructors and destructors //////////
00057     RMOL_Service (const stdair::BasLogParams&, const stdair::BasDBParams&);
00058 
00070     RMOL_Service (const stdair::BasLogParams&);
00071 
00087     RMOL_Service (stdair::STDAIR_ServicePtr_T);
00088         
00112     void parseAndLoad (const stdair::CabinCapacity_T& iCabinCapacity,
00113                        const stdair::Filename_T& iDemandAndClassDataFile);
00114 
00118     void setUpStudyStatManager();
00119 
00123     ~RMOL_Service();
00124 
00125 
00126   public:
00127     // /////////////// Business Methods /////////////////
00133     void buildSampleBom();
00134 
00138     void optimalOptimisationByMCIntegration (const int K);
00139 
00143     void optimalOptimisationByDP();
00144 
00148     void heuristicOptimisationByEmsr();
00149     
00153     void heuristicOptimisationByEmsrA();
00154 
00158     void heuristicOptimisationByEmsrB();
00159 
00163     bool optimise (stdair::FlightDate&, const stdair::DateTime_T&,
00164                    const stdair::ForecastingMethod&, const stdair::PartnershipTechnique&);
00165 
00170     // O&D based forecast
00171     void forecastOnD (const stdair::DateTime_T&);
00172 
00173     stdair::YieldFeatures* getYieldFeatures(const stdair::OnDDate&, const stdair::CabinCode_T&,
00174                                             stdair::BomRoot&);
00175     
00176     void forecastOnD (const stdair::YieldFeatures&, stdair::OnDDate&,
00177                       const stdair::CabinCode_T&, const stdair::DTD_T&, 
00178                       stdair::BomRoot&);
00179 
00180     void setOnDForecast (const stdair::AirlineClassList&, const stdair::MeanValue_T&,
00181                          const stdair::StdDevValue_T&, stdair::OnDDate&, const stdair::CabinCode_T&,
00182                          stdair::BomRoot&);
00183 
00184     // Single segment O&D
00185     void setOnDForecast (const stdair::AirlineCode_T&, const stdair::Date_T&, const stdair::AirportCode_T&,
00186                          const stdair::AirportCode_T&, const stdair::CabinCode_T&, const stdair::ClassCode_T&,
00187                          const stdair::MeanValue_T&, const stdair::StdDevValue_T&, const stdair::Yield_T&, stdair::BomRoot&);
00188 
00189     // Multiple segment O&D
00190     void setOnDForecast (const stdair::AirlineCodeList_T&, const stdair::AirlineCode_T&,const stdair::Date_T&,
00191                          const stdair::AirportCode_T&, const stdair::AirportCode_T&, const stdair::CabinCode_T&,
00192                          const stdair::ClassCodeList_T&, const stdair::MeanValue_T&, const stdair::StdDevValue_T&,
00193                          const stdair::Yield_T&, stdair::BomRoot&);
00194 
00195     // Initialise (or re-initialise) the demand projections in all leg cabins
00196     void resetDemandInformation (const stdair::DateTime_T&);
00197 
00198     void resetDemandInformation (const stdair::DateTime_T&, const stdair::Inventory&);
00199 
00200     /* Projection of demand */
00201 
00202     // Aggregated demand at booking class level.
00203     void projectAggregatedDemandOnLegCabins(const stdair::DateTime_T&);
00204 
00205     // Static rule prorated yield
00206     void projectOnDDemandOnLegCabinsUsingYP(const stdair::DateTime_T&);
00207 
00208     // Displacement-adjusted yield
00209     void projectOnDDemandOnLegCabinsUsingDA(const stdair::DateTime_T&);
00210 
00211     // Dynamic yield proration (PF = BP_i/BP_{total}, where BP_{total} = sum(BP_i))
00212     void projectOnDDemandOnLegCabinsUsingDYP(const stdair::DateTime_T&);
00213 
00214     void projectOnDDemandOnLegCabinsUsingDYP(const stdair::DateTime_T&, const stdair::Inventory&);
00215 
00217     // O&D-based optimisation (using demand aggregation or demand aggregation).
00218     void optimiseOnD (const stdair::DateTime_T&);
00219 
00220     // O&D-based optimisation using displacement-adjusted yield.
00221     void optimiseOnDUsingRMCooperation (const stdair::DateTime_T&);
00222 
00223     // Advanced version of O&D-based optimisation using displacement-adjusted yield.
00224     // Network optimisation instead of separate inventory optimisation.    
00225     void optimiseOnDUsingAdvancedRMCooperation (const stdair::DateTime_T&);
00226 
00227     // Update bid priceand send to partners
00228     void updateBidPrice (const stdair::DateTime_T&);
00229     void updateBidPrice (const stdair::FlightDate&, stdair::BomRoot&);
00230 
00231   public:
00232     // //////////////// Export support methods /////////////////
00243     std::string jsonExport (const stdair::AirlineCode_T&,
00244                             const stdair::FlightNumber_T&,
00245                             const stdair::Date_T& iDepartureDate) const;
00246 
00247 
00248   public:
00249     // //////////////// Display support methods /////////////////
00257     std::string csvDisplay() const;
00258 
00259 
00260   private:
00261     // /////// Construction and Destruction helper methods ///////
00265     RMOL_Service();
00266 
00270     RMOL_Service (const RMOL_Service&);
00271 
00281     stdair::STDAIR_ServicePtr_T initStdAirService (const stdair::BasLogParams&,
00282                                                    const stdair::BasDBParams&);
00283     
00292     stdair::STDAIR_ServicePtr_T initStdAirService (const stdair::BasLogParams&);
00293     
00302     void addStdAirService (stdair::STDAIR_ServicePtr_T,
00303                            const bool iOwnStdairService);
00304 
00309     void initServiceContext();
00310     
00317     void initRmolService();
00318 
00322     void finalise();
00323 
00324 
00325   private:
00326     // ////////// Service Context //////////
00330     RMOL_ServiceContext* _rmolServiceContext;
00331 
00333     stdair::Date_T _previousForecastDate;
00334   };
00335 }
00336 #endif // __RMOL_SVC_RMOL_SERVICE_HPP