Changeset 2309


Ignore:
Timestamp:
Oct 31, 2016 12:54:20 PM (2 years ago)
Author:
forrest
Message:

fix for SOS

File:
1 edited

Legend:

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

    r2286 r2309  
    1234312343        for (i = 0; i < numberObjects_; i++)
    1234412344            object_[i]->feasibleRegion(solver_, &usefulInfo);
     12345        // If SOS then might have been declared infeasible (bad heuristic)
     12346        {
     12347          int numberColumns = solver_->getNumCols();
     12348          const double * columnLower = solver_->getColLower();
     12349          const double * columnUpper = solver_->getColUpper();
     12350          bool looksGood=true;
     12351          for (int i = 0; i < numberColumns; i++) {
     12352            if (columnUpper[i]<columnLower[i])
     12353            looksGood=false;
     12354          }
     12355          if (!looksGood) {
     12356            // not good
     12357            messageHandler()->message(CBC_FPUMP2, messages())
     12358              << "On closer inspection - solution discarded"
     12359              << CoinMessageEol ;
     12360            objectiveValue = 1.0e50 ;
     12361            for (int iColumn = 0 ; iColumn < numberColumns ; iColumn++) {
     12362                solver_->setColLower(iColumn, saveLower[iColumn]) ;
     12363                solver_->setColUpper(iColumn, saveUpper[iColumn]) ;
     12364            }
     12365            delete [] saveLower;
     12366            delete [] saveUpper;
     12367           
     12368            solver_->setColSolution(saveSolution);
     12369            delete [] saveSolution;
     12370            solver_->setWarmStart(basis);
     12371            delete basis ;
     12372            /*
     12373              Restore the usual solver.
     12374            */
     12375            solver_ = saveSolver;
     12376            testSolution_ = save;
     12377#ifdef COIN_HAS_CLP
     12378            if (modifiedTolerances) {
     12379              // Restore
     12380              ClpSimplex * clp = clpContinuousSolver->getModelPtr();
     12381#ifndef CBC_LEAVE_TOLERANCE_ON_CHECK_SOLUTION
     12382              clp->setPrimalTolerance(savePrimalTolerance);
     12383#endif
     12384#ifndef CBC_LEAVE_PERTURBATION_ON_CHECK_SOLUTION
     12385              clp->setPerturbation(savePerturbation);
     12386#endif
     12387#ifndef CBC_LEAVE_SCALING_ON_CHECK_SOLUTION
     12388              clp->scaling(saveScaling);
     12389#endif
     12390            }
     12391#endif
     12392            return objectiveValue;
     12393          }
     12394        }
    1234512395#if CBC_USEFUL_PRINTING>14
    1234612396        {
Note: See TracChangeset for help on using the changeset viewer.