Go to the documentation of this file.00001 #ifndef __TRADEMGEN_BOM_DEMANDSTREAM_HPP
00002 #define __TRADEMGEN_BOM_DEMANDSTREAM_HPP
00003
00004
00005
00006
00007
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
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
00039 typedef DemandStreamKey Key_T;
00040
00041
00042 public:
00043
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
00113 const POSProbabilityMass_T& getPOSProbabilityMass() const {
00114 return _posProMass;
00115 }
00116
00117
00118 public:
00119
00121 void setNumberOfRequestsGeneratedSoFar (const stdair:: Count_T& iCount) {
00122 _randomGenerationContext.setNumberOfRequestsGeneratedSoFar (iCount);
00123 }
00124
00126 void setDemandDistribution (const DemandDistribution& iDemandDistribution) {
00127 _demandDistribution = iDemandDistribution;
00128 }
00129
00131 void
00132 setDemandCharacteristics (const ArrivalPatternCumulativeDistribution_T& iArrivalPattern,
00133 const POSProbabilityMassFunction_T& iPOSProbMass,
00134 const ChannelProbabilityMassFunction_T& iChannelProbMass,
00135 const TripTypeProbabilityMassFunction_T& iTripTypeProbMass,
00136 const StayDurationProbabilityMassFunction_T& iStayDurationProbMass,
00137 const FrequentFlyerProbabilityMassFunction_T& iFrequentFlyerProbMass,
00138 const PreferredDepartureTimeContinuousDistribution_T& iPreferredDepartureTimeContinuousDistribution,
00139 const stdair::WTP_T& iMinWTP,
00140 const ValueOfTimeContinuousDistribution_T& iValueOfTimeContinuousDistribution) {
00141 _demandCharacteristics =
00142 DemandCharacteristics (iArrivalPattern, iPOSProbMass,
00143 iChannelProbMass, iTripTypeProbMass,
00144 iStayDurationProbMass, iFrequentFlyerProbMass,
00145 iPreferredDepartureTimeContinuousDistribution,
00146 iMinWTP, iValueOfTimeContinuousDistribution);
00147 }
00148
00150 void setTotalNumberOfRequestsToBeGenerated (const stdair::NbOfRequests_T& iNbOfRequests) {
00151 _totalNumberOfRequestsToBeGenerated = iNbOfRequests;
00152 }
00153
00155 void setRequestDateTimeRandomGeneratorSeed (const stdair::RandomSeed_T& iSeed) {
00156 _requestDateTimeRandomGenerator.init (iSeed);
00157 }
00158
00160 void setDemandCharacteristicsRandomGeneratorSeed (const stdair::RandomSeed_T& iSeed) {
00161 _demandCharacteristicsRandomGenerator.init (iSeed);
00162 }
00163
00168 void setPOSProbabilityMass (const POSProbabilityMass_T& iProbMass) {
00169 _posProMass = iProbMass;
00170 }
00171
00175 void setAll (const ArrivalPatternCumulativeDistribution_T&,
00176 const POSProbabilityMassFunction_T&,
00177 const ChannelProbabilityMassFunction_T&,
00178 const TripTypeProbabilityMassFunction_T&,
00179 const StayDurationProbabilityMassFunction_T&,
00180 const FrequentFlyerProbabilityMassFunction_T&,
00181 const PreferredDepartureTimeContinuousDistribution_T&,
00182 const stdair::WTP_T&,
00183 const ValueOfTimeContinuousDistribution_T&,
00184 const DemandDistribution&,
00185 stdair::BaseGenerator_T& ioSharedGenerator,
00186 const stdair::RandomSeed_T& iRequestDateTimeSeed,
00187 const stdair::RandomSeed_T& iDemandCharacteristicsSeed,
00188 const POSProbabilityMass_T&);
00189
00194 void setBoolFirstDateTimeRequest (const bool& iFirstDateTimeRequest) {
00195 _firstDateTimeRequest = iFirstDateTimeRequest;
00196 }
00197
00198
00199 public:
00200
00202 void incrementGeneratedRequestsCounter() {
00203 _randomGenerationContext.incrementGeneratedRequestsCounter();
00204 }
00205
00207 const bool stillHavingRequestsToBeGenerated (const stdair::DemandGenerationMethod& iDemandGenerationMethod) const;
00208
00210 const stdair::DateTime_T generateTimeOfRequestPoissonProcess();
00211
00213 const stdair::DateTime_T generateTimeOfRequestStatisticsOrder();
00214
00216 const stdair::AirportCode_T generatePOS();
00217
00219 const stdair::ChannelLabel_T generateChannel();
00220
00222 const stdair::TripType_T generateTripType();
00223
00225 const stdair::DayDuration_T generateStayDuration();
00226
00228 const stdair::FrequentFlyer_T generateFrequentFlyer();
00229
00231 const stdair::Duration_T generatePreferredDepartureTime();
00232
00234 const stdair::WTP_T generateWTP (stdair::RandomGeneration&,
00235 const stdair::Date_T&,
00236 const stdair::DateTime_T&,
00237 const stdair::DayDuration_T&);
00238
00240 const stdair::PriceValue_T generateValueOfTime();
00241
00252 stdair::BookingRequestPtr_T
00253 generateNextRequest (stdair::RandomGeneration&,
00254 const stdair::DemandGenerationMethod&);
00255
00257 void reset (stdair::BaseGenerator_T& ioSharedGenerator);
00258
00259
00260 public:
00261
00266 void toStream (std::ostream& ioOut) const {
00267 ioOut << toString();
00268 }
00269
00274 void fromStream (std::istream& ioIn) {
00275 }
00276
00280 std::string toString() const;
00281
00285 const std::string describeKey() const {
00286 return _key.toString();
00287 }
00288
00292 std::string display() const;
00293
00294 const stdair::Duration_T convertFloatIntoDuration (const stdair::FloatDuration_T);
00295
00296 protected:
00297
00301 DemandStream (const Key_T&);
00305 virtual ~DemandStream();
00306
00307 private:
00309 DemandStream();
00311 DemandStream (const DemandStream&);
00313 void init (stdair::BaseGenerator_T& ioSharedGenerator);
00314
00315
00316 protected:
00317
00321 Key_T _key;
00322
00326 BomAbstract* _parent;
00327
00331 stdair::HolderMap_T _holderMap;
00332
00336 DemandCharacteristics _demandCharacteristics;
00337
00341 DemandDistribution _demandDistribution;
00342
00346 stdair::NbOfRequests_T _totalNumberOfRequestsToBeGenerated;
00347
00351 RandomGenerationContext _randomGenerationContext;
00352
00356 stdair::RandomGeneration _requestDateTimeRandomGenerator;
00357
00361 stdair::RandomGeneration _demandCharacteristicsRandomGenerator;
00362
00367 POSProbabilityMass_T _posProMass;
00368
00369 private:
00370 bool _stillHavingRequestsToBeGenerated;
00371
00372 bool _firstDateTimeRequest;
00373
00374 stdair::FloatDuration_T _dateTimeLastRequest;
00375 };
00376
00377 }
00378 #endif // __TRADEMGEN_BOM_DEMANDSTREAM_HPP