$treeview $search $mathjax
00001 #ifndef __TRADEMGEN_BOM_DEMANDSTREAM_HPP 00002 #define __TRADEMGEN_BOM_DEMANDSTREAM_HPP 00003 00004 // ////////////////////////////////////////////////////////////////////// 00005 // Import section 00006 // ////////////////////////////////////////////////////////////////////// 00007 // StdAir 00008 #include <stdair/bom/BomAbstract.hpp> 00009 #include <stdair/bom/BookingRequestTypes.hpp> 00010 #include <stdair/basic/RandomGeneration.hpp> 00011 #include <stdair/basic/DemandGenerationMethod.hpp> 00012 // TraDemGen 00013 #include <trademgen/basic/DemandCharacteristics.hpp> 00014 #include <trademgen/basic/DemandDistribution.hpp> 00015 #include <trademgen/basic/RandomGenerationContext.hpp> 00016 #include <trademgen/bom/DemandStreamKey.hpp> 00017 #include <trademgen/bom/DemandStreamTypes.hpp> 00018 00020 namespace stdair { 00021 class FacBomManager; 00022 template <typename BOM> class FacBom; 00023 } 00024 00025 namespace TRADEMGEN { 00026 00030 class DemandStream : public stdair::BomAbstract { 00031 template <typename BOM> friend class stdair::FacBom; 00032 friend class stdair::FacBomManager; 00033 00034 public: 00035 // ////////// Type definitions //////////// 00039 typedef DemandStreamKey Key_T; 00040 00041 00042 public: 00043 // ///////////// Getters /////////// 00045 const Key_T& getKey() const { 00046 return _key; 00047 } 00048 00050 BomAbstract* const getParent() const { 00051 return _parent; 00052 } 00053 00055 const stdair::AirportCode_T& getOrigin() const { 00056 return _key.getOrigin(); 00057 } 00058 00060 const stdair::AirportCode_T& getDestination() const { 00061 return _key.getDestination(); 00062 } 00063 00065 const stdair::Date_T& getPreferredDepartureDate() const { 00066 return _key.getPreferredDepartureDate(); 00067 } 00068 00070 const stdair::CabinCode_T& getPreferredCabin() const { 00071 return _key.getPreferredCabin(); 00072 } 00073 00075 const stdair::HolderMap_T& getHolderMap() const { 00076 return _holderMap; 00077 } 00078 00080 const DemandCharacteristics& getDemandCharacteristics() const { 00081 return _demandCharacteristics; 00082 } 00083 00085 const DemandDistribution& getDemandDistribution() const { 00086 return _demandDistribution; 00087 } 00088 00090 const stdair::NbOfRequests_T& getTotalNumberOfRequestsToBeGenerated() const{ 00091 return _totalNumberOfRequestsToBeGenerated; 00092 } 00093 00095 const stdair::NbOfRequests_T& getMeanNumberOfRequests() const { 00096 return _demandDistribution._meanNumberOfRequests; 00097 } 00098 00100 const stdair::StdDevValue_T& getStdDevNumberOfRequests() const { 00101 return _demandDistribution._stdDevNumberOfRequests; 00102 } 00103 00105 const stdair::Count_T& getNumberOfRequestsGeneratedSoFar() const { 00106 return _randomGenerationContext.getNumberOfRequestsGeneratedSoFar(); 00107 } 00108 00110 const stdair::Disutility_T& getChangeFeeDisutility() const { 00111 return _demandCharacteristics._changeFeeDisutility; 00112 } 00113 00115 const stdair::Disutility_T& getNonRefundableDisutility() const { 00116 return _demandCharacteristics._nonRefundableDisutility; 00117 } 00118 00123 const POSProbabilityMass_T& getPOSProbabilityMass() const { 00124 return _posProMass; 00125 } 00126 00127 00128 public: 00129 // //////////////// Setters ////////////////// 00131 void setNumberOfRequestsGeneratedSoFar (const stdair:: Count_T& iCount) { 00132 _randomGenerationContext.setNumberOfRequestsGeneratedSoFar (iCount); 00133 } 00134 00136 void setDemandDistribution (const DemandDistribution& iDemandDistribution) { 00137 _demandDistribution = iDemandDistribution; 00138 } 00139 00141 void 00142 setDemandCharacteristics (const ArrivalPatternCumulativeDistribution_T& iArrivalPattern, 00143 const POSProbabilityMassFunction_T& iPOSProbMass, 00144 const ChannelProbabilityMassFunction_T& iChannelProbMass, 00145 const TripTypeProbabilityMassFunction_T& iTripTypeProbMass, 00146 const StayDurationProbabilityMassFunction_T& iStayDurationProbMass, 00147 const FrequentFlyerProbabilityMassFunction_T& iFrequentFlyerProbMass, 00148 const stdair::ChangeFeesRatio_T& iChangeFeeProb, 00149 const stdair::Disutility_T& iChangeFeeDisutility, 00150 const stdair::NonRefundableRatio_T& iNonRefundableProb, 00151 const stdair::Disutility_T& iNonRefundableDisutility, 00152 const PreferredDepartureTimeContinuousDistribution_T& iPreferredDepartureTimeContinuousDistribution, 00153 const stdair::WTP_T& iMinWTP, 00154 const ValueOfTimeContinuousDistribution_T& iValueOfTimeContinuousDistribution) { 00155 _demandCharacteristics = 00156 DemandCharacteristics (iArrivalPattern, iPOSProbMass, 00157 iChannelProbMass, iTripTypeProbMass, 00158 iStayDurationProbMass, iFrequentFlyerProbMass, 00159 iChangeFeeProb, iChangeFeeDisutility, 00160 iNonRefundableProb, iNonRefundableDisutility, 00161 iPreferredDepartureTimeContinuousDistribution, 00162 iMinWTP, iValueOfTimeContinuousDistribution); 00163 } 00164 00166 void setTotalNumberOfRequestsToBeGenerated (const stdair::NbOfRequests_T& iNbOfRequests) { 00167 _totalNumberOfRequestsToBeGenerated = iNbOfRequests; 00168 } 00169 00171 void setRequestDateTimeRandomGeneratorSeed (const stdair::RandomSeed_T& iSeed) { 00172 _requestDateTimeRandomGenerator.init (iSeed); 00173 } 00174 00176 void setDemandCharacteristicsRandomGeneratorSeed (const stdair::RandomSeed_T& iSeed) { 00177 _demandCharacteristicsRandomGenerator.init (iSeed); 00178 } 00179 00184 void setPOSProbabilityMass (const POSProbabilityMass_T& iProbMass) { 00185 _posProMass = iProbMass; 00186 } 00187 00191 void setAll (const ArrivalPatternCumulativeDistribution_T&, 00192 const POSProbabilityMassFunction_T&, 00193 const ChannelProbabilityMassFunction_T&, 00194 const TripTypeProbabilityMassFunction_T&, 00195 const StayDurationProbabilityMassFunction_T&, 00196 const FrequentFlyerProbabilityMassFunction_T&, 00197 const stdair::ChangeFeesRatio_T&, 00198 const stdair::Disutility_T&, 00199 const stdair::NonRefundableRatio_T&, 00200 const stdair::Disutility_T&, 00201 const PreferredDepartureTimeContinuousDistribution_T&, 00202 const stdair::WTP_T&, 00203 const ValueOfTimeContinuousDistribution_T&, 00204 const DemandDistribution&, 00205 stdair::BaseGenerator_T& ioSharedGenerator, 00206 const stdair::RandomSeed_T& iRequestDateTimeSeed, 00207 const stdair::RandomSeed_T& iDemandCharacteristicsSeed, 00208 const POSProbabilityMass_T&); 00209 00214 void setBoolFirstDateTimeRequest (const bool& iFirstDateTimeRequest) { 00215 _firstDateTimeRequest = iFirstDateTimeRequest; 00216 } 00217 00218 00219 public: 00220 // /////////////////// Business Methods /////////////////// 00222 void incrementGeneratedRequestsCounter() { 00223 _randomGenerationContext.incrementGeneratedRequestsCounter(); 00224 } 00225 00227 const bool stillHavingRequestsToBeGenerated (const stdair::DemandGenerationMethod& iDemandGenerationMethod) const; 00228 00230 const stdair::DateTime_T generateTimeOfRequestPoissonProcess(); 00231 00233 const stdair::DateTime_T generateTimeOfRequestStatisticsOrder(); 00234 00236 const stdair::AirportCode_T generatePOS(); 00237 00239 const stdair::ChannelLabel_T generateChannel(); 00240 00242 const stdair::TripType_T generateTripType(); 00243 00245 const stdair::DayDuration_T generateStayDuration(); 00246 00248 const stdair::FrequentFlyer_T generateFrequentFlyer(); 00249 00251 const stdair::ChangeFees_T generateChangeFees(); 00252 00254 const stdair::NonRefundable_T generateNonRefundable(); 00255 00257 const stdair::Duration_T generatePreferredDepartureTime(); 00258 00260 const stdair::WTP_T generateWTP (stdair::RandomGeneration&, 00261 const stdair::Date_T&, 00262 const stdair::DateTime_T&, 00263 const stdair::DayDuration_T&); 00264 00266 const stdair::PriceValue_T generateValueOfTime(); 00267 00278 stdair::BookingRequestPtr_T 00279 generateNextRequest (stdair::RandomGeneration&, 00280 const stdair::DemandGenerationMethod&); 00281 00283 void reset (stdair::BaseGenerator_T& ioSharedGenerator); 00284 00285 00286 public: 00287 // ////////////////// Display support methods ////////////// 00292 void toStream (std::ostream& ioOut) const { 00293 ioOut << toString(); 00294 } 00295 00300 void fromStream (std::istream& ioIn) { 00301 } 00302 00306 std::string toString() const; 00307 00311 const std::string describeKey() const { 00312 return _key.toString(); 00313 } 00314 00318 std::string display() const; 00319 const stdair::Duration_T convertFloatIntoDuration (const stdair::FloatDuration_T); 00320 00321 protected: 00322 // ////////// Constructors and destructors ///////// 00326 DemandStream (const Key_T&); 00330 virtual ~DemandStream(); 00331 00332 private: 00334 DemandStream(); 00336 DemandStream (const DemandStream&); 00338 void init (stdair::BaseGenerator_T& ioSharedGenerator); 00339 00340 00341 protected: 00342 // ////////// Attributes ////////// 00346 Key_T _key; 00347 00351 BomAbstract* _parent; 00352 00356 stdair::HolderMap_T _holderMap; 00357 00361 DemandCharacteristics _demandCharacteristics; 00362 00366 DemandDistribution _demandDistribution; 00367 00371 stdair::NbOfRequests_T _totalNumberOfRequestsToBeGenerated; 00372 00376 RandomGenerationContext _randomGenerationContext; 00377 00381 stdair::RandomGeneration _requestDateTimeRandomGenerator; 00382 00386 stdair::RandomGeneration _demandCharacteristicsRandomGenerator; 00387 00392 POSProbabilityMass_T _posProMass; 00393 00394 private: 00395 bool _stillHavingRequestsToBeGenerated; 00396 bool _firstDateTimeRequest; 00397 stdair::FloatDuration_T _dateTimeLastRequest; 00398 }; 00399 00400 } 00401 #endif // __TRADEMGEN_BOM_DEMANDSTREAM_HPP