From: <qua...@us...> - 2010-03-10 16:30:35
|
Revision: 159 http://stdair.svn.sourceforge.net/stdair/?rev=159&view=rev Author: quannaus Date: 2010-03-10 16:30:22 +0000 (Wed, 10 Mar 2010) Log Message: ----------- [dev] Added the lite version of ContinuousAttribute and CategoricalAttribute. Modified Paths: -------------- trunk/stdair/stdair/STDAIR_Types.hpp trunk/stdair/stdair/basic/CategoricalAttribute.hpp trunk/stdair/stdair/basic/ContinuousAttribute.hpp trunk/stdair/stdair/basic/DemandCharacteristicTypes.hpp trunk/stdair/stdair/basic/DemandCharacteristics.cpp trunk/stdair/stdair/basic/DemandCharacteristics.hpp trunk/stdair/stdair/basic/sources.mk trunk/stdair/stdair/bom/BomChildrenHolderImp.hpp trunk/stdair/stdair/bom/DemandStream.cpp trunk/stdair/stdair/bom/DemandStream.hpp trunk/stdair/stdair/bom/DemandStreamContent.cpp trunk/stdair/stdair/bom/DemandStreamContent.hpp trunk/stdair/stdair/factory/FacBomContent.hpp Added Paths: ----------- trunk/stdair/stdair/basic/CategoricalAttributeLite.hpp trunk/stdair/stdair/basic/ContinuousAttributeLite.hpp trunk/stdair/stdair/basic/DictionaryManager.cpp trunk/stdair/stdair/basic/DictionaryManager.hpp Modified: trunk/stdair/stdair/STDAIR_Types.hpp =================================================================== --- trunk/stdair/stdair/STDAIR_Types.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/STDAIR_Types.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -417,6 +417,9 @@ /** Probability */ typedef float Probability_T; + /** Dictionary key. */ + typedef unsigned char DictionaryKey_T; + // ////////////////////////////////////////////////////////////////////// // Date / Time /** Time duration in (integer) number of seconds */ Modified: trunk/stdair/stdair/basic/CategoricalAttribute.hpp =================================================================== --- trunk/stdair/stdair/basic/CategoricalAttribute.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/basic/CategoricalAttribute.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -9,6 +9,7 @@ #include <iosfwd> // STDAIR #include <stdair/STDAIR_Types.hpp> +#include <stdair/basic/DictionaryManager.hpp> namespace stdair { @@ -19,15 +20,15 @@ public: /** Define the probability mass function type. */ - typedef std::map<T, Probability_T> ProbabilityMassFunction_T; + typedef std::map<T, DictionaryKey_T> ProbabilityMassFunction_T; /** Define the inverse cumulative distribution type. */ - typedef std::map<Probability_T, T> InverseCumulativeDistribution_T; + typedef std::map<DictionaryKey_T, T> InverseCumulativeDistribution_T; - public: + private: // ///////////// Getters /////////// /** Get the probability mass function. */ - const std::map<T,Probability_T>& getProbabilityMassFunction() const { + const ProbabilityMassFunction_T& getProbabilityMassFunction() const { return _probabilityMassFunction; } @@ -47,8 +48,10 @@ // /////////////// Business Methods ////////// /** Get value from inverse cumulative distribution. */ const T getValue (Probability_T iCumulativeProbability) const { + const DictionaryKey_T lKey = + DictionaryManager::valueToKey (iCumulativeProbability); return _inverseCumulativeDistribution. - lower_bound (iCumulativeProbability)->second; + lower_bound (lKey)->second; } public: @@ -64,7 +67,8 @@ if (idx != 0) { oStr << ", "; } - oStr << it->first << ":" << it->second; + oStr << it->first << ":" + << DictionaryManager::keyToValue (it->second); } return oStr.str(); @@ -77,7 +81,7 @@ for (typename InverseCumulativeDistribution_T::const_iterator it = _inverseCumulativeDistribution.begin(); it != _inverseCumulativeDistribution.end(); ++it) { - oStr << "cumulative prob: " << it->first + oStr << "cumulative prob: " << DictionaryManager::keyToValue (it->first) << " value: " << it->second << std::endl; } @@ -108,11 +112,15 @@ for (typename ProbabilityMassFunction_T::const_iterator itProbabilityMassFunction = _probabilityMassFunction.begin(); itProbabilityMassFunction != _probabilityMassFunction.end(); ++itProbabilityMassFunction) { - Probability_T attribute_probability_mass = itProbabilityMassFunction->second; + Probability_T attribute_probability_mass = + DictionaryManager::keyToValue (itProbabilityMassFunction->second); if (attribute_probability_mass > 0) { T attribute_value = itProbabilityMassFunction->first; cumulative_probability_so_far += attribute_probability_mass; - _inverseCumulativeDistribution[cumulative_probability_so_far] = attribute_value; + DictionaryKey_T lKey = + DictionaryManager::valueToKey (cumulative_probability_so_far); + //_inverseCumulativeDistribution[lKey] = attribute_value; + _inverseCumulativeDistribution.insert (typename InverseCumulativeDistribution_T::value_type (lKey, attribute_value)); } } } Copied: trunk/stdair/stdair/basic/CategoricalAttributeLite.hpp (from rev 158, trunk/stdair/stdair/basic/CategoricalAttribute.hpp) =================================================================== --- trunk/stdair/stdair/basic/CategoricalAttributeLite.hpp (rev 0) +++ trunk/stdair/stdair/basic/CategoricalAttributeLite.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -0,0 +1,122 @@ +#ifndef __STDAIR_BAS_CATEGORICALATTRIBUTELITE_HPP +#define __STDAIR_BAS_CATEGORICALATTRIBUTELITE_HPP + +// ////////////////////////////////////////////////////////////////////// +// Import section +// ////////////////////////////////////////////////////////////////////// +// STL +#include <map> +#include <iosfwd> +// STDAIR +#include <stdair/STDAIR_Types.hpp> +#include <stdair/basic/DictionaryManager.hpp> +#include <stdair/service/Logger.hpp> + +namespace stdair { + + /** Class modeling the distribution of values that can be taken by a + categorical attribute. */ + template <class T> + struct CategoricalAttributeLite { + public: + /** Define the probability mass function type. */ + typedef std::map<T, Probability_T> ProbabilityMassFunction_T; + + public: + // /////////////// Business Methods ////////// + /** Get value from inverse cumulative distribution. */ + const T getValue (Probability_T iCumulativeProbability) const { + const DictionaryKey_T lKey = + DictionaryManager::valueToKey (iCumulativeProbability); + + for (unsigned int idx = 0; idx < _size; ++idx) { + if (_cumulativeDistribution[idx] >= lKey) { + return _valueArray[idx]; + } + } + + STDAIR_LOG_ERROR ("The following cumulative probability " + << "is out of range: " << iCumulativeProbability); + assert (false); + T t; + return t; + } + + public: + // ////////////// Display Support Methods ////////// + /** Display probability mass function. */ + const std::string displayProbabilityMass () const { + std::ostringstream oStr; + + for (unsigned int idx = 0; idx < _size; ++idx) { + if (idx != 0) { + oStr << ", "; + } + oStr << _valueArray [idx] << ":" + << DictionaryManager::keyToValue (_cumulativeDistribution[idx]); + } + return oStr.str(); + } + + public: + // ////////// Constructors and destructors ///////// + /** Constructor by default */ + CategoricalAttributeLite (const ProbabilityMassFunction_T& iValueMap) + : _size (iValueMap.size()) { + _cumulativeDistribution = new DictionaryKey_T[_size]; + _valueArray = new T[_size]; + init (iValueMap); + } + /** Destructor */ + virtual ~CategoricalAttributeLite () { + // TODO: Verify that the arrays are correctly cleaned. + delete _cumulativeDistribution; _cumulativeDistribution = NULL; + delete _valueArray; _valueArray = NULL; + } + + private: + /** Default constructors. */ + CategoricalAttributeLite (); + CategoricalAttributeLite (const CategoricalAttributeLite&); + + + /** Initialise the two arrays from the given map. */ + void init (const ProbabilityMassFunction_T& iValueMap) { + + Probability_T cumulative_probability_so_far = 0.0; + unsigned int idx = 0; + + // Browse the map to retrieve the values and to build the + // cumulative probabilities. + for (typename ProbabilityMassFunction_T::const_iterator itProbabilityMassFunction = iValueMap.begin(); + itProbabilityMassFunction != iValueMap.end(); + ++itProbabilityMassFunction, ++idx) { + + Probability_T attribute_probability_mass = + itProbabilityMassFunction->second; + if (attribute_probability_mass > 0) { + T attribute_value = itProbabilityMassFunction->first; + cumulative_probability_so_far += attribute_probability_mass; + DictionaryKey_T lKey = + DictionaryManager::valueToKey (cumulative_probability_so_far); + + // Build the two arrays. + _cumulativeDistribution[idx] = lKey; + _valueArray[idx] = attribute_value; + } + } + } + + private: + // ////////// Attributes ////////// + /** Size of the two arrays. */ + const unsigned int _size; + + /** Cumulative dictionary-coded distribution. */ + DictionaryKey_T* _cumulativeDistribution; + + /** The corresponding values. */ + T* _valueArray; + }; +} +#endif // __STDAIR_BAS_CATEGORICALATTRIBUTELITE_HPP Modified: trunk/stdair/stdair/basic/ContinuousAttribute.hpp =================================================================== --- trunk/stdair/stdair/basic/ContinuousAttribute.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/basic/ContinuousAttribute.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -9,6 +9,7 @@ #include <map> // STDAIR #include <stdair/STDAIR_Types.hpp> +#include <stdair/basic/DictionaryManager.hpp> #include <stdair/service/Logger.hpp> namespace stdair { @@ -21,10 +22,10 @@ // ///////////// Type definitions ////////////// /** */ - typedef std::multimap<T, Probability_T> ContinuousDistribution_T; - typedef std::multimap<Probability_T, T> ContinuousInverseDistribution_T; - - + typedef std::multimap<T, DictionaryKey_T> ContinuousDistribution_T; + typedef std::multimap<DictionaryKey_T, T> ContinuousInverseDistribution_T; + + private: // ///////////// Getters /////////// /** Get the cumulative distribution. */ const ContinuousDistribution_T& getCumulativeDistribution() const { @@ -36,7 +37,7 @@ return _inverseCumulativeDistribution; } - public: + private: // ///////////// Setters /////////// /** Set the cumulative distribution */ void setCumulativeDistribution (const ContinuousDistribution_T& iCumulativeDistribution) { @@ -48,10 +49,13 @@ // /////////////// Business Methods ////////// /** Get value from inverse cumulative distribution. */ const T getValue (const Probability_T& iCumulativeProbability) const { + const DictionaryKey_T lKey = + DictionaryManager::valueToKey (iCumulativeProbability); typename ContinuousInverseDistribution_T::const_iterator it = - _inverseCumulativeDistribution.lower_bound (iCumulativeProbability); + _inverseCumulativeDistribution.lower_bound (lKey); - Probability_T cumulativeProbabilityNextPoint = it->first; + Probability_T cumulativeProbabilityNextPoint = + DictionaryManager::keyToValue (it->first); T valueNextPoint = it->second; if (it == _inverseCumulativeDistribution.begin()) { @@ -60,7 +64,8 @@ } --it; - Probability_T cumulativeProbabilityPreviousPoint = it->first; + Probability_T cumulativeProbabilityPreviousPoint = + DictionaryManager::keyToValue (it->first); T valuePreviousPoint = it->second; if (cumulativeProbabilityNextPoint == cumulativeProbabilityPreviousPoint) { return valuePreviousPoint; @@ -83,7 +88,8 @@ if (idx != 0) { oStr << ", "; } - oStr << it->first << ":" << it->second; + oStr << it->first << ":" + << DictionaryManager::keyToValue (it->second); } return oStr.str(); } @@ -94,7 +100,7 @@ for (typename ContinuousInverseDistribution_T::const_iterator it = _inverseCumulativeDistribution.begin(); it != _inverseCumulativeDistribution.end(); ++it) { - oStr << "cumulative prob: " << it->first + oStr << "cumulative prob: " << DictionaryManager::keyToValue (it->first) << " value: " << it->second << std::endl; } return oStr.str(); Copied: trunk/stdair/stdair/basic/ContinuousAttributeLite.hpp (from rev 158, trunk/stdair/stdair/basic/ContinuousAttribute.hpp) =================================================================== --- trunk/stdair/stdair/basic/ContinuousAttributeLite.hpp (rev 0) +++ trunk/stdair/stdair/basic/ContinuousAttributeLite.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -0,0 +1,129 @@ +#ifndef __STDAIR_BAS_CONTINUOUSATTRIBUTELITE_HPP +#define __STDAIR_BAS_CONTINUOUSATTRIBUTELITE_HPP + +// ////////////////////////////////////////////////////////////////////// +// Import section +// ////////////////////////////////////////////////////////////////////// +// STL +#include <string> +#include <map> +// STDAIR +#include <stdair/STDAIR_Types.hpp> +#include <stdair/basic/DictionaryManager.hpp> +#include <stdair/service/Logger.hpp> + +namespace stdair { + + /** Class modeling the distribution of values that can be taken by a + continuous attribute. */ + template <class T> + struct ContinuousAttributeLite { + public: + // ///////////// Type definitions ////////////// + typedef std::multimap<T, Probability_T> ContinuousDistribution_T; + + public: + // /////////////// Business Methods ////////// + /** Get value from inverse cumulative distribution. */ + const T getValue (const Probability_T& iCumulativeProbability) const { + const DictionaryKey_T lKey = + DictionaryManager::valueToKey (iCumulativeProbability); + unsigned int idx = 0; + + // Find the first cumulative probablity value greater or equal to lKey. + for (; idx < _size; ++idx) { + if (_cumulativeDistribution[idx] >= lKey) { + break; + } + } + + if (idx == 0) { + return _valueArray[idx]; + } + + Probability_T lCumulativeCurrentPoint = + DictionaryManager::keyToValue (_cumulativeDistribution[idx]); + Probability_T lCumulativePreviousPoint = + DictionaryManager::keyToValue (_cumulativeDistribution[idx-1]); + T lValueCurrentPoint = _valueArray[idx]; + T lValuePreviousPoint = _valueArray[idx-1]; + + if (lCumulativePreviousPoint == lCumulativeCurrentPoint) { + return lValuePreviousPoint; + } + + return lValuePreviousPoint + (lValueCurrentPoint - lValuePreviousPoint) + * (iCumulativeProbability - lCumulativePreviousPoint) + / (lCumulativeCurrentPoint - lCumulativePreviousPoint); + } + + public: + // ////////////// Display Support Methods ////////// + /** Display cumulative distribution */ + const std::string displayCumulativeDistribution() const { + std::ostringstream oStr; + + for (unsigned int idx = 0; idx < _size; ++idx) { + if (idx != 0) { + oStr << ", "; + } + oStr << _valueArray[idx] << ":" + << DictionaryManager::keyToValue (_cumulativeDistribution[idx]); + } + return oStr.str(); + } + + public: + // ////////// Constructors and destructors ///////// + /** Constructor */ + ContinuousAttributeLite (const ContinuousDistribution_T& iValueMap) + : _size (iValueMap.size()) { + _cumulativeDistribution = new DictionaryKey_T[_size]; + _valueArray = new T[_size]; + init (iValueMap); + } + + /** Destructor */ + virtual ~ContinuousAttributeLite () { + // TODO: Verify that the arrays are correctly cleaned. + delete _cumulativeDistribution; _cumulativeDistribution = NULL; + delete _valueArray; _valueArray = NULL; + } + + private: + /** Constructors by default */ + ContinuousAttributeLite (); + ContinuousAttributeLite (const ContinuousAttributeLite&); + + /** Determine inverse cumulative distribution from cumulative + distribution (initialisation). */ + void init (const ContinuousDistribution_T& iValueMap) { + unsigned int idx = 0; + + // Browse the map to retrieve the values and cumulative probabilities. + for (typename ContinuousDistribution_T::const_iterator it = + iValueMap.begin(); it != iValueMap.end(); ++it, ++idx) { + + T attributeValue = it->first; + DictionaryKey_T lKey = DictionaryManager::valueToKey (it->second); + + // Build the two arrays. + _cumulativeDistribution[idx] = lKey; + _valueArray[idx] = attributeValue; + } + } + + private: + // ////////// Attributes ////////// + /** Size of the two arrays. */ + const unsigned int _size; + + /** Cumulative dictionary-coded distribution. */ + DictionaryKey_T* _cumulativeDistribution; + + /** The corresponding values. */ + T* _valueArray; + }; + +} +#endif // __STDAIR_BAS_CONTINUOUSATTRIBUTELITE_HPP Modified: trunk/stdair/stdair/basic/DemandCharacteristicTypes.hpp =================================================================== --- trunk/stdair/stdair/basic/DemandCharacteristicTypes.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/basic/DemandCharacteristicTypes.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -6,95 +6,64 @@ // ////////////////////////////////////////////////////////////////////// // StdAir #include <stdair/STDAIR_Types.hpp> -#include <stdair/basic/ContinuousAttribute.hpp> -#include <stdair/basic/CategoricalAttribute.hpp> +#include <stdair/basic/ContinuousAttributeLite.hpp> +#include <stdair/basic/CategoricalAttributeLite.hpp> namespace stdair { /** Type definition for the continuous distribition of the duration (as a float number). */ - typedef ContinuousAttribute<FloatDuration_T> ContinuousFloatDuration_T; + typedef ContinuousAttributeLite<FloatDuration_T> ContinuousFloatDuration_T; - /** Type definition for the arrival pattern. */ - typedef ContinuousFloatDuration_T::ContinuousDistribution_T ArrivalPattern_T; - /** Type definition for the arrival pattern cumulative distribution. */ - typedef std::multimap<FloatDuration_T, Probability_T> ArrivalPatternCumulativeDistribution_T; + typedef ContinuousFloatDuration_T::ContinuousDistribution_T ArrivalPatternCumulativeDistribution_T; - /** Type definition for the arrival pattern inverse cumulative distribution. */ - typedef std::multimap<Probability_T, FloatDuration_T> ArrivalPatternInverseCumulativeDistribution_T; - /** Define the point-of-sale probablity mass. */ - typedef CategoricalAttribute<AirportCode_T> POSProbabilityMass_T; + typedef CategoricalAttributeLite<AirportCode_T> POSProbabilityMass_T; /** Define the probability mass function type of point-of-sale. */ typedef POSProbabilityMass_T::ProbabilityMassFunction_T POSProbabilityMassFunction_T; - - /** Define the inverse cumulative distribution of point-of-sale. */ - typedef POSProbabilityMass_T::InverseCumulativeDistribution_T POSInverserCumulativeDistribution_T; /** Define the booking channel probablity mass. */ - typedef CategoricalAttribute<ChannelLabel_T> ChannelProbabilityMass_T; + typedef CategoricalAttributeLite<ChannelLabel_T> ChannelProbabilityMass_T; /** Define the probability mass function type of booking channel. */ typedef ChannelProbabilityMass_T::ProbabilityMassFunction_T ChannelProbabilityMassFunction_T; - /** Define the inverse cumulative distribution of channel. */ - typedef ChannelProbabilityMass_T::InverseCumulativeDistribution_T ChannelInverserCumulativeDistribution_T; - /** Define the trip type probablity mass. */ - typedef CategoricalAttribute<TripType_T> TripTypeProbabilityMass_T; + typedef CategoricalAttributeLite<TripType_T> TripTypeProbabilityMass_T; /** Define the probability mass function type of trip type. */ typedef TripTypeProbabilityMass_T::ProbabilityMassFunction_T TripTypeProbabilityMassFunction_T; - - /** Define the inverse cumulative distribution of trip type. */ - typedef TripTypeProbabilityMass_T::InverseCumulativeDistribution_T TripTypeInverserCumulativeDistribution_T; /** Define the stay duration probablity mass. */ - typedef CategoricalAttribute<DayDuration_T> StayDurationProbabilityMass_T; + typedef CategoricalAttributeLite<DayDuration_T> StayDurationProbabilityMass_T; /** Define the probability mass function type of stay duration. */ typedef StayDurationProbabilityMass_T::ProbabilityMassFunction_T StayDurationProbabilityMassFunction_T; - /** Define the inverse cumulative distribution of stay duration. */ - typedef StayDurationProbabilityMass_T::InverseCumulativeDistribution_T StayDurationInverserCumulativeDistribution_T; - /** Define the frequent flyer probablity mass. */ - typedef CategoricalAttribute<FrequentFlyer_T> FrequentFlyerProbabilityMass_T; + typedef CategoricalAttributeLite<FrequentFlyer_T> FrequentFlyerProbabilityMass_T; /** Define the probability mass function type of frequent flyer. */ typedef FrequentFlyerProbabilityMass_T::ProbabilityMassFunction_T FrequentFlyerProbabilityMassFunction_T; - /** Define the inverse cumulative distribution of frequent flyer. */ - typedef FrequentFlyerProbabilityMass_T::InverseCumulativeDistribution_T FrequentFlyerInverserCumulativeDistribution_T; - /** Define the preferred departure time cumulative distribution. */ - typedef ContinuousAttribute<IntDuration_T> PreferredDepartureTimeCumulativeDistribution_T; + typedef ContinuousAttributeLite<IntDuration_T> PreferredDepartureTimeCumulativeDistribution_T; /** Define the preferred departure time continuous distribution. */ typedef PreferredDepartureTimeCumulativeDistribution_T::ContinuousDistribution_T PreferredDepartureTimeContinuousDistribution_T; - /** Define the preferred departure time continuous inverse distribution. */ - typedef PreferredDepartureTimeCumulativeDistribution_T::ContinuousInverseDistribution_T PreferredDepartureTimeContinuousInverseDistribution_T; - /** Define the willingness-to-pay cumulative distribution. */ - typedef ContinuousAttribute<WTP_T> WTPCumulativeDistribution_T; + typedef ContinuousAttributeLite<WTP_T> WTPCumulativeDistribution_T; /** Define the willingness-to-pay continuous distribution. */ typedef WTPCumulativeDistribution_T::ContinuousDistribution_T WTPContinuousDistribution_T; - /** Define the willingness-to-pay continuous inverse distribution. */ - typedef WTPCumulativeDistribution_T::ContinuousInverseDistribution_T WTPContinuousInverseDistribution_T; - /** Define the value of time cumulative distribution. */ - typedef ContinuousAttribute<PriceValue_T> ValueOfTimeCumulativeDistribution_T; + typedef ContinuousAttributeLite<PriceValue_T> ValueOfTimeCumulativeDistribution_T; /** Define the value of time continuous distribution. */ typedef ValueOfTimeCumulativeDistribution_T::ContinuousDistribution_T ValueOfTimeContinuousDistribution_T; - - /** Define the value of time continuous inverse distribution. */ - typedef ValueOfTimeCumulativeDistribution_T::ContinuousInverseDistribution_T ValueOfTimeContinuousInverseDistribution_T; - } #endif // __STDAIR_BAS_DEMANDCHARACTERISTICTYPES_HPP Modified: trunk/stdair/stdair/basic/DemandCharacteristics.cpp =================================================================== --- trunk/stdair/stdair/basic/DemandCharacteristics.cpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/basic/DemandCharacteristics.cpp 2010-03-10 16:30:22 UTC (rev 159) @@ -14,51 +14,31 @@ // ///////////////////////////////////////////////////// DemandCharacteristics:: DemandCharacteristics (const DemandStreamKey_T& iKey, - const ContinuousFloatDuration_T& iArrivalPattern, - const POSProbabilityMass_T& iPOSProbMass, - const ChannelProbabilityMass_T& iChannelProbMass, - const TripTypeProbabilityMass_T& iTripTypeProbMass, - const StayDurationProbabilityMass_T& iStayDurationProbMass, - const FrequentFlyerProbabilityMass_T& iFrequentFlyerProbMass, - const PreferredDepartureTimeCumulativeDistribution_T& iPreferredDepartureTimeCumulativeDistribution, - const WTPCumulativeDistribution_T& iWTPCumulativeDistribution, - const ValueOfTimeCumulativeDistribution_T& iValueOfTimeCumulativeDistribution) + const ArrivalPatternCumulativeDistribution_T& iArrivalPattern, + const POSProbabilityMassFunction_T& iPOSProbMass, + const ChannelProbabilityMassFunction_T& iChannelProbMass, + const TripTypeProbabilityMassFunction_T& iTripTypeProbMass, + const StayDurationProbabilityMassFunction_T& iStayDurationProbMass, + const FrequentFlyerProbabilityMassFunction_T& iFrequentFlyerProbMass, + const PreferredDepartureTimeContinuousDistribution_T& iPreferredDepartureTimeContinuousDistribution, + const WTPContinuousDistribution_T& iWTPContinuousDistribution, + const ValueOfTimeContinuousDistribution_T& iValueOfTimeContinuousDistribution) : _key (iKey), _arrivalPattern (iArrivalPattern), _posProbabilityMass (iPOSProbMass), _channelProbabilityMass (iChannelProbMass), _tripTypeProbabilityMass (iTripTypeProbMass), _stayDurationProbabilityMass (iStayDurationProbMass), _frequentFlyerProbabilityMass (iFrequentFlyerProbMass), - _preferredDepartureTimeCumulativeDistribution (iPreferredDepartureTimeCumulativeDistribution), - _wtpCumulativeDistribution (iWTPCumulativeDistribution), - _valueOfTimeCumulativeDistribution (iValueOfTimeCumulativeDistribution) { + _preferredDepartureTimeCumulativeDistribution (iPreferredDepartureTimeContinuousDistribution), + _wtpCumulativeDistribution (iWTPContinuousDistribution), + _valueOfTimeCumulativeDistribution (iValueOfTimeContinuousDistribution) { } - + // ///////////////////////////////////////////////////// - DemandCharacteristics::DemandCharacteristics () - : _key (DemandStreamKey_T ("", "", DEFAULT_DATE, "")) { - } - - // ///////////////////////////////////////////////////// DemandCharacteristics::~DemandCharacteristics () { } // ///////////////////////////////////////////////////// - DemandCharacteristics:: - DemandCharacteristics (const DemandCharacteristics& iDemandCharacteristics) - : _key (iDemandCharacteristics._key), - _arrivalPattern (iDemandCharacteristics._arrivalPattern), - _posProbabilityMass (iDemandCharacteristics._posProbabilityMass), - _channelProbabilityMass (iDemandCharacteristics._channelProbabilityMass), - _tripTypeProbabilityMass (iDemandCharacteristics._tripTypeProbabilityMass), - _stayDurationProbabilityMass (iDemandCharacteristics._stayDurationProbabilityMass), - _frequentFlyerProbabilityMass (iDemandCharacteristics._frequentFlyerProbabilityMass), - _preferredDepartureTimeCumulativeDistribution (iDemandCharacteristics._preferredDepartureTimeCumulativeDistribution), - _wtpCumulativeDistribution (iDemandCharacteristics._wtpCumulativeDistribution), - _valueOfTimeCumulativeDistribution (iDemandCharacteristics._valueOfTimeCumulativeDistribution) { - } - - // ///////////////////////////////////////////////////// const AirportCode_T& DemandCharacteristics::getOrigin() const { return _key.getOrigin(); } @@ -96,19 +76,19 @@ oStr << "Arrival pattern (days from departure, proportion): "; oStr << _arrivalPattern.displayCumulativeDistribution() << std::endl; oStr << "POS probability mass (POS, propotion): "; - oStr << _posProbabilityMass.displayProbabilityMassFunction() + oStr << _posProbabilityMass.displayProbabilityMass() << std::endl; oStr << "Channel probability mass (channel, propotion): "; - oStr << _channelProbabilityMass.displayProbabilityMassFunction() + oStr << _channelProbabilityMass.displayProbabilityMass() << std::endl; oStr << "Trip type probability mass (trip type, propotion): "; - oStr << _tripTypeProbabilityMass.displayProbabilityMassFunction() + oStr << _tripTypeProbabilityMass.displayProbabilityMass() << std::endl; oStr << "Stay duration probability mass (number of days, propotion): "; - oStr << _stayDurationProbabilityMass.displayProbabilityMassFunction() + oStr << _stayDurationProbabilityMass.displayProbabilityMass() << std::endl; oStr << "Frequent flyer probability mass (frequent flyer, propotion): "; - oStr << _frequentFlyerProbabilityMass.displayProbabilityMassFunction() + oStr << _frequentFlyerProbabilityMass.displayProbabilityMass() << std::endl; oStr << "Preferred departure time cumulative distribution (time, proportion: "; oStr << _preferredDepartureTimeCumulativeDistribution.displayCumulativeDistribution() << std::endl; Modified: trunk/stdair/stdair/basic/DemandCharacteristics.hpp =================================================================== --- trunk/stdair/stdair/basic/DemandCharacteristics.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/basic/DemandCharacteristics.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -90,28 +90,25 @@ // ////////// Constructors and destructors ///////// /** Default constructor. */ DemandCharacteristics (const DemandStreamKey_T&, - const ContinuousFloatDuration_T&, - const POSProbabilityMass_T&, - const ChannelProbabilityMass_T&, - const TripTypeProbabilityMass_T&, - const StayDurationProbabilityMass_T&, - const FrequentFlyerProbabilityMass_T&, - const PreferredDepartureTimeCumulativeDistribution_T&, - const WTPCumulativeDistribution_T&, - const ValueOfTimeCumulativeDistribution_T&); + const ArrivalPatternCumulativeDistribution_T&, + const POSProbabilityMassFunction_T&, + const ChannelProbabilityMassFunction_T&, + const TripTypeProbabilityMassFunction_T&, + const StayDurationProbabilityMassFunction_T&, + const FrequentFlyerProbabilityMassFunction_T&, + const PreferredDepartureTimeContinuousDistribution_T&, + const WTPContinuousDistribution_T&, + const ValueOfTimeContinuousDistribution_T&); + /** Destructor */ + virtual ~DemandCharacteristics (); + + private: /** Default constructor. */ - // TODO: That copy constructor should be private DemandCharacteristics (); - /** Copy constructor. */ - // TODO: That copy constructor should be private DemandCharacteristics (const DemandCharacteristics&); - /** Destructor */ - virtual ~DemandCharacteristics (); - - private: // //////////////////// Attributes ///////////////////// /** DemandStream Key */ Added: trunk/stdair/stdair/basic/DictionaryManager.cpp =================================================================== --- trunk/stdair/stdair/basic/DictionaryManager.cpp (rev 0) +++ trunk/stdair/stdair/basic/DictionaryManager.cpp 2010-03-10 16:30:22 UTC (rev 159) @@ -0,0 +1,21 @@ +// ////////////////////////////////////////////////////////////////////// +// Import section +// ////////////////////////////////////////////////////////////////////// +// STDAIR +#include <stdair/basic/DictionaryManager.hpp> + +namespace stdair { + // //////////////////////////////////////////////////////////////////// + const Probability_T DictionaryManager::keyToValue(const DictionaryKey_T iKey) { + return static_cast<Probability_T>(iKey) / 200; + } + + // //////////////////////////////////////////////////////////////////// + const DictionaryKey_T DictionaryManager:: + valueToKey (const Probability_T iValue) { + return iValue * 200; + } + + // DEBUG + unsigned int COUNT = 0; +} Added: trunk/stdair/stdair/basic/DictionaryManager.hpp =================================================================== --- trunk/stdair/stdair/basic/DictionaryManager.hpp (rev 0) +++ trunk/stdair/stdair/basic/DictionaryManager.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -0,0 +1,25 @@ +// ////////////////////////////////////////////////////////////////////// +#ifndef __STDAIR_BOM_DICTIONARYMANAGER_HPP +#define __STDAIR_BOM_DICTIONARYMANAGER_HPP + +// ////////////////////////////////////////////////////////////////////// +// Import section +// ////////////////////////////////////////////////////////////////////// +// STDAIR +#include <stdair/STDAIR_Types.hpp> + +namespace stdair { + + /** Class wrapper of dictionary business methods. */ + class DictionaryManager { + public: + // //////////// Business methods ///////////////// + /** Convert from key to value. */ + static const Probability_T keyToValue (const DictionaryKey_T); + + /** Convert from value to key. */ + static const DictionaryKey_T valueToKey (const Probability_T); + + }; +} +#endif // __STDAIR_BOM_DICTIONARYMANAGER_HPP Modified: trunk/stdair/stdair/basic/sources.mk =================================================================== --- trunk/stdair/stdair/basic/sources.mk 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/basic/sources.mk 2010-03-10 16:30:22 UTC (rev 159) @@ -16,11 +16,14 @@ $(top_srcdir)/stdair/basic/PassengerType.hpp \ $(top_srcdir)/stdair/basic/ContinuousAttribute.hpp \ $(top_srcdir)/stdair/basic/CategoricalAttribute.hpp \ + $(top_srcdir)/stdair/basic/ContinuousAttributeLite.hpp \ + $(top_srcdir)/stdair/basic/CategoricalAttributeLite.hpp \ $(top_srcdir)/stdair/basic/DemandCharacteristicTypes.hpp \ $(top_srcdir)/stdair/basic/DemandCharacteristics.hpp \ $(top_srcdir)/stdair/basic/DemandDistribution.hpp \ $(top_srcdir)/stdair/basic/RandomGeneration.hpp \ - $(top_srcdir)/stdair/basic/RandomGenerationContext.hpp + $(top_srcdir)/stdair/basic/RandomGenerationContext.hpp \ + $(top_srcdir)/stdair/basic/DictionaryManager.hpp bas_cc_sources = \ $(top_srcdir)/stdair/basic/BasConst.cpp \ $(top_srcdir)/stdair/basic/BasChronometer.cpp \ @@ -31,4 +34,5 @@ $(top_srcdir)/stdair/basic/DemandCharacteristics.cpp \ $(top_srcdir)/stdair/basic/DemandDistribution.cpp \ $(top_srcdir)/stdair/basic/RandomGeneration.cpp \ - $(top_srcdir)/stdair/basic/RandomGenerationContext.cpp + $(top_srcdir)/stdair/basic/RandomGenerationContext.cpp \ + $(top_srcdir)/stdair/basic/DictionaryManager.cpp Modified: trunk/stdair/stdair/bom/BomChildrenHolderImp.hpp =================================================================== --- trunk/stdair/stdair/bom/BomChildrenHolderImp.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/bom/BomChildrenHolderImp.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -114,7 +114,7 @@ // /////////// Other operators ///////////// /** Get the size of the list. */ const unsigned int size () const { - return _bomChildrenList.size(); + return _bomChildrenMap.size(); } /** Retrieve, if existing, the bom corresponding to the given key. */ Modified: trunk/stdair/stdair/bom/DemandStream.cpp =================================================================== --- trunk/stdair/stdair/bom/DemandStream.cpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/bom/DemandStream.cpp 2010-03-10 16:30:22 UTC (rev 159) @@ -24,13 +24,26 @@ // ////////////////////////////////////////////////////////////////////// DemandStream:: DemandStream (const DemandStreamKey_T& iKey, - const DemandCharacteristics& iDemandCharacteristics, + const ArrivalPatternCumulativeDistribution_T& iArrivalPattern, + const POSProbabilityMassFunction_T& iPOSProbMass, + const ChannelProbabilityMassFunction_T& iChannelProbMass, + const TripTypeProbabilityMassFunction_T& iTripTypeProbMass, + const StayDurationProbabilityMassFunction_T& iStayDurationProbMass, + const FrequentFlyerProbabilityMassFunction_T& iFrequentFlyerProbMass, + const PreferredDepartureTimeContinuousDistribution_T& iPreferredDepartureTimeContinuousDistribution, + const WTPContinuousDistribution_T& iWTPContinuousDistribution, + const ValueOfTimeContinuousDistribution_T& iValueOfTimeContinuousDistribution, const DemandDistribution& iDemandDistribution, const RandomSeed_T& iNumberOfRequestsSeed, const RandomSeed_T& iRequestDateTimeSeed, const RandomSeed_T& iDemandCharacteristicsSeed, BomStructure_T& ioDemandStreamStructure) - : DemandStreamContent (iKey, iDemandCharacteristics, + : DemandStreamContent (iKey, iArrivalPattern, iPOSProbMass, + iChannelProbMass, iTripTypeProbMass, + iStayDurationProbMass, iFrequentFlyerProbMass, + iPreferredDepartureTimeContinuousDistribution, + iWTPContinuousDistribution, + iValueOfTimeContinuousDistribution, iDemandDistribution, iNumberOfRequestsSeed, iRequestDateTimeSeed, iDemandCharacteristicsSeed), _demandStreamStructure (ioDemandStreamStructure) { Modified: trunk/stdair/stdair/bom/DemandStream.hpp =================================================================== --- trunk/stdair/stdair/bom/DemandStream.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/bom/DemandStream.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -72,7 +72,16 @@ protected: // ////////// Constructors and destructors ///////// /** Constructor by default */ - DemandStream (const BomKey_T&, const DemandCharacteristics&, + DemandStream (const BomKey_T&, + const ArrivalPatternCumulativeDistribution_T&, + const POSProbabilityMassFunction_T&, + const ChannelProbabilityMassFunction_T&, + const TripTypeProbabilityMassFunction_T&, + const StayDurationProbabilityMassFunction_T&, + const FrequentFlyerProbabilityMassFunction_T&, + const PreferredDepartureTimeContinuousDistribution_T&, + const WTPContinuousDistribution_T&, + const ValueOfTimeContinuousDistribution_T&, const DemandDistribution&, const RandomSeed_T& iNumberOfRequestsSeed, const RandomSeed_T& iRequestDateTimeSeed, Modified: trunk/stdair/stdair/bom/DemandStreamContent.cpp =================================================================== --- trunk/stdair/stdair/bom/DemandStreamContent.cpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/bom/DemandStreamContent.cpp 2010-03-10 16:30:22 UTC (rev 159) @@ -21,13 +21,26 @@ // ////////////////////////////////////////////////////////////////////// DemandStreamContent:: DemandStreamContent (const BomKey_T& iKey, - const DemandCharacteristics& iDemandCharacteristics, + const ArrivalPatternCumulativeDistribution_T& iArrivalPattern, + const POSProbabilityMassFunction_T& iPOSProbMass, + const ChannelProbabilityMassFunction_T& iChannelProbMass, + const TripTypeProbabilityMassFunction_T& iTripTypeProbMass, + const StayDurationProbabilityMassFunction_T& iStayDurationProbMass, + const FrequentFlyerProbabilityMassFunction_T& iFrequentFlyerProbMass, + const PreferredDepartureTimeContinuousDistribution_T& iPreferredDepartureTimeContinuousDistribution, + const WTPContinuousDistribution_T& iWTPContinuousDistribution, + const ValueOfTimeContinuousDistribution_T& iValueOfTimeContinuousDistribution, const DemandDistribution& iDemandDistribution, const RandomSeed_T& iNumberOfRequestsSeed, const RandomSeed_T& iRequestDateTimeSeed, const RandomSeed_T& iDemandCharacteristicsSeed) : _key (iKey), - _demandCharacteristics (iDemandCharacteristics), + _demandCharacteristics (iKey, iArrivalPattern, iPOSProbMass, + iChannelProbMass, iTripTypeProbMass, + iStayDurationProbMass, iFrequentFlyerProbMass, + iPreferredDepartureTimeContinuousDistribution, + iWTPContinuousDistribution, + iValueOfTimeContinuousDistribution), _demandDistribution (iDemandDistribution), _totalNumberOfRequestsToBeGenerated (0), _numberOfRequestsRandomGenerator (iNumberOfRequestsSeed), Modified: trunk/stdair/stdair/bom/DemandStreamContent.hpp =================================================================== --- trunk/stdair/stdair/bom/DemandStreamContent.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/bom/DemandStreamContent.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -237,11 +237,20 @@ protected: // ////////// Constructors and destructors ///////// /** Constructor by default */ - DemandStreamContent (const BomKey_T&, const DemandCharacteristics&, - const DemandDistribution&, - const RandomSeed_T& iNumberOfRequestsSeed, - const RandomSeed_T& iRequestDateTimeSeed, - const RandomSeed_T& iDemandCharacteristicsSeed); + DemandStreamContent (const BomKey_T&, + const ArrivalPatternCumulativeDistribution_T&, + const POSProbabilityMassFunction_T&, + const ChannelProbabilityMassFunction_T&, + const TripTypeProbabilityMassFunction_T&, + const StayDurationProbabilityMassFunction_T&, + const FrequentFlyerProbabilityMassFunction_T&, + const PreferredDepartureTimeContinuousDistribution_T&, + const WTPContinuousDistribution_T&, + const ValueOfTimeContinuousDistribution_T&, + const DemandDistribution&, + const RandomSeed_T& iNumberOfRequestsSeed, + const RandomSeed_T& iRequestDateTimeSeed, + const RandomSeed_T& iDemandCharacteristicsSeed); /** Default constructors. */ DemandStreamContent (); DemandStreamContent (const DemandStreamContent&); Modified: trunk/stdair/stdair/factory/FacBomContent.hpp =================================================================== --- trunk/stdair/stdair/factory/FacBomContent.hpp 2010-02-18 19:57:17 UTC (rev 158) +++ trunk/stdair/stdair/factory/FacBomContent.hpp 2010-03-10 16:30:22 UTC (rev 159) @@ -11,6 +11,7 @@ // STDAIR #include <stdair/STDAIR_Types.hpp> #include <stdair/basic/BasConst_Inventory.hpp> +#include <stdair/basic/DemandCharacteristicTypes.hpp> #include <stdair/bom/BomStructure.hpp> #include <stdair/factory/FacBomStructure.hpp> @@ -202,7 +203,15 @@ // ////////////////////////////////////////////////////////////////// template <typename DEMAND_STREAM> DEMAND_STREAM& create (const DemandStreamKey_T& iKey, - const DemandCharacteristics& iDemandCharacteristics, + const ArrivalPatternCumulativeDistribution_T& iArrivalPattern, + const POSProbabilityMassFunction_T& iPOSProbMass, + const ChannelProbabilityMassFunction_T& iChannelProbMass, + const TripTypeProbabilityMassFunction_T& iTripTypeProbMass, + const StayDurationProbabilityMassFunction_T& iStayDurationProbMass, + const FrequentFlyerProbabilityMassFunction_T& iFrequentFlyerProbMass, + const PreferredDepartureTimeContinuousDistribution_T& iPreferredDepartureTimeContinuousDistribution, + const WTPContinuousDistribution_T& iWTPContinuousDistribution, + const ValueOfTimeContinuousDistribution_T& iValueOfTimeContinuousDistribution, const DemandDistribution& iDemandDistribution, const RandomSeed_T& iNumberOfRequestsSeed, const RandomSeed_T& iRequestDateTimeSeed, @@ -213,7 +222,13 @@ FacBomStructure::instance().create<DEMAND_STREAM_STRUCTURE_T> (); DEMAND_STREAM* aDemandStream_ptr = - new DEMAND_STREAM (iKey, iDemandCharacteristics, iDemandDistribution, + new DEMAND_STREAM (iKey, iArrivalPattern, iPOSProbMass, + iChannelProbMass, iTripTypeProbMass, + iStayDurationProbMass, iFrequentFlyerProbMass, + iPreferredDepartureTimeContinuousDistribution, + iWTPContinuousDistribution, + iValueOfTimeContinuousDistribution, + iDemandDistribution, iNumberOfRequestsSeed, iRequestDateTimeSeed, iDemandCharacteristicsSeed, lBomStructure); assert (aDemandStream_ptr != NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |