Changeset 1332 for branches/sandbox


Ignore:
Timestamp:
Dec 2, 2009 6:39:53 PM (10 years ago)
Author:
EdwinStraver
Message:

Further breakouts from branchAndBound()

Location:
branches/sandbox/Cbc/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/sandbox/Cbc/src/CbcModel.cpp

    r1330 r1332  
    11301130}
    11311131
     1132#ifdef COIN_HAS_CLP
     1133/*
     1134 Change pivot method of required. Called from BranchandBound()
     1135*/
     1136void CbcModel::possiblePivotMethodChange( ClpDualRowPivot ** savePivotMethod, int lower, int upper)
     1137{
     1138        OsiClpSolverInterface * clpSolver
     1139        = dynamic_cast<OsiClpSolverInterface *> (solver_);
     1140    if (clpSolver && numberNodes_ >= lower && numberNodes_ < upper) {
     1141        if (numberIterations_ < (numberSolves_ + numberNodes_)*10) {
     1142            //if (numberIterations_<numberNodes_*20) {
     1143            ClpSimplex * simplex = clpSolver->getModelPtr();
     1144            ClpDualRowPivot * pivotMethod = simplex->dualRowPivot();
     1145            ClpDualRowDantzig * pivot =
     1146                dynamic_cast< ClpDualRowDantzig*>(pivotMethod);
     1147            if (!pivot) {
     1148                *savePivotMethod = pivotMethod->clone(true);
     1149                ClpDualRowDantzig dantzig;
     1150                simplex->setDualRowPivotAlgorithm(dantzig);
     1151#ifdef COIN_DEVELOP
     1152                printf("%d node, %d iterations ->Dantzig\n", numberNodes_,
     1153                       numberIterations_);
     1154#endif
     1155#ifdef CBC_THREAD
     1156                for (int i = 0; i < numberThreads_; i++) {
     1157                    threadInfo[i].dantzigState = -1;
     1158                }
     1159#endif
     1160            }
     1161        }
     1162    }
     1163}
     1164#endif // COIN_HAS_CLP
     1165
     1166/*
     1167saveModel called (carved out of) BranchandBound
     1168*/
    11321169void CbcModel::saveModel(OsiSolverInterface * saveSolver, double * checkCutoffForRestart, bool * feasible)
    11331170{
     
    33723409        // Possible change of pivot method
    33733410        if (!savePivotMethod && !parentModel_) {
    3374             OsiClpSolverInterface * clpSolver
    3375             = dynamic_cast<OsiClpSolverInterface *> (solver_);
    3376             if (clpSolver && numberNodes_ >= 100 && numberNodes_ < 200) {
    3377                 if (numberIterations_ < (numberSolves_ + numberNodes_)*10) {
    3378                     //if (numberIterations_<numberNodes_*20) {
    3379                     ClpSimplex * simplex = clpSolver->getModelPtr();
    3380                     ClpDualRowPivot * pivotMethod = simplex->dualRowPivot();
    3381                     ClpDualRowDantzig * pivot =
    3382                         dynamic_cast< ClpDualRowDantzig*>(pivotMethod);
    3383                     if (!pivot) {
    3384                         savePivotMethod = pivotMethod->clone(true);
    3385                         ClpDualRowDantzig dantzig;
    3386                         simplex->setDualRowPivotAlgorithm(dantzig);
    3387 #ifdef COIN_DEVELOP
    3388                         printf("%d node, %d iterations ->Dantzig\n", numberNodes_,
    3389                                numberIterations_);
    3390 #endif
    3391 #ifdef CBC_THREAD
    3392                         for (int i = 0; i < numberThreads_; i++) {
    3393                             threadInfo[i].dantzigState = -1;
    3394                         }
    3395 #endif
    3396                     }
    3397                 }
    3398             }
     3411                        possiblePivotMethodChange( &savePivotMethod, 100, 200);       
    33993412        }
    34003413#endif
     
    37783791            // Possible change of pivot method
    37793792            if (!savePivotMethod && !parentModel_) {
    3780                 OsiClpSolverInterface * clpSolver
    3781                 = dynamic_cast<OsiClpSolverInterface *> (solver_);
    3782                 if (clpSolver && numberNodes_ >= 1000 && numberNodes_ < 2000) {
    3783                     if (numberIterations_ < (numberSolves_ + numberNodes_)*10) {
    3784                         ClpSimplex * simplex = clpSolver->getModelPtr();
    3785                         ClpDualRowPivot * pivotMethod = simplex->dualRowPivot();
    3786                         ClpDualRowDantzig * pivot =
    3787                             dynamic_cast< ClpDualRowDantzig*>(pivotMethod);
    3788                         if (!pivot) {
    3789                             savePivotMethod = pivotMethod->clone(true);
    3790                             ClpDualRowDantzig dantzig;
    3791                             simplex->setDualRowPivotAlgorithm(dantzig);
    3792 #ifdef COIN_DEVELOP
    3793                             printf("%d node, %d iterations ->Dantzig\n", numberNodes_,
    3794                                    numberIterations_);
    3795 #endif
    3796 #ifdef CBC_THREAD
    3797                             for (int i = 0; i < numberThreads_; i++) {
    3798                                 threadInfo[i].dantzigState = -1;
    3799                             }
    3800 #endif
    3801                         }
    3802                     }
    3803                 }
     3793                possiblePivotMethodChange( &savePivotMethod, 1000, 2000);
    38043794            }
    38053795#endif
  • branches/sandbox/Cbc/src/CbcModel.hpp

    r1330 r1332  
    1515#include "CbcMessage.hpp"
    1616#include "CbcEventHandler.hpp"
     17#include "ClpDualRowPivot.hpp"
    1718
    1819//class OsiSolverInterface;
     
    442443      Save copy of the model.
    443444    */
    444      
    445445    void saveModel(OsiSolverInterface * saveSolver, double * checkCutoffForRestart, bool * feasible);
     446
     447#ifdef COIN_HAS_CLP
     448        void possiblePivotMethodChange( ClpDualRowPivot ** savePivotMethod, int lower, int upper);
     449#endif
    446450    //@}
    447451
Note: See TracChangeset for help on using the changeset viewer.