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
Utilities.cpp
Go to the documentation of this file.
1 
2 // //////////////////////////////////////////////////////////////////////
3 // Import section
4 // //////////////////////////////////////////////////////////////////////
5 // STL
6 #include <cassert>
7 #include <string>
8 #include <numeric>
9 #include <algorithm>
10 #include <cmath>
11 // StdAir
12 #include <stdair/basic/BasConst_Inventory.hpp>
13 #include <stdair/bom/BomManager.hpp>
14 #include <stdair/bom/SegmentCabin.hpp>
15 #include <stdair/service/Logger.hpp>
16 // RMOL
18 #include <rmol/bom/Utilities.hpp>
20 
21 namespace RMOL {
22  // ////////////////////////////////////////////////////////////////////
23  void Utilities::
25  double& ioMean, double& ioStdDev) {
26  ioMean = 0.0; ioStdDev = 0.0;
27  unsigned int lNbOfSamples = iVector.size();
28  assert (lNbOfSamples > 1);
29 
30  // Compute the mean
31  for (UnconstrainedDemandVector_T::const_iterator itSample = iVector.begin();
32  itSample != iVector.end(); ++itSample) {
33  //STDAIR_LOG_NOTIFICATION (*itSample);
34  ioMean += *itSample;
35  }
36  ioMean /= lNbOfSamples;
37 
38  // Compute the standard deviation
39  for (UnconstrainedDemandVector_T::const_iterator itSample = iVector.begin();
40  itSample != iVector.end(); ++itSample) {
41  const double& lSample = *itSample;
42  ioStdDev += ((lSample - ioMean) * (lSample - ioMean));
43  }
44  ioStdDev /= (lNbOfSamples - 1);
45  ioStdDev = sqrt (ioStdDev);
46 
47  // Sanity check
48  if (ioStdDev == 0) {
49  ioStdDev = 0.1;
50  }
51  }
52 
53  // ////////////////////////////////////////////////////////////////////
54  stdair::DCPList_T Utilities::
55  buildRemainingDCPList (const stdair::DTD_T& iDTD) {
56  stdair::DCPList_T oDCPList;
57 
58  const stdair::DCPList_T lWholeDCPList = stdair::DEFAULT_DCP_LIST;
59  stdair::DCPList_T::const_iterator itDCP = lWholeDCPList.begin();
60  while (itDCP != lWholeDCPList.end()) {
61  const stdair::DCP_T& lDCP = *itDCP;
62  if (iDTD >= lDCP) {
63  break;
64  }
65  ++itDCP;
66  }
67  assert (itDCP != lWholeDCPList.end());
68 
69  oDCPList.push_back (iDTD);
70  ++itDCP;
71  for (; itDCP != lWholeDCPList.end(); ++itDCP) {
72  oDCPList.push_back (*itDCP);
73  }
74 
75  return oDCPList;
76  }
77 
78  // ////////////////////////////////////////////////////////////////////
79  stdair::DCPList_T Utilities::
80  buildRemainingDCPList2 (const stdair::DTD_T& iDTD) {
81  stdair::DCPList_T oDCPList;
82 
83  const stdair::DCPList_T lWholeDCPList = RMOL::DEFAULT_DCP_LIST;
84  stdair::DCPList_T::const_iterator itDCP = lWholeDCPList.begin();
85  while (itDCP != lWholeDCPList.end()) {
86  const stdair::DCP_T& lDCP = *itDCP;
87  if (iDTD >= lDCP) {
88  break;
89  }
90  ++itDCP;
91  }
92  assert (itDCP != lWholeDCPList.end());
93 
94  oDCPList.push_back (iDTD);
95  ++itDCP;
96  for (; itDCP != lWholeDCPList.end(); ++itDCP) {
97  oDCPList.push_back (*itDCP);
98  }
99 
100  return oDCPList;
101  }
102 
103  // ////////////////////////////////////////////////////////////////////
104  stdair::NbOfSegments_T Utilities::
105  getNbOfDepartedSimilarSegments (const stdair::SegmentCabin& iSegmentCabin,
106  const stdair::Date_T& iEventDate) {
107  stdair::DTD_T lDTD = 0;
108  // Retrieve the guillotine block.
109  const stdair::GuillotineBlock& lGuillotineBlock =
110  iSegmentCabin.getGuillotineBlock();
112  getNbOfSegmentAlreadyPassedThisDTD (lGuillotineBlock, lDTD, iEventDate);
113  }
114 
115 }