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
Generated on Tue Sep 7 2010 18:38:31 for RMOL by Doxygen 1.7.1