TraDemGen Logo  0.2.2
C++ Simulated Travel Demand Generation Library
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines
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 
00113     const POSProbabilityMass_T& getPOSProbabilityMass() const {
00114       return _posProMass;
00115     }
00116 
00117 
00118   public:
00119     // //////////////// Setters //////////////////    
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     // /////////////////// Business Methods ///////////////////
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     // ////////////////// Display support methods //////////////
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     // ////////// Constructors and destructors /////////
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     // ////////// Attributes //////////
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