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 // C
00005 #include <assert.h>
00006 // STL
00007 #include <iostream>
00008 #include <cmath>
00009 #include <iomanip>
00010 // RMOL
00011 #include <rmol/bom/BucketHolder.hpp>
00012 //#include <rmol/bom/Resource.hpp>
00013 #include <rmol/bom/MCOptimiser.hpp>
00014 #include <rmol/bom/Emsr.hpp>
00015 #include <rmol/bom/DPOptimiser.hpp>
00016 #include <rmol/field/FldYieldRange.hpp>
00017 #include <rmol/field/FldDistributionParameters.hpp>
00018 #include <rmol/factory/FacPartialSumHolder.hpp>
00019 #include <rmol/factory/FacPartialSumHolderHolder.hpp>
00020 #include <rmol/factory/FacDemand.hpp>
00021 #include <rmol/factory/FacBucket.hpp>
00022 #include <rmol/command/Optimiser.hpp>
00023 
00024 namespace RMOL {
00025 
00026   // //////////////////////////////////////////////////////////////////////
00027   void Optimiser::
00028   optimalOptimisationByMCIntegration (const int K, 
00029                                       const ResourceCapacity_T iCabinCapacity,
00030                                       BucketHolder& ioBucketHolder) {
00031     // Retrieve the BucketHolder
00032     // BucketHolder& ioBucketHolder = ioResource.getBucketHolder();
00033 
00034     // Number of classes/buckets: n
00035     const short nbOfClasses = ioBucketHolder.getSize();
00036 
00037     // Create a holder for the list of Partial Sum Lists
00038     PartialSumHolderHolder& aPartialSumHolderHolder =
00039       FacPartialSumHolderHolder::instance().create();
00040 
00047     for (short j=0 ; j <= nbOfClasses - 1; j++) {
00048       PartialSumHolder& aPartialSumList = 
00049         FacPartialSumHolder::instance().create ();
00050 
00051       FacPartialSumHolderHolder::instance().
00052         addPartialSumHolder (aPartialSumHolderHolder, aPartialSumList);
00053     }
00054 
00055     // Call the class performing the actual algorithm
00056     MCOptimiser::optimalOptimisationByMCIntegration (K, iCabinCapacity, 
00057                                                      ioBucketHolder,
00058                                                      aPartialSumHolderHolder);
00059   }
00060 
00061   // //////////////////////////////////////////////////////////////////////
00062   void Optimiser::
00063   optimalOptimisationByDP (const ResourceCapacity_T iCabinCapacity,
00064                            BucketHolder& ioBucketHolder) {
00065     BidPriceVector_T lBidPriceVector;
00066     DPOptimiser::optimalOptimisationByDP (iCabinCapacity,
00067                                           ioBucketHolder,
00068                                           lBidPriceVector);
00069     std::cout << "BVP: ";
00070     unsigned int size = lBidPriceVector.size();
00071 
00072     for (unsigned int i = 0; i < size; ++i) {
00073       const double bidPrice = lBidPriceVector.at(i);
00074       std::cout << std::fixed << std::setprecision (2) << bidPrice << " ";
00075     }
00076     std::cout << std::endl;
00077   }
00078 
00079   // //////////////////////////////////////////////////////////////////////
00080   void Optimiser::
00081   heuristicOptimisationByEmsr (const ResourceCapacity_T iCabinCapacity,
00082                                BucketHolder& ioBucketHolder,
00083                                BidPriceVector_T& ioBidPriceVector) {
00084     Emsr::heuristicOptimisationByEmsr (iCabinCapacity,
00085                                        ioBucketHolder,
00086                                        ioBidPriceVector);
00087   }
00088 
00089   // //////////////////////////////////////////////////////////////////////
00090   void Optimiser::
00091   heuristicOptimisationByEmsrA (const ResourceCapacity_T iCabinCapacity,
00092                                 BucketHolder& ioBucketHolder) {
00093     Emsr::heuristicOptimisationByEmsrA (iCabinCapacity, ioBucketHolder);
00094   }
00095   
00096   // //////////////////////////////////////////////////////////////////////
00097   void Optimiser::
00098   heuristicOptimisationByEmsrB (const ResourceCapacity_T iCabinCapacity,
00099                                 BucketHolder& ioBucketHolder) {
00100     
00101     // Create the aggregated class/bucket.
00102     FldYieldRange aYieldRange = FldYieldRange::FldYieldRange (0);
00103     FldDistributionParameters aDistribParams =
00104       FldDistributionParameters::FldDistributionParameters (0,0);
00105     Demand& aDemand =
00106       FacDemand::instance().create (aDistribParams, aYieldRange);
00107     Bucket& aBucket = FacBucket::instance().create (aYieldRange, aDemand);
00108     
00109     Emsr::heuristicOptimisationByEmsrB (iCabinCapacity,
00110                                         ioBucketHolder,
00111                                         aBucket);
00112   }
00113 }
SourceForge Logo

Generated on Fri Sep 11 06:31:59 2009 for RMOL by Doxygen 1.5.8