Changeset 2352


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

fix for infeasible at root

File:
1 edited

Legend:

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

    r2349 r2352  
    1454614546#endif
    1454714547                if (!clpSolver->isProvenOptimal()) {
    14548                     clpSolver->setSpecialOptions(save2 | 2048);
    14549                     clpSimplex->allSlackBasis(true);
    14550                     clpSolver->resolve();
    14551                     if (!clpSolver->isProvenOptimal()) {
    14552                          bool takeHint;
    14553                          OsiHintStrength strength;
    14554                          clpSolver->getHintParam(OsiDoDualInResolve, takeHint, strength);
    14555                          clpSolver->setHintParam(OsiDoDualInResolve, false, OsiHintDo);
    14556                          clpSolver->resolve();
    14557                          clpSolver->setHintParam(OsiDoDualInResolve, takeHint, strength);
     14548                    // check if proven infeasible i.e. bad bounds
     14549                    int numberColumns = clpSolver->getNumCols();
     14550                    const double * columnLower = clpSolver->getColLower();
     14551                    const double * columnUpper = clpSolver->getColUpper();
     14552                    bool provenInfeasible = false;
     14553                    for (int i=0;i<numberColumns;i++) {
     14554                      if (columnLower[i]>columnUpper[i]) {
     14555                        provenInfeasible=true;
     14556                      }
     14557                    }
     14558                    if (!provenInfeasible) {
     14559                      clpSolver->setSpecialOptions(save2 | 2048);
     14560                      clpSimplex->allSlackBasis(true);
     14561                      clpSolver->resolve();
     14562                      if (!clpSolver->isProvenOptimal()) {
     14563                        bool takeHint;
     14564                        OsiHintStrength strength;
     14565                        clpSolver->getHintParam(OsiDoDualInResolve, takeHint, strength);
     14566                        clpSolver->setHintParam(OsiDoDualInResolve, false, OsiHintDo);
     14567                        clpSolver->resolve();
     14568                        clpSolver->setHintParam(OsiDoDualInResolve, takeHint, strength);
     14569                      }
    1455814570                    }
    1455914571                }
Note: See TracChangeset for help on using the changeset viewer.