9 #include "CoinHelperFunctions.hpp"
10 #include "CbcModel.hpp"
30 (*model_->messageHandler()) <<
"Can't get pseudo costs!!!\n";
31 solutionValue = model_->getCurrentMinimizationObjValue();
34 const OsiPseudoCosts& pseudoCosts = chooseMethod->
pseudoCosts();
35 int numberObjects = pseudoCosts.numberObjects();
36 assert(numberObjects == model_->numberObjects());
37 const double* upTotalChange = pseudoCosts.upTotalChange();
38 const double* downTotalChange = pseudoCosts.downTotalChange();
39 const int* upNumber = pseudoCosts.upNumber();
40 const int* downNumber = pseudoCosts.downNumber();
44 double sumDownTot = 0.;
45 int numberDownTot = 0;
46 for (
int i=0;i<numberObjects;i++) {
47 sumUpTot += upTotalChange[i];
48 numberUpTot += upNumber[i];
49 sumDownTot += downTotalChange[i];
50 numberDownTot += downNumber[i];
52 if (!numberUpTot || !numberDownTot) {
54 solutionValue = COIN_DBL_MAX;
57 double upAvrg=sumUpTot/numberUpTot;
58 double downAvrg=sumDownTot/numberDownTot;
60 OsiObject**
object = model_->objects();
62 solutionValue = model_->getCurrentMinimizationObjValue();
63 for (
int iObj = 0; iObj < numberObjects; iObj++) {
66 double upEstimate = upNumber[iObj] ?
object[iObj]->upEstimate()*upTotalChange[iObj]/upNumber[iObj] :
object[iObj]->upEstimate()*upAvrg;
67 double downEstimate = downNumber[iObj] ?
object[iObj]->downEstimate()*downTotalChange[iObj]/downNumber[iObj] :
object[iObj]->downEstimate()*downAvrg;
69 solutionValue += CoinMin(upEstimate,downEstimate);
virtual int solution(double &solutionValue, double *betterSolution)
heuristic method providing guess, based on pseudo costs
This class chooses a variable to branch on.
GuessHeuristic()
Default constructor.
const OsiPseudoCosts & pseudoCosts() const
Access to pseudo costs storage.