Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cbc/src/CbcHeuristicDiveVectorLength.cpp

    r1902 r2093  
    8282    double bestScore = COIN_DBL_MAX;
    8383    bool allTriviallyRoundableSoFar = true;
     84    int bestPriority = COIN_INT_MAX;
    8485    for (int i = 0; i < numberIntegers; i++) {
    8586        int iColumn = integerVariable[i];
     
    9798                // the variable cannot be rounded
    9899                double obj = direction * objective[iColumn];
    99                 if (obj >= 0.0)
     100                if (obj > smallObjective_) {
    100101                    round = 1; // round up
    101                 else
     102                } else if (obj < -smallObjective_) {
    102103                    round = -1; // round down
     104                } else {
     105                  if (fraction<0.4)
     106                    round = -1;
     107                  else
     108                    round = 1;
     109                }
    103110                double objDelta;
    104111                if (round == 1)
    105                     objDelta = (1.0 - fraction) * obj;
     112                    objDelta = (1.0 - fraction) * CoinMax(obj,smallObjective_);
    106113                else
    107                     objDelta = - fraction * obj;
     114                    objDelta = - fraction * CoinMin(obj,-smallObjective_);
    108115
    109116                // we want the smaller score
     
    114121                    score *= 1000.0;
    115122
     123                // if priorities then use
     124                if (priority_) {
     125                  int thisRound=static_cast<int>(priority_[i].direction);
     126                  if ((thisRound&1)!=0)
     127                    round = ((thisRound&2)==0) ? -1 : +1;
     128                  if (priority_[i].priority>bestPriority) {
     129                    score=COIN_DBL_MAX;
     130                  } else if (priority_[i].priority<bestPriority) {
     131                    bestPriority=static_cast<int>(priority_[i].priority);
     132                    bestScore=COIN_DBL_MAX;
     133                  }
     134                }
    116135                if (score < bestScore) {
    117136                    bestColumn = iColumn;
Note: See TracChangeset for help on using the changeset viewer.