$treeview $search $mathjax
TraDemGen Logo  1.00.0
$projectbrief
$projectbrief
$searchbox

DemandStream.hpp

Go to the documentation of this file.
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