Ignore:
Timestamp:
Nov 11, 2013 12:27:32 PM (6 years ago)
Author:
forrest
Message:

Minor stability fixes and an option to allow perturbation after presolve

File:
1 edited

Legend:

Unmodified
Added
Removed
  • stable/1.15/Clp/src/ClpSolve.cpp

    r1959 r1989  
    21852185
    21862186          int iPass;
    2187           double lastObjective = 1.0e31;
     2187          double lastObjective[] = {1.0e31,1.0e31};
    21882188          // It will be safe to allow dense
    21892189          model2->setInitialDenseFactorization(true);
     
    22642264#ifdef ABC_INHERIT
    22652265                      //small.writeMps("try.mps");
    2266                       if (iPass)
     2266                      if (iPass||!numberArtificials)
    22672267                         small.dealWithAbc(1,1);
    22682268                       else
    22692269                         small.dealWithAbc(0,0);
    22702270#else
    2271                       if (iPass)
     2271                      if (iPass||!numberArtificials)
    22722272                         small.primal(1);
    22732273                      else
    22742274                         small.dual(0);
    22752275#endif
     2276                      if (small.problemStatus())
     2277                        small.dual(0);
    22762278#else
    22772279                         int numberColumns = small.numberColumns();
     
    23682370               if (iPass > 20)
    23692371                    sumArtificials = 0.0;
    2370                if ((small.objectiveValue()*optimizationDirection_ > lastObjective - 1.0e-7 && iPass > 5 && sumArtificials < 1.0e-8) ||
     2372               if ((small.objectiveValue()*optimizationDirection_ > lastObjective[1] - 1.0e-7 && iPass > 5 && sumArtificials < 1.0e-8) ||
    23712373                         (!small.numberIterations() && iPass) ||
    23722374                         iPass == maxSprintPass - 1 || small.status() == 3) {
     
    23742376                    break; // finished
    23752377               } else {
    2376                     lastObjective = small.objectiveValue() * optimizationDirection_;
     2378                    lastObjective[1] = lastObjective[0];
     2379                    lastObjective[0] = small.objectiveValue() * optimizationDirection_;
    23772380                    double tolerance;
    23782381                    double averageNegDj = sumNegative / static_cast<double> (numberNegative + 1);
     
    31133116                         dual();
    31143117                    } else {
    3115                       if (numberRows_<10000)
    3116                         setPerturbation(100); // probably better to perturb after n its
    3117                       else if (savePerturbation<100)
    3118                         setPerturbation(51); // probably better to perturb after n its
     3118                        if ((moreSpecialOptions_&65536)==0) {
     3119                          if (numberRows_<10000)
     3120                            setPerturbation(100); // probably better to perturb after n its
     3121                          else if (savePerturbation<100)
     3122                            setPerturbation(51); // probably better to perturb after n its
     3123                        }
    31193124#ifndef ABC_INHERIT
    31203125                        primal(1);
Note: See TracChangeset for help on using the changeset viewer.