00001
00002
00003
00004
00005
00006 #include <cassert>
00007 #include <sstream>
00008 #include <iomanip>
00009
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
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
00035
00036
00037
00038 const short nbOfClasses = ioBucketHolder.getSize();
00039
00040
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
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
00075
00076
00077
00078 const short nbOfClasses = ioBucketHolder.getSize();
00079
00080
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
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
00119 std::ostringstream ostr;
00120
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
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
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