Ignore:
Timestamp:
Mar 15, 2011 12:58:21 PM (8 years ago)
Author:
forrest
Message:

add variations to heuristic and when to call tuning

File:
1 edited

Legend:

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

    r1573 r1613  
    2929    numberTries_ = 0;
    3030    stateOfFixing_ = 0;
     31    shallowDepth_ = 0;
    3132    lastNode_ = -999999;
    3233    howOften_ = 100;
     
    4647    numberTries_ = 0;
    4748    stateOfFixing_ = 0;
     49    shallowDepth_ = 0;
    4850    lastNode_ = -999999;
    4951    howOften_ = 100;
     
    205207
    206208        const double * currentSolution = solver->getColSolution();
     209        const int * used = model_->usedInSolution();
    207210        OsiSolverInterface * newSolver = cloneBut(3); // was model_->continuousSolver()->clone();
    208211        int numberColumns = newSolver->getNumCols();
     
    229232            if (fabs(currentSolution[iColumn] - valueInt) < 10.0*primalTolerance) {
    230233                double nearest = floor(valueInt + 0.5);
    231                 newSolver->setColLower(iColumn, nearest);
    232                 newSolver->setColUpper(iColumn, nearest);
    233                 nFix++;
     234                /*
     235                  shallowDepth_
     236                  0 - normal
     237                  1 - only fix if at lb
     238                  2 - only fix if not at lb
     239                  3 - only fix if at lb and !used
     240                */
     241                bool fix=false;
     242                switch (shallowDepth_) {
     243                case 0:
     244                  fix = true;
     245                  break;
     246                case 1:
     247                if (nearest==originalLower)
     248                  fix = true;
     249                  break;
     250                case 2:
     251                if (nearest!=originalLower)
     252                  fix = true;
     253                  break;
     254                case 3:
     255                if (nearest==originalLower && !used[iColumn])
     256                  fix = true;
     257                  break;
     258                }
     259                if (fix) {
     260                  newSolver->setColLower(iColumn, nearest);
     261                  newSolver->setColUpper(iColumn, nearest);
     262                  nFix++;
     263                }
    234264            }
    235265        }
Note: See TracChangeset for help on using the changeset viewer.