RMOL Logo Get Revenue Management Optimisation Library at SourceForge.net. Fast, secure and Free Open Source software downloads

Optimiser.cpp

Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // STL
00005 //#include <cmath>
00006 #include <cassert>
00007 #include <sstream>
00008 #include <iomanip>
00009 // RMOL
00010 #include <rmol/basic/BasChronometer.hpp>
00011 #include <rmol/field/FldYieldRange.hpp>
00012 #include <rmol/field/FldDistributionParameters.hpp>
00013 #include <rmol/bom/StudyStatManager.hpp>
00014 #include <rmol/bom/BucketHolder.hpp>
00015 //#include <rmol/bom/Resource.hpp>
00016 #include <rmol/bom/MCOptimiser.hpp>
00017 #include <rmol/bom/Emsr.hpp>
00018 #include <rmol/bom/DPOptimiser.hpp>
00019 #include <rmol/factory/FacPartialSumHolder.hpp>
00020 #include <rmol/factory/FacPartialSumHolderHolder.hpp>
00021 #include <rmol/factory/FacDemand.hpp>
00022 #include <rmol/factory/FacBucket.hpp>
00023 #include <rmol/command/Optimiser.hpp>
00024 #include <rmol/service/Logger.hpp>
00025 
00026 namespace RMOL {
00027 
00028   // //////////////////////////////////////////////////////////////////////
00029   void Optimiser::
00030   optimalOptimisationByMCIntegration (const int K, 
00031                                       const ResourceCapacity_T iCabinCapacity,
00032                                       BucketHolder& ioBucketHolder,
00033                                       BidPriceVector_T& ioBidPriceVector) {
00034     // Retrieve the BucketHolder
00035     // BucketHolder& ioBucketHolder = ioResource.getBucketHolder();
00036 
00037     // Number of classes/buckets: n
00038     const short nbOfClasses = ioBucketHolder.getSize();
00039 
00040     // Create a holder for the list of Partial Sum Lists
00041     PartialSumHolderHolder& aPartialSumHolderHolder =
00042       FacPartialSumHolderHolder::instance().create();
00043 
00050     for (short j = 0 ; j <= nbOfClasses; ++j) {
00051       PartialSumHolder& aPartialSumList = 
00052         FacPartialSumHolder::instance().create ();
00053 
00054       FacPartialSumHolderHolder::instance().
00055         addPartialSumHolder (aPartialSumHolderHolder, aPartialSumList);
00056     }
00057 
00058     // Call the class performing the actual algorithm
00059     MCOptimiser::optimalOptimisationByMCIntegration (K, iCabinCapacity, 
00060                                                      ioBucketHolder,
00061                                                      aPartialSumHolderHolder,
00062                                                      ioBidPriceVector);
00063   }
00064 
00065   // //////////////////////////////////////////////////////////////////////
00066   void Optimiser::
00067   optimalOptimisationByMCIntegration (const int K, 
00068                                       const ResourceCapacity_T iCabinCapacity,
00069                                       BucketHolder& ioBucketHolder,
00070                                       BidPriceVector_T& ioBidPriceVector,
00071                                       StudyStatManager& ioStudyStatManager) {
00072     BasChronometer lMCIntegrationBasChrono;
00073     lMCIntegrationBasChrono.start();
00074     // Retrieve the BucketHolder
00075     // BucketHolder& ioBucketHolder = ioResource.getBucketHolder();
00076 
00077     // Number of classes/buckets: n
00078     const short nbOfClasses = ioBucketHolder.getSize();
00079 
00080     // Create a holder for the list of Partial Sum Lists
00081     PartialSumHolderHolder& aPartialSumHolderHolder =
00082       FacPartialSumHolderHolder::instance().create();
00083 
00090     for (short j = 0 ; j <= nbOfClasses; ++j) {
00091       PartialSumHolder& aPartialSumList = 
00092         FacPartialSumHolder::instance().create ();
00093 
00094       FacPartialSumHolderHolder::instance().
00095         addPartialSumHolder (aPartialSumHolderHolder, aPartialSumList);
00096     }
00097 
00098     // Call the class performing the actual algorithm
00099     MCOptimiser::optimalOptimisationByMCIntegration (K, iCabinCapacity, 
00100                                                      ioBucketHolder,
00101                                                      aPartialSumHolderHolder,
00102                                                      ioBidPriceVector,
00103                                                      ioStudyStatManager);
00104     const double lMCIntegrationTime = lMCIntegrationBasChrono.elapsed();
00105     ioStudyStatManager.addMeasure ("MCIntegrationRunningTime",
00106                                    lMCIntegrationTime);
00107   }
00108 
00109   // //////////////////////////////////////////////////////////////////////
00110   void Optimiser::
00111   optimalOptimisationByDP (const ResourceCapacity_T iCabinCapacity,
00112                            BucketHolder& ioBucketHolder) {
00113     BidPriceVector_T lBidPriceVector;
00114     DPOptimiser::optimalOptimisationByDP (iCabinCapacity,
00115                                           ioBucketHolder,
00116                                           lBidPriceVector);
00117 
00118     // DEBUG
00119     std::ostringstream ostr;
00120     // Store current formatting flags of the stream
00121     std::ios::fmtflags oldFlags = ostr.flags();
00122 
00123     ostr << "BPV: " << std::fixed << std::setprecision (2);
00124     
00125     unsigned int i = 0;
00126 
00127     for (BidPriceVector_T::const_iterator itBP = lBidPriceVector.begin();
00128          itBP != lBidPriceVector.end(); ++itBP, ++i) {
00129       const double bidPrice = *itBP;
00130       ostr << "[" << i << "]: " << bidPrice << ", ";
00131     }
00132 
00133     // Reset formatting flags of stream
00134     ostr.flags (oldFlags);
00135 
00136     RMOL_LOG_DEBUG (ostr.str());
00137   }
00138 
00139   // //////////////////////////////////////////////////////////////////////
00140   void Optimiser::
00141   heuristicOptimisationByEmsr (const ResourceCapacity_T iCabinCapacity,
00142                                BucketHolder& ioBucketHolder,
00143                                BidPriceVector_T& ioBidPriceVector) {
00144     Emsr::heuristicOptimisationByEmsr (iCabinCapacity,
00145                                        ioBucketHolder,
00146                                        ioBidPriceVector);
00147   }
00148 
00149   // //////////////////////////////////////////////////////////////////////
00150   void Optimiser::
00151   heuristicOptimisationByEmsr (const ResourceCapacity_T iCabinCapacity,
00152                                BucketHolder& ioBucketHolder,
00153                                BidPriceVector_T& ioBidPriceVector,
00154                                StudyStatManager& ioStudyStatManager) {
00155     BasChronometer lEMRSBasChrono;
00156     lEMRSBasChrono.start();
00157     Emsr::heuristicOptimisationByEmsr (iCabinCapacity,
00158                                        ioBucketHolder,
00159                                        ioBidPriceVector);
00160     const double lEMRSTime = lEMRSBasChrono.elapsed();
00161     ioStudyStatManager.addMeasure ("EMSRRunningTime", lEMRSTime);
00162   }
00163 
00164   // //////////////////////////////////////////////////////////////////////
00165   void Optimiser::
00166   heuristicOptimisationByEmsrA (const ResourceCapacity_T iCabinCapacity,
00167                                 BucketHolder& ioBucketHolder) {
00168     Emsr::heuristicOptimisationByEmsrA (iCabinCapacity, ioBucketHolder);
00169   }
00170   
00171   // //////////////////////////////////////////////////////////////////////
00172   void Optimiser::heuristicOptimisationByEmsrAwithSellup 
00173   (const ResourceCapacity_T iCabinCapacity, 
00174    BucketHolder& ioBucketHolder,
00175    SellupProbabilityVector_T& iSellupProbabilityVector) {
00176     Emsr::heuristicOptimisationByEmsrAwithSellup (iCabinCapacity, 
00177                                                 ioBucketHolder, 
00178                                                 iSellupProbabilityVector);
00179   }
00180 
00181   // //////////////////////////////////////////////////////////////////////
00182   void Optimiser::
00183   heuristicOptimisationByEmsrB (const ResourceCapacity_T iCabinCapacity,
00184                                 BucketHolder& ioBucketHolder) {
00185     
00186     // Create the aggregated class/bucket.
00187     FldYieldRange aYieldRange = FldYieldRange (0);
00188     FldDistributionParameters aDistribParams = FldDistributionParameters (0,0);
00189     Demand& aDemand =
00190       FacDemand::instance().create (aDistribParams, aYieldRange);
00191     Bucket& aBucket = FacBucket::instance().create (aYieldRange, aDemand);
00192     
00193     Emsr::heuristicOptimisationByEmsrB (iCabinCapacity,
00194                                         ioBucketHolder,
00195                                         aBucket);
00196   }
00197 
00198   // //////////////////////////////////////////////////////////////////////
00199   void Optimiser::
00200   legOptimisationByMC (const ResourceCapacity_T iCabinCapacity,
00201                        BucketHolder& ioBucketHolder,
00202                        BidPriceVector_T& ioBidPriceVector) {
00203     MCOptimiser::legOptimisationByMC (iCabinCapacity, ioBucketHolder,
00204                                       ioBidPriceVector);
00205   }
00206   
00207 }
00208 
SourceForge Logo

Generated on Sat Aug 13 2011 11:59:19 for RMOL by Doxygen 1.7.1