Ignore:
File:
1 edited

Legend:

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

    r2056 r2088  
    16351635    dblParam_[CbcLargestChange] = 0.0;
    16361636    intParam_[CbcNumberBranches] = 0;
     1637    // when to check for restart
     1638    int nextCheckRestart=50;
    16371639    // Force minimization !!!!
    16381640    bool flipObjective = (solver_->getObjSense()<0.0);
     
    27612763    */
    27622764    int iObject ;
    2763     int preferredWay ;
    27642765    int numberUnsatisfied = 0 ;
    27652766    delete [] currentSolution_;
     
    27732774    for (iObject = 0 ; iObject < numberObjects_ ; iObject++) {
    27742775        double infeasibility =
    2775             object_[iObject]->infeasibility(&usefulInfo, preferredWay) ;
     2776            object_[iObject]->checkInfeasibility(&usefulInfo) ;
    27762777        if (infeasibility ) numberUnsatisfied++ ;
    27772778    }
     
    28522853                  //rowCut.addCuts(globalCuts_);
    28532854                  int nTightened=0;
    2854                   bool feasible=true;
     2855                  assert (feasible);
    28552856                  {
    28562857                    double tolerance=1.0e-5;
     
    28602861                      if (tightBounds[2*i+0]>tightBounds[2*i+1]) {
    28612862                        feasible=false;
    2862                         printf("Bad bounds on %d %g,%g was %g,%g\n",
    2863                                i,tightBounds[2*i+0],tightBounds[2*i+1],
    2864                                lower[i],upper[i]);
     2863                        char general[200];
     2864                        sprintf(general,"Solvers give infeasible bounds on %d %g,%g was %g,%g - search finished\n",
     2865                               i,tightBounds[2*i+0],tightBounds[2*i+1],lower[i],upper[i]);
     2866                        messageHandler()->message(CBC_GENERAL,messages())
     2867                          << general << CoinMessageEol ;
     2868                        break;
    28652869                      }
    2866                       //int k=0;
    28672870                      double oldLower=lower[i];
    28682871                      double oldUpper=upper[i];
    28692872                      if (tightBounds[2*i+0]>oldLower+tolerance) {
    28702873                        nTightened++;
    2871                         //k++;
    28722874                        solver_->setColLower(i,tightBounds[2*i+0]);
    28732875                      }
    28742876                      if (tightBounds[2*i+1]<oldUpper-tolerance) {
    28752877                        nTightened++;
    2876                         //k++;
    28772878                        solver_->setColUpper(i,tightBounds[2*i+1]);
    28782879                      }
    2879                       //if (k)
    2880                       //printf("new bounds on %d %g,%g was %g,%g\n",
    2881                       //       i,tightBounds[2*i+0],tightBounds[2*i+1],
    2882                       //       oldLower,oldUpper);
    28832880                    }
    2884                     if (!feasible)
    2885                       abort(); // deal with later
    28862881                  }
    28872882                  delete [] tightBounds;
     
    29892984                  }
    29902985                }
    2991                 feasible = solveWithCuts(cuts, maximumCutPassesAtRoot_,
     2986                if (feasible)
     2987                  feasible = solveWithCuts(cuts, maximumCutPassesAtRoot_,
    29922988                                         NULL);
    29932989                if (multipleRootTries_&&
     
    41054101            unlockThread();
    41064102        }
    4107         // If done 100 nodes see if worth trying reduction
    4108         if (numberNodes_ == 50 || numberNodes_ == 100) {
     4103        // If done 50/100 nodes see if worth trying reduction
     4104        if (numberNodes_ >= nextCheckRestart) {
     4105          if (nextCheckRestart<100)
     4106            nextCheckRestart=100;
     4107          else
     4108            nextCheckRestart=COIN_INT_MAX;
    41094109#ifdef COIN_HAS_CLP
    41104110            OsiClpSolverInterface * clpSolver
     
    85278527        OsiBranchingInformation usefulInfo = usefulInformation();
    85288528        for (int i = 0; i < numberObjects_ && integerFeasible; i++) {
    8529             int preferredWay;
    8530             double infeasibility = object_[i]->infeasibility(&usefulInfo, preferredWay);
     8529            double infeasibility = object_[i]->checkInfeasibility(&usefulInfo);
    85318530            if (infeasibility)
    85328531                integerFeasible = false;
     
    1237312372    int numberUnsatisfied = 0;
    1237412373    //double sumUnsatisfied=0.0;
    12375     int preferredWay;
    1237612374    int j;
    1237712375    // Point to current solution
     
    1239412392#ifndef SIMPLE_INTEGER
    1239512393        const OsiObject * object = object_[j];
    12396         double infeasibility = object->infeasibility(&usefulInfo, preferredWay);
     12394        double infeasibility = object->checkInfeasibility(&usefulInfo);
    1239712395        if (infeasibility) {
    1239812396            assert (infeasibility > 0);
     
    1241412412    for (; j < numberObjects_; j++) {
    1241512413        const OsiObject * object = object_[j];
    12416         double infeasibility = object->infeasibility(&usefulInfo, preferredWay);
     12414        double infeasibility = object->checkInfeasibility(&usefulInfo);
    1241712415        if (infeasibility) {
    1241812416            assert (infeasibility > 0);
     
    1390813906            // again
    1390913907            //std::cout<<solver_<<std::endl;
     13908
     13909            OsiCuts feasCuts;
     13910
     13911            for (int i = 0; i < numberCutGenerators_ && (feasCuts.sizeRowCuts () == 0); i++) {
     13912              if (generator_ [i] -> normal () &&
     13913                  (!generator_ [i] -> needsOptimalBasis () || solver_ -> basisIsAvailable ()))
     13914                generator_ [i] -> generateCuts (feasCuts, 1 /* = fullscan */, solver_, NULL);
     13915            }
     13916            solver_ -> applyCuts (feasCuts);
     13917
    1391013918            resolve(solver_);
    1391113919            double objval = solver_->getObjValue();
     
    1432314331        bool exitNow = false;
    1432414332        for (i = 0; i < numberHeuristics_; i++) {
     14333            heuristic_[i]->setModelOnly(this);
    1432514334            if (heuristic_[i]->exitNow(bestObjective_))
    1432614335                exitNow = true;
     
    1493214941            if (feasible) {
    1493314942                int iObject ;
    14934                 int preferredWay ;
    1493514943                int numberUnsatisfied = 0 ;
    1493614944                memcpy(currentSolution_, solver_->getColSolution(),
     
    1494114949                for (iObject = 0 ; iObject < numberObjects_ ; iObject++) {
    1494214950                    double infeasibility =
    14943                         object_[iObject]->infeasibility(&usefulInfo, preferredWay) ;
     14951                        object_[iObject]->checkInfeasibility(&usefulInfo) ;
    1494414952                    if (infeasibility ) numberUnsatisfied++ ;
    1494514953                }
     
    1734617354    {
    1734717355        int iObject ;
    17348         int preferredWay ;
    1734917356        int numberUnsatisfied = 0 ;
    1735017357        memcpy(currentSolution_, solver_->getColSolution(),
     
    1735517362        for (iObject = 0 ; iObject < numberObjects_ ; iObject++) {
    1735617363            double infeasibility =
    17357                 object_[iObject]->infeasibility(&usefulInfo, preferredWay) ;
     17364                object_[iObject]->checkInfeasibility(&usefulInfo) ;
    1735817365            if (infeasibility) numberUnsatisfied++ ;
    1735917366        }
Note: See TracChangeset for help on using the changeset viewer.