RMOL Logo  0.25.3
C++ library of Revenue Management and Optimisation classes and functions
 All Classes Namespaces Files Functions Variables Typedefs Friends Macros Pages
RMOL_Service.hpp
Go to the documentation of this file.
1 #ifndef __RMOL_SVC_RMOL_SERVICE_HPP
2 #define __RMOL_SVC_RMOL_SERVICE_HPP
3 
4 // //////////////////////////////////////////////////////////////////////
5 // Import section
6 // //////////////////////////////////////////////////////////////////////
7 // STL
8 #include <string>
9 // StdAir
10 #include <stdair/stdair_basic_types.hpp>
11 #include <stdair/stdair_inventory_types.hpp>
12 #include <stdair/stdair_service_types.hpp>
13 #include <stdair/stdair_maths_types.hpp>
14 #include <stdair/basic/ForecastingMethod.hpp>
15 #include <stdair/basic/PartnershipTechnique.hpp>
16 // RMOL
17 #include <rmol/RMOL_Types.hpp>
18 
20 namespace stdair {
21  class FlightDate;
22  struct BasLogParams;
23  struct BasDBParams;
24  class BomRoot;
25  class AirlineClassList;
26  class YieldFeatures;
27  class Inventory;
28  class OnDDate;
29 }
30 
31 namespace RMOL {
32 
34  class RMOL_ServiceContext;
35 
39  class RMOL_Service {
40  public:
41  // ////////// Constructors and destructors //////////
57  RMOL_Service (const stdair::BasLogParams&, const stdair::BasDBParams&);
58 
70  RMOL_Service (const stdair::BasLogParams&);
71 
87  RMOL_Service (stdair::STDAIR_ServicePtr_T);
88 
112  void parseAndLoad (const stdair::CabinCapacity_T& iCabinCapacity,
113  const stdair::Filename_T& iDemandAndClassDataFile);
114 
118  void setUpStudyStatManager();
119 
123  ~RMOL_Service();
124 
125 
126  public:
127  // /////////////// Business Methods /////////////////
133  void buildSampleBom();
134 
138  void optimalOptimisationByMCIntegration (const int K);
139 
144 
149 
154 
159 
163  bool optimise (stdair::FlightDate&, const stdair::DateTime_T&,
164  const stdair::ForecastingMethod&, const stdair::PartnershipTechnique&);
165 
170  // O&D based forecast
171  void forecastOnD (const stdair::DateTime_T&);
172 
173  stdair::YieldFeatures* getYieldFeatures(const stdair::OnDDate&, const stdair::CabinCode_T&,
174  stdair::BomRoot&);
175 
176  void forecastOnD (const stdair::YieldFeatures&, stdair::OnDDate&,
177  const stdair::CabinCode_T&, const stdair::DTD_T&,
178  stdair::BomRoot&);
179 
180  void setOnDForecast (const stdair::AirlineClassList&, const stdair::MeanValue_T&,
181  const stdair::StdDevValue_T&, stdair::OnDDate&, const stdair::CabinCode_T&,
182  stdair::BomRoot&);
183 
184  // Single segment O&D
185  void setOnDForecast (const stdair::AirlineCode_T&, const stdair::Date_T&, const stdair::AirportCode_T&,
186  const stdair::AirportCode_T&, const stdair::CabinCode_T&, const stdair::ClassCode_T&,
187  const stdair::MeanValue_T&, const stdair::StdDevValue_T&, const stdair::Yield_T&, stdair::BomRoot&);
188 
189  // Multiple segment O&D
190  void setOnDForecast (const stdair::AirlineCodeList_T&, const stdair::AirlineCode_T&,const stdair::Date_T&,
191  const stdair::AirportCode_T&, const stdair::AirportCode_T&, const stdair::CabinCode_T&,
192  const stdair::ClassCodeList_T&, const stdair::MeanValue_T&, const stdair::StdDevValue_T&,
193  const stdair::Yield_T&, stdair::BomRoot&);
194 
195  // Initialise (or re-initialise) the demand projections in all leg cabins
196  void resetDemandInformation (const stdair::DateTime_T&);
197 
198  void resetDemandInformation (const stdair::DateTime_T&, const stdair::Inventory&);
199 
200  /* Projection of demand */
201 
202  // Aggregated demand at booking class level.
203  void projectAggregatedDemandOnLegCabins(const stdair::DateTime_T&);
204 
205  // Static rule prorated yield
206  void projectOnDDemandOnLegCabinsUsingYP(const stdair::DateTime_T&);
207 
208  // Displacement-adjusted yield
209  void projectOnDDemandOnLegCabinsUsingDA(const stdair::DateTime_T&);
210 
211  // Dynamic yield proration (PF = BP_i/BP_{total}, where BP_{total} = sum(BP_i))
212  void projectOnDDemandOnLegCabinsUsingDYP(const stdair::DateTime_T&);
213 
214  void projectOnDDemandOnLegCabinsUsingDYP(const stdair::DateTime_T&, const stdair::Inventory&);
215 
217  // O&D-based optimisation (using demand aggregation or demand aggregation).
218  void optimiseOnD (const stdair::DateTime_T&);
219 
220  // O&D-based optimisation using displacement-adjusted yield.
221  void optimiseOnDUsingRMCooperation (const stdair::DateTime_T&);
222 
223  // Advanced version of O&D-based optimisation using displacement-adjusted yield.
224  // Network optimisation instead of separate inventory optimisation.
225  void optimiseOnDUsingAdvancedRMCooperation (const stdair::DateTime_T&);
226 
227  // Update bid priceand send to partners
228  void updateBidPrice (const stdair::DateTime_T&);
229  void updateBidPrice (const stdair::FlightDate&, stdair::BomRoot&);
230 
231  public:
232  // //////////////// Export support methods /////////////////
243  std::string jsonExport (const stdair::AirlineCode_T&,
244  const stdair::FlightNumber_T&,
245  const stdair::Date_T& iDepartureDate) const;
246 
247 
248  public:
249  // //////////////// Display support methods /////////////////
257  std::string csvDisplay() const;
258 
259 
260  private:
261  // /////// Construction and Destruction helper methods ///////
265  RMOL_Service();
266 
270  RMOL_Service (const RMOL_Service&);
271 
281  stdair::STDAIR_ServicePtr_T initStdAirService (const stdair::BasLogParams&,
282  const stdair::BasDBParams&);
283 
292  stdair::STDAIR_ServicePtr_T initStdAirService (const stdair::BasLogParams&);
293 
302  void addStdAirService (stdair::STDAIR_ServicePtr_T,
303  const bool iOwnStdairService);
304 
309  void initServiceContext();
310 
317  void initRmolService();
318 
322  void finalise();
323 
324 
325  private:
326  // ////////// Service Context //////////
330  RMOL_ServiceContext* _rmolServiceContext;
331 
333  stdair::Date_T _previousForecastDate;
334  };
335 }
336 #endif // __RMOL_SVC_RMOL_SERVICE_HPP