Ignore:
Location:
stable/2.9/Cbc/src
Files:
8 edited

Legend:

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

    r2175 r2154  
    430430                    printf("On optimal path CbcCut\n");
    431431                    int nCols = solver->getNumCols();
     432                    int i;
    432433                    const double * optimal = debugger->optimalSolution();
    433434                    const double * objective = solver->getObjCoefficients();
    434435                    double objval1 = 0.0, objval2 = 0.0;
    435                     for (int i = 0; i < nCols; i++) {
    436                         if (!solver->isInteger(i))
    437                           continue;
     436                    for (i = 0; i < nCols; i++) {
    438437#if CGL_DEBUG>1
    439438                        printf("%d %g %g %g %g\n", i, lower[i], solution[i], upper[i], optimal[i]);
     
    617616            const OsiRowCutDebugger * debugger = solver->getRowCutDebugger();
    618617#endif
    619             //#define WEAKEN_CUTS 1
    620 #ifdef WEAKEN_CUTS
    621             const double * lower = solver->getColLower();
    622             const double * upper = solver->getColUpper();
    623             const double * solution = solver->getColSolution();
    624 #endif
    625618            for (k = numberRowCutsBefore; k < numberRowCutsAfter; k++) {
    626619                OsiRowCut * thisCut = cs.rowCutPtr(k) ;
    627 #ifdef WEAKEN_CUTS
    628                 // weaken cut if coefficients not integer
    629                 double lb=thisCut->lb();
    630                 double ub=thisCut->ub();
    631                 if (lb<-1.0e100||ub>1.0e100) {
    632                   // normal cut
    633                   CoinPackedVector rpv = thisCut->row();
    634                   const int n = rpv.getNumElements();
    635                   const int * indices = rpv.getIndices();
    636                   const double * elements = rpv.getElements();
    637                   double bound=0.0;
    638                   double sum=0.0;
    639                   bool integral=true;
    640                   int nInteger=0;
    641                   for (int k=0; k<n; k++) {
    642                     double value = fabs(elements[k]);
    643                     int column=indices[k];
    644                     sum += value;
    645                     if (value!=floor(value+0.5))
    646                       integral=false;
    647                     if (solver->isInteger(column)) {
    648                       nInteger++;
    649                       double largerBound = CoinMax(fabs(lower[column]),
    650                                                    fabs(upper[column]));
    651                       double solutionBound=fabs(solution[column])+10.0;
    652                       bound += CoinMin(largerBound,solutionBound);
    653                     }
    654                   }
    655 #if WEAKEN_CUTS ==1
    656                   // leave if all 0-1
    657                   if (nInteger==bound)
    658                     integral=true;
    659 #elif WEAKEN_CUTS==4||WEAKEN_CUTS==5
    660                   // leave if all 0-1
    661                   if (nInteger==bound && n < 40)
    662                     integral=true;
    663 #endif
    664                   if (!integral) {
    665                     double weakenBy=1.0e-7*(bound+sum);
    666 #if WEAKEN_CUTS==3||WEAKEN_CUTS==5
    667                     weakenBy *= 10.0;
    668 #endif             
    669                     if (lb<-1.0e100)
    670                       thisCut->setUb(ub+weakenBy);
    671                     else
    672                       thisCut->setLb(lb-weakenBy);
    673                   }
    674                 }
    675 #endif
    676620#ifdef CGL_DEBUG
    677621                if (debugger && debugger->onOptimalPath(*solver)) {
    678                   if(debugger->invalidCut(*thisCut)) {
     622                    assert(!debugger->invalidCut(*thisCut));
     623                    if(debugger->invalidCut(*thisCut))
    679624                      abort();
    680                   }
    681625                }
    682626#endif
  • stable/2.9/Cbc/src/CbcHeuristic.cpp

    r2175 r2154  
    24202420                    way = -1.0;
    24212421                    improvement = downImprovement;
    2422                     if (isInteger&&currentValue<lowerValue+0.99)
    2423                       continue; // no good
    24242422                } else if (upImprovement > 0.0 && currentValue < upperValue) {
    24252423                    way = 1.0;
    24262424                    improvement = upImprovement;
    2427                     if (isInteger&&currentValue>upperValue-0.99)
    2428                       continue; // no good
    24292425                }
    24302426                if (way) {
  • stable/2.9/Cbc/src/CbcModel.cpp

    r2175 r2154  
    20892089        }
    20902090        originalContinuousObjective_ = COIN_DBL_MAX;
    2091         if (bestSolution_ &&
    2092             ((specialOptions_&8388608)==0||(specialOptions_&2048)!=0)) {
    2093           // best solution found by various heuristics - set solution
    2094           char general[200];
    2095           sprintf(general,"Solution of %g already found by heuristic",
    2096                   bestObjective_);
    2097           messageHandler()->message(CBC_GENERAL,
    2098                                     messages())
    2099             << general << CoinMessageEol ;
    2100           setCutoff(1.0e50) ; // As best solution should be worse than cutoff
    2101           // change cutoff as constraint if wanted
    2102           if (cutoffRowNumber_>=0) {
    2103             if (solver_->getNumRows()>cutoffRowNumber_)
    2104               solver_->setRowUpper(cutoffRowNumber_,1.0e50);
    2105           }
    2106           // also in continuousSolver_
    2107           if (continuousSolver_) {
    2108             // Solvers know about direction
    2109             double direction = solver_->getObjSense();
    2110             continuousSolver_->setDblParam(OsiDualObjectiveLimit, 1.0e50*direction);
    2111           } else {
    2112             continuousSolver_ = solver_->clone();
    2113           }
    2114           phase_ = 5;
    2115           double increment = getDblParam(CbcModel::CbcCutoffIncrement) ;
    2116           if ((specialOptions_&4) == 0)
    2117             bestObjective_ += 100.0 * increment + 1.0e-3; // only set if we are going to solve
    2118           setBestSolution(CBC_END_SOLUTION, bestObjective_, bestSolution_, 1) ;
    2119           continuousSolver_->resolve() ;
    2120           if (!continuousSolver_->isProvenOptimal()) {
    2121             continuousSolver_->messageHandler()->setLogLevel(2) ;
    2122             continuousSolver_->initialSolve() ;
    2123           }
    2124           delete solver_ ;
    2125           solver_ = continuousSolver_ ;
    2126           setPointers(solver_);
    2127           continuousSolver_ = NULL ;
    2128         }
    21292091        solverCharacteristics_ = NULL;
    21302092        if (flipObjective)
     
    48474809            double dummyBest;
    48484810            tree_->cleanTree(this, -COIN_DBL_MAX, dummyBest) ;
    4849 #if 0 // Does not seem to be needed def CBC_THREAD
     4811#ifdef CBC_THREAD
    48504812            if (parallelMode() > 0 && master_) {
    48514813              // see if any dangling nodes
  • stable/2.9/Cbc/src/CbcNode.cpp

    r2175 r2154  
    23672367                    }
    23682368                    delete [] rowActivity;
     2369                    delete [] solution;
    23692370                    if (!satisfied) {
    23702371#ifdef CLP_INVESTIGATE
     
    23932394                        }
    23942395                    }
    2395                     delete [] solution;
    23962396                }
    23972397            } else if (iPass == 1) {
  • stable/2.9/Cbc/src/CbcSolver.cpp

    r2175 r2154  
    17131713        gomoryGen.setLimit(50);
    17141714        // set default action (0=off,1=on,2=root)
    1715 #ifdef SWAP_GOMORY
    1716         int gomoryAction = 0;
    1717 #else
    17181715        int gomoryAction = 3;
    1719 #endif
    17201716
    17211717        CglProbing probingGen;
     
    17581754        //GMIGen.setLimit(100);
    17591755        // set default action (0=off,1=on,2=root)
    1760 #ifdef SWAP_GOMORY
    1761         int GMIAction = 3;
    1762 #else
    17631756        // Off
    17641757        int GMIAction = 0;
    1765 #endif
    17661758
    17671759        CglFakeClique cliqueGen(NULL, false);
     
    23242316                                        generalMessageHandler->message(CLP_GENERAL, generalMessages)
    23252317                                        << message << CoinMessageEol;
    2326 #ifdef SWAP_GOMORY
    2327                                     GMIAction = 3;
    2328                                     message=parameters_[whichParam(CBC_PARAM_STR_GMICUTS, numberParameters_, parameters_)].setCurrentOptionWithMessage("ifmove");
    2329 #else
    23302318                                    GMIAction = 2;
    23312319                                    message=parameters_[whichParam(CBC_PARAM_STR_GMICUTS, numberParameters_, parameters_)].setCurrentOptionWithMessage("root");
    2332 #endif
    23332320                                    if (!noPrinting_&&message)
    23342321                                        generalMessageHandler->message(CLP_GENERAL, generalMessages)
  • stable/2.9/Cbc/src/Makefile.in

    r2175 r2154  
    249249COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@
    250250COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@
    251 COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
    252 COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
    253251COIN_HAS_DYLP_FALSE = @COIN_HAS_DYLP_FALSE@
    254252COIN_HAS_DYLP_TRUE = @COIN_HAS_DYLP_TRUE@
     
    257255COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@
    258256COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@
    259 COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
    260 COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
    261257COIN_HAS_MIPLIB3_FALSE = @COIN_HAS_MIPLIB3_FALSE@
    262258COIN_HAS_MIPLIB3_TRUE = @COIN_HAS_MIPLIB3_TRUE@
     
    478474coin_doxy_usedot = @coin_doxy_usedot@
    479475coin_have_doxygen = @coin_have_doxygen@
    480 coin_have_latex = @coin_have_latex@
    481476datadir = @datadir@
    482477exec_prefix = @exec_prefix@
  • stable/2.9/Cbc/src/OsiCbc/Makefile.in

    r2175 r2154  
    175175COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@
    176176COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@
    177 COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@
    178 COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@
    179177COIN_HAS_DYLP_FALSE = @COIN_HAS_DYLP_FALSE@
    180178COIN_HAS_DYLP_TRUE = @COIN_HAS_DYLP_TRUE@
     
    183181COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@
    184182COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@
    185 COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@
    186 COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@
    187183COIN_HAS_MIPLIB3_FALSE = @COIN_HAS_MIPLIB3_FALSE@
    188184COIN_HAS_MIPLIB3_TRUE = @COIN_HAS_MIPLIB3_TRUE@
     
    404400coin_doxy_usedot = @coin_doxy_usedot@
    405401coin_have_doxygen = @coin_have_doxygen@
    406 coin_have_latex = @coin_have_latex@
    407402datadir = @datadir@
    408403exec_prefix = @exec_prefix@
  • stable/2.9/Cbc/src/config_cbc_default.h

    r2175 r2154  
    66
    77/* Version number of project */
    8 #define CBC_VERSION "2.9.4"
     8#define CBC_VERSION "2.9.3"
    99
    1010/* Major Version number of project */
     
    1515
    1616/* Release Version number of project */
    17 #define CBC_VERSION_RELEASE 4
     17#define CBC_VERSION_RELEASE 3
Note: See TracChangeset for help on using the changeset viewer.