Changeset 2351


Ignore:
Timestamp:
Dec 19, 2017 5:08:16 AM (10 months ago)
Author:
forrest
Message:

fix when obviously infeasible at root node

File:
1 edited

Legend:

Unmodified
Added
Removed
  • stable/2.9/Cbc/src/CbcModel.cpp

    r2348 r2351  
    1444414444#endif
    1444514445                if (!clpSolver->isProvenOptimal()) {
    14446                     clpSolver->setSpecialOptions(save2 | 2048);
    14447                     clpSimplex->allSlackBasis(true);
    14448                     clpSolver->resolve();
    14449                     if (!clpSolver->isProvenOptimal()) {
    14450                          bool takeHint;
    14451                          OsiHintStrength strength;
    14452                          clpSolver->getHintParam(OsiDoDualInResolve, takeHint, strength);
    14453                          clpSolver->setHintParam(OsiDoDualInResolve, false, OsiHintDo);
    14454                          clpSolver->resolve();
    14455                          clpSolver->setHintParam(OsiDoDualInResolve, takeHint, strength);
     14446                    // check if proven infeasible i.e. bad bounds
     14447                    int numberColumns = clpSolver->getNumCols();
     14448                    const double * columnLower = clpSolver->getColLower();
     14449                    const double * columnUpper = clpSolver->getColUpper();
     14450                    bool provenInfeasible = false;
     14451                    for (int i=0;i<numberColumns;i++) {
     14452                      if (columnLower[i]>columnUpper[i]) {
     14453                        provenInfeasible=true;
     14454                      }
     14455                    }
     14456                    if (!provenInfeasible) {
     14457                      clpSolver->setSpecialOptions(save2 | 2048);
     14458                      clpSimplex->allSlackBasis(true);
     14459                      clpSolver->resolve();
     14460                      if (!clpSolver->isProvenOptimal()) {
     14461                        bool takeHint;
     14462                        OsiHintStrength strength;
     14463                        clpSolver->getHintParam(OsiDoDualInResolve, takeHint, strength);
     14464                        clpSolver->setHintParam(OsiDoDualInResolve, false, OsiHintDo);
     14465                        clpSolver->resolve();
     14466                        clpSolver->setHintParam(OsiDoDualInResolve, takeHint, strength);
     14467                      }
    1445614468                    }
    1445714469                }
Note: See TracChangeset for help on using the changeset viewer.