Changes from releases/2.9.4 at r2350 to releases/2.9.5 at r2350


Ignore:
Location:
releases
Files:
2 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • releases/2.9.5/Cbc

  • releases/2.9.5/Cbc/README

    r2350 r2350  
    1 # CBC Version 2.9.3 README
     1# CBC Version 2.9.5 README
    22
    33Welcome to the README for the COIN Branch and Cut Solver (CBC). CBC is
     
    3636
    3737## CHANGELOG
     38
     39 * Release 2.9.5
     40
     41   * Bug fixes
     42
     43 * Release 2.9.4
     44
     45   * Small fixes for stability
     46   * Fixes for Doygen documentation generation
    3847
    3948 * Release 2.9.3
  • releases/2.9.5/Cbc/configure

    r2350 r2350  
    11#! /bin/sh
    22# Guess values for system-dependent variables and create Makefiles.
    3 # Generated by GNU Autoconf 2.59 for Cbc 2.9.4.
     3# Generated by GNU Autoconf 2.59 for Cbc 2.9.5.
    44#
    55# Report bugs to <cbc@lists.coin-or.org>.
     
    430430PACKAGE_NAME='Cbc'
    431431PACKAGE_TARNAME='cbc'
    432 PACKAGE_VERSION='2.9.4'
    433 PACKAGE_STRING='Cbc 2.9.4'
     432PACKAGE_VERSION='2.9.5'
     433PACKAGE_STRING='Cbc 2.9.5'
    434434PACKAGE_BUGREPORT='cbc@lists.coin-or.org'
    435435
     
    10061006  # This message is too long to be a string in the A/UX 3.1 sh.
    10071007  cat <<_ACEOF
    1008 \`configure' configures Cbc 2.9.4 to adapt to many kinds of systems.
     1008\`configure' configures Cbc 2.9.5 to adapt to many kinds of systems.
    10091009
    10101010Usage: $0 [OPTION]... [VAR=VALUE]...
     
    10721072if test -n "$ac_init_help"; then
    10731073  case $ac_init_help in
    1074      short | recursive ) echo "Configuration of Cbc 2.9.4:";;
     1074     short | recursive ) echo "Configuration of Cbc 2.9.5:";;
    10751075   esac
    10761076  cat <<\_ACEOF
     
    13091309if $ac_init_version; then
    13101310  cat <<\_ACEOF
    1311 Cbc configure 2.9.4
     1311Cbc configure 2.9.5
    13121312generated by GNU Autoconf 2.59
    13131313
     
    13291329running configure, to aid debugging if configure makes a mistake.
    13301330
    1331 It was created by Cbc $as_me 2.9.4, which was
     1331It was created by Cbc $as_me 2.9.5, which was
    13321332generated by GNU Autoconf 2.59.  Invocation command line was
    13331333
     
    18551855
    18561856# Capture libtool library version, if given.
    1857  coin_libversion=12:4:9
     1857 coin_libversion=12:5:9
    18581858
    18591859
     
    45774577# Define the identity of the package.
    45784578 PACKAGE='cbc'
    4579  VERSION='2.9.4'
     4579 VERSION='2.9.5'
    45804580
    45814581
     
    3123731237cat >&5 <<_CSEOF
    3123831238
    31239 This file was extended by Cbc $as_me 2.9.4, which was
     31239This file was extended by Cbc $as_me 2.9.5, which was
    3124031240generated by GNU Autoconf 2.59.  Invocation command line was
    3124131241
     
    3130031300cat >>$CONFIG_STATUS <<_ACEOF
    3130131301ac_cs_version="\\
    31302 Cbc config.status 2.9.4
     31302Cbc config.status 2.9.5
    3130331303configured by $0, generated by GNU Autoconf 2.59,
    3130431304  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  • releases/2.9.5/Cbc/configure.ac

    r2350 r2350  
    1313AC_PREREQ(2.59)
    1414
    15 AC_INIT([Cbc],[2.9.4],[cbc@lists.coin-or.org])
     15AC_INIT([Cbc],[2.9.5],[cbc@lists.coin-or.org])
    1616
    1717AC_COPYRIGHT([
     
    4242# externals.  The following macro ensures that those externals are
    4343# retrieved by svn if they are not there yet.
    44 AC_COIN_PROJECTDIR_INIT(Cbc,12:4:9)
     44AC_COIN_PROJECTDIR_INIT(Cbc,12:5:9)
    4545
    4646# Check if user wants to produce debugging code
  • releases/2.9.5/Cbc/src

  • releases/2.9.5/Cbc/src/CbcCutGenerator.cpp

    r2350 r2350  
    677677                if (debugger && debugger->onOptimalPath(*solver)) {
    678678                  if(debugger->invalidCut(*thisCut)) {
     679#if CGL_DEBUG>1
     680                    const double * optimal = debugger->optimalSolution();
     681                    CoinPackedVector rpv = thisCut->row();
     682                    const int n = rpv.getNumElements();
     683                    const int * indices = rpv.getIndices();
     684                    const double * elements = rpv.getElements();
     685                   
     686                    double lb=thisCut->lb();
     687                    double ub=thisCut->ub();
     688                    double sum=0.0;
     689                   
     690                    for (int k=0; k<n; k++){
     691                      int column=indices[k];
     692                      sum += optimal[column]*elements[k];
     693                    }
     694                    // is it nearly violated
     695                    if (sum >ub - 1.0e-8 ||sum < lb + 1.0e-8) {
     696                      double violation=CoinMax(sum-ub,lb-sum);
     697                      std::cout<<generatorName_<<" cut with "<<n
     698                               <<" coefficients, nearly cuts off known solutions by "<<violation
     699                               <<", lo="<<lb<<", ub="<<ub<<std::endl;
     700                      for (int k=0; k<n; k++){
     701                        int column=indices[k];
     702                        std::cout<<"( "<<column<<" , "<<elements[k]<<" ) ";
     703                        if ((k%4)==3)
     704                          std::cout <<std::endl;
     705                      }
     706                      std::cout <<std::endl;
     707                      std::cout <<"Non zero solution values are"<<std::endl;
     708                      int j=0;
     709                      for (int k=0; k<n; k++){
     710                        int column=indices[k];
     711                        if (fabs(optimal[column])>1.0e-9) {
     712                          std::cout<<"( "<<column<<" , "<<optimal[column]<<" ) ";
     713                          if ((j%4)==3)
     714                            std::cout <<std::endl;
     715                          j++;
     716                        }
     717                      }
     718                      std::cout <<std::endl;
     719                    }
     720#endif
     721                    assert(!debugger->invalidCut(*thisCut));
     722                    if(debugger->invalidCut(*thisCut))
    679723                      abort();
    680724                  }
  • releases/2.9.5/Cbc/src/CbcHeuristicDive.cpp

    r2350 r2350  
    7474    decayFactor_ = 1.0;
    7575    smallObjective_ = 1.0e-10;
    76     setPriorities();
    7776}
    7877
     
    234233  if (gotPriorities || priority1>priority2) {
    235234    priority_ = new PriorityType [numberIntegers];
     235    int nInteger=0;
    236236    for (int i = 0; i < numberObjects; i++) {
    237237      OsiObject * object = model_->modifiableObject(i);
     
    241241      int level=thisOne->priority()-priority2;
    242242      assert (level<(1<<29));
    243       priority_[i].priority=static_cast<unsigned int>(level);
     243      assert (nInteger<numberIntegers);
     244      priority_[nInteger].priority=static_cast<unsigned int>(level);
    244245      int direction=0;
    245246      if (thisOne->preferredWay()<0)
     
    248249        direction=1|1;
    249250        // at present don't try other way is not used
    250       priority_[i].direction=static_cast<unsigned char>(direction);
    251     }
     251      priority_[nInteger++].direction=static_cast<unsigned char>(direction);
     252    }
     253    assert (nInteger==numberIntegers);
    252254  }
    253255}
  • releases/2.9.5/Cbc/src/CbcHeuristicFPump.cpp

    r2350 r2350  
    21392139                            double value = newSolver->getObjValue() * newSolver->getObjSense();
    21402140                            if (value < newSolutionValue) {
    2141                                 //newSolver->writeMps("query","mps");
     2141                              //newSolver->writeMpsNative("query.mps", NULL, NULL, 2);
    21422142#ifdef JJF_ZERO
    21432143                                {
     
    22092209                                << pumpPrint
    22102210                                << CoinMessageEol;
     2211                                //newSolver->writeMpsNative("query2.mps", NULL, NULL, 2);
    22112212                                newSolutionValue = value;
    22122213                                memcpy(betterSolution, newSolver->getColSolution(), numberColumns*sizeof(double));
  • releases/2.9.5/Cbc/src/CbcMipStartIO.cpp

    r2350 r2350  
    5555         {
    5656            sprintf( printLine, "Reading: %s, line %d - first column in mipstart file should be numeric, ignoring.", fileName, nLine );
    57             model->messageHandler()->message(CBC_GENERAL, model->messages())
    58               << printLine << CoinMessageEol;
     57            model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
    5958            continue;
    6059         }
     
    6261         {
    6362            sprintf( printLine, "Reading: %s, line %d - Third column in mipstart file should be numeric, ignoring.", fileName, nLine  );
    64             model->messageHandler()->message(CBC_GENERAL, model->messages())
    65               << printLine << CoinMessageEol;
     63            model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
    6664            continue;
    6765         }
    6866
    69          //int idx = atoi( col[0] );
    7067         char *name = col[1];
    7168         double value = atof( col[2] );
    72          //double obj = 0.0;
    73 //         if (nread >= 4)
    74 //            obj = atof( col[3] );
    7569
    7670         colValues.push_back( pair<string, double>(string(name),value) );
     
    7973
    8074   if (colValues.size()) {
    81       sprintf( printLine,"mipstart values read for %d variables.", (int)colValues.size());
    82       model->messageHandler()->message(CBC_GENERAL, model->messages())
    83         << printLine << CoinMessageEol;
     75      sprintf( printLine,"MIPStart values read for %d variables.", static_cast<int>(colValues.size()) );
     76          model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
    8477      if (colValues.size()<model->getNumCols()) {
    85         int numberColumns = model->getNumCols();
    86         OsiSolverInterface * solver = model->solver();
    87         vector< pair< string, double > > fullValues;
    88         /* for fast search of column names */
    89         map< string, int > colIdx;
    90         for (int i=0;i<numberColumns;i++) {
    91           fullValues.push_back( pair<string, double>(solver->getColName(i),0.0) );
    92           colIdx[solver->getColName(i)] = i;
    93         }
    94         for ( int i=0 ; (i<(int)colValues.size()) ; ++i )
    95           {
    96             map< string, int >::const_iterator mIt = colIdx.find( colValues[i].first );
    97             if ( mIt != colIdx.end() ) {
    98               const int idx = mIt->second;
    99               double v = colValues[i].second;
    100               fullValues[idx].second=v;
    101             }
    102           }
    103         colValues=fullValues;
    104       }
    105    } else
    106    {
     78          int numberColumns = model->getNumCols();
     79          OsiSolverInterface *solver = model->solver();
     80          vector< pair< string, double > > fullValues;
     81          /* for fast search of column names */
     82          map< string, int > colIdx;
     83          for (int i=0;i<numberColumns;i++) {
     84              fullValues.push_back( pair<string, double>(solver->getColName(i),0.0) );
     85              colIdx[solver->getColName(i)] = i;
     86          }
     87          for ( int i=0 ; (i<static_cast<int>(colValues.size())) ; ++i ) {
     88              map< string, int >::const_iterator mIt = colIdx.find( colValues[i].first );
     89              if ( mIt != colIdx.end() ) {
     90                  const int idx = mIt->second;
     91                  double v = colValues[i].second;
     92                  fullValues[idx].second=v;
     93              }
     94          }
     95          colValues=fullValues;
     96      }
     97   }
     98   else {
    10799      sprintf( printLine, "No mipstart solution read from %s", fileName );
    108       model->messageHandler()->message(CBC_GENERAL, model->messages())
    109         << printLine << CoinMessageEol;
     100      model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
    110101      return 1;
    111102   }
     
    120111                             double *sol, double &obj )
    121112{
     113   if (!model->getNumCols())
     114       return 0;
     115   
    122116   int status = 0;
    123117   double compObj = COIN_DBL_MAX;
     
    125119   OsiSolverInterface *lp = model->solver()->clone();
    126120   map< string, int > colIdx;
    127    assert( ((int)colNames.size()) == lp->getNumCols() );
     121   assert( (static_cast<int>(colNames.size())) == lp->getNumCols() );
    128122   /* for fast search of column names */
    129    for ( int i=0 ; (i<(int)colNames.size()) ; ++i )
     123   for ( int i=0 ; (i<static_cast<int>(colNames.size())) ; ++i )
    130124      colIdx[colNames[i]] = i;
    131125
     
    135129   char colNotFound[256] = "";
    136130   int nContinuousFixed = 0;
     131
    137132#ifndef JUST_FIX_INTEGER
    138133#define JUST_FIX_INTEGER 0
    139134#endif
     135
    140136#if JUST_FIX_INTEGER > 1
    141137   // all not mentioned are at zero
    142138   for ( int i=0 ; (i<lp->getNumCols()) ; ++i )
    143      {
     139   {
    144140       if (lp->isInteger(i))
    145141         lp->setColBounds( i, 0.0, 0.0 );
    146      }
    147 #endif
    148    for ( int i=0 ; (i<(int)colValues.size()) ; ++i )
     142   }
     143#endif
     144   for ( int i=0 ; (i<static_cast<int>(colValues.size())) ; ++i )
    149145   {
    150146      map< string, int >::const_iterator mIt = colIdx.find( colValues[i].first );
     
    161157#if JUST_FIX_INTEGER
    162158         if (!lp->isInteger(idx))
    163            continue;
     159            continue;
    164160#endif
    165161         if (v<1e-8)
     
    167163         if (lp->isInteger(idx))  // just to avoid small
    168164            v = floor( v+0.5 );   // fractional garbage
    169          else
    170            nContinuousFixed++;
     165         else
     166            nContinuousFixed++;
     167
    171168         lp->setColBounds( idx, v, v );
    172169         ++fixed;
     
    177174   {
    178175      model->messageHandler()->message(CBC_GENERAL, model->messages())
    179         << "Warning: MIPstart solution is not valid, ignoring it."
    180         << CoinMessageEol;
     176        << "Warning: MIPstart solution is not valid, column names do not match, ignoring it."
     177        << CoinMessageEol;
    181178      goto TERMINATE;
    182179   }
    183180
    184    if ( notFound >= ( ((double)colNames.size()) * 0.5 ) ) {
     181   if ( notFound >= ( (static_cast<double>(colNames.size())) * 0.5 ) ) {
    185182      sprintf( printLine, "Warning: %d column names were not found (e.g. %s) while filling solution.", notFound, colNotFound );
    186       model->messageHandler()->message(CBC_GENERAL, model->messages())
    187         << printLine << CoinMessageEol;
     183        model->messageHandler()->message(CBC_GENERAL, model->messages())
     184        << printLine << CoinMessageEol;
    188185   }
    189186#if JUST_FIX_INTEGER
     
    192189   lp->setDblParam(OsiDualObjectiveLimit,COIN_DBL_MAX);
    193190   lp->initialSolve();
    194    //lp->writeMps("fixed","mps");
     191
     192   if ( (lp->isProvenPrimalInfeasible()) || (lp->isProvenDualInfeasible()) )
     193   {
     194      if (nContinuousFixed) {
     195         model->messageHandler()->message(CBC_GENERAL, model->messages())
     196            << "Trying just fixing integer variables." << CoinMessageEol;
     197         int numberColumns = lp->getNumCols();
     198         const double *oldLower = model->solver()->getColLower();
     199         const double *oldUpper = model->solver()->getColUpper();
     200         for ( int i=0 ; i<numberColumns ; ++i ) {
     201            if (!lp->isInteger(i)) {
     202               lp->setColLower(i,oldLower[i]);
     203               lp->setColUpper(i,oldUpper[i]);
     204            }
     205         }
     206
     207         lp->initialSolve();
     208      }
     209      else
     210      {
     211         model->messageHandler()->message(CBC_GENERAL, model->messages())
     212             << "Fixing only non-zero variables." << CoinMessageEol;
     213         /* unfix all variables which are zero */
     214         int notZeroAnymore = 0;
     215         for ( int i=0 ; (i<lp->getNumCols()) ; ++i )
     216             if ( ((fabs(lp->getColLower()[i])) <= 1e-8) && (fabs(lp->getColLower()[i]-lp->getColUpper()[i]) <= 1e-8) )
     217             {
     218                const double *oldLower = model->solver()->getColLower();
     219                const double *oldUpper = model->solver()->getColUpper();
     220                lp->setColLower(i,oldLower[i]);
     221                lp->setColUpper(i,oldUpper[i]);
     222                notZeroAnymore++;
     223             }
     224         if (notZeroAnymore)
     225             lp->initialSolve();
     226      }
     227   }
     228
    195229   if (!lp->isProvenOptimal())
    196230   {
    197231      model->messageHandler()->message(CBC_GENERAL, model->messages())
    198         << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
    199       if (nContinuousFixed) {
    200         model->messageHandler()->message(CBC_GENERAL, model->messages())
    201           << "Trying just fixing integer variables." << CoinMessageEol;
    202         int numberColumns = lp->getNumCols();
    203         const double * oldLower = model->solver()->getColLower();
    204         const double * oldUpper = model->solver()->getColUpper();
    205         for ( int i=0 ; i<numberColumns ; ++i ) {
    206           if (!lp->isInteger(i)) {
    207             lp->setColLower(i,oldLower[i]);
    208             lp->setColUpper(i,oldUpper[i]);
    209           }
    210         }
    211         lp->initialSolve();
    212         if (!lp->isProvenOptimal())
    213           model->messageHandler()->message(CBC_GENERAL, model->messages())
    214             << "Still no good." << CoinMessageEol;
    215       }
    216       if (!lp->isProvenOptimal()) {
    217         status = 1;
    218         goto TERMINATE;
    219       }
    220    }
    221 
     232           << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
     233      status = 1;
     234      goto TERMINATE;
     235   }
     236   
    222237   /* some additional effort is needed to provide an integer solution */
    223238   if ( lp->getFractionalIndices().size() > 0 )
    224239   {
    225       sprintf( printLine,"MIPStart solution provided values for %d of %d integer variables, %d variables are still fractional.", fixed, lp->getNumIntegers(), (int)lp->getFractionalIndices().size() );
     240      sprintf( printLine,"MIPStart solution provided values for %d of %d integer variables, %d variables are still fractional.", fixed, lp->getNumIntegers(), static_cast<int>(lp->getFractionalIndices().size()) );
    226241      model->messageHandler()->message(CBC_GENERAL, model->messages())
    227242        << printLine << CoinMessageEol;
     
    246261#else
    247262      CbcModel babModel( *lp );
    248       babModel.setLogLevel( 0 );
    249       babModel.setMaximumNodes( 500 );
     263      lp->writeLp("lessFix");
     264      babModel.setLogLevel( 2 );
     265      babModel.setMaximumNodes( 1000 );
    250266      babModel.setMaximumSeconds( 60 );
    251267      babModel.branchAndBound();
     
    263279      else
    264280      {
    265         model->messageHandler()->message(CBC_GENERAL, model->messages())
    266            << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
     281          model->messageHandler()->message(CBC_GENERAL, model->messages())
     282              << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
    267283         status = 1;
    268284         goto TERMINATE;
     
    278294   if ( foundIntegerSol )
    279295   {
    280       sprintf( printLine,"mipstart provided solution with cost %g", compObj);
     296      sprintf( printLine,"MIPStart provided solution with cost %g", compObj);
    281297      model->messageHandler()->message(CBC_GENERAL, model->messages())
    282         << printLine << CoinMessageEol;
     298           << printLine << CoinMessageEol;
    283299#if 0
    284300      {
  • releases/2.9.5/Cbc/src/CbcModel.cpp

    r2350 r2350  
    70927092    if (name)
    70937093        heuristic_[where]->setHeuristicName(name) ;
     7094#ifndef SAME_HEURISTIC_SEED
    70947095    heuristic_[where]->setSeed(987654321 + where);
     7096#else
     7097    heuristic_[where]->setSeed(987654321);
     7098#endif
    70957099    numberHeuristics_++ ;
    70967100}
     
    73137317            cutsToDrop = new int[currentNumberCuts] ;
    73147318            assert (currentNumberCuts + numberRowsAtContinuous_ <= lastws->getNumArtificial());
     7319            assert (currentNumberCuts <= maximumWhich_); // we will read from whichGenerator_[0..currentNumberCuts-1] below, so should have all these entries
     7320            // the above assert fails in certain situations, which indicates a bug in the code below
     7321            // as a workaround, resize whichGenerator_ to make sure we can read all entries without an invalid read from valgrind (and subsequent crash somewhere, seems so)
     7322            resizeWhichGenerator(maximumWhich_, currentNumberCuts);
    73157323            for (i = 0; i < currentNumberCuts; i++) {
    73167324                CoinWarmStartBasis::Status status =
     
    78527860        feasible = false; // pretend infeasible
    78537861    }
     7862    //#define CHECK_KNOWN_SOLUTION
     7863#ifdef CHECK_KNOWN_SOLUTION
     7864    if (onOptimalPath && (solver_->isDualObjectiveLimitReached()||
     7865                          !feasible)) {
     7866      printf("help 1\n");
     7867    }
     7868#endif
    78547869    /*
    78557870      NEW_UPDATE_OBJECT is defined to 0 when unthreaded (CBC_THREAD undefined), 2
     
    85408555        int numberToAdd = theseCuts.sizeRowCuts() ;
    85418556        numberNewCuts_ = lastNumberCuts + numberToAdd ;
     8557        // resize whichGenerator
     8558        resizeWhichGenerator(lastNumberCuts,numberNewCuts_);
    85428559        /*
    85438560          Now actually add the row cuts and reoptimise.
     
    85648581            if (numberToAdd > 0) {
    85658582                int i ;
    8566                 int * whichGenerator = whichGenerator_ -
    8567                   numberRowsAtContinuous_+solver_->getNumRows();
     8583                int * whichGenerator = whichGenerator_ + lastNumberCuts;
    85688584                // Faster to add all at once
    85698585                addCuts = new const OsiRowCut * [numberToAdd] ;
     
    92249240        }
    92259241        // add in any active cuts if at root node (for multiple solvers)
     9242#ifdef CHECK_KNOWN_SOLUTION
     9243    if (onOptimalPath && (solver_->isDualObjectiveLimitReached()||
     9244                          !feasible)) {
     9245      printf("help 2\n");
     9246    }
     9247#endif
    92269248        if (!numberNodes_) {
    92279249          for (i = 0; i < numberCutGenerators_; i++)
     
    96259647    }
    96269648#endif
     9649#ifdef CHECK_KNOWN_SOLUTION
     9650    if (onOptimalPath && (solver_->isDualObjectiveLimitReached()||
     9651                          !feasible)) {
     9652      printf("help\n");
     9653    }
     9654#endif
    96279655#ifdef CBC_DEBUG
    96289656    if (onOptimalPath && !solver_->isDualObjectiveLimitReached())
     
    998310011    const CoinWarmStartBasis* ws ;
    998410012    CoinWarmStartBasis::Status status ;
     10013    //#define COIN_HAS_CLP_KEEP_STATUS
     10014#ifdef COIN_HAS_CLP_KEEP_STATUS
     10015    int problemStatus=-1;
     10016    OsiClpSolverInterface * clpSolver
     10017      = dynamic_cast<OsiClpSolverInterface *> (solver_);
     10018    if (clpSolver)
     10019      problemStatus=clpSolver->getModelPtr()->status();
     10020#endif
    998510021    bool needPurge = true ;
    998610022    /*
     
    1013610172    }
    1013710173   
     10174#ifdef COIN_HAS_CLP_KEEP_STATUS
     10175    // need to check further that only zero duals dropped
     10176    if (clpSolver) // status may have got to -1
     10177      clpSolver->getModelPtr()->setProblemStatus(problemStatus);
     10178#endif
    1013810179    /*
    1013910180      Clean up and return.
     
    1395713998CbcModel::makeGlobalCut(const OsiColCut * cut)
    1395813999{
    13959   abort(); // need to think about top of tree
    1396014000  const double * lower;
    1396114001  const double * upper;
     
    1431914359            }
    1432014360        }
     14361#ifdef CHECK_KNOWN_SOLUTION
     14362        bool onOptimalPath = false;
     14363        if ((specialOptions_&1) != 0) {
     14364          const OsiRowCutDebugger *debugger = solver_->getRowCutDebugger() ;
     14365          if (debugger) {
     14366            onOptimalPath = true;
     14367            printf("On optimal path before resolve\n") ;
     14368          }
     14369        }
     14370#endif
    1432114371        clpSolver->resolve();
     14372#ifdef CHECK_KNOWN_SOLUTION
     14373        if ((specialOptions_&1) != 0&&onOptimalPath) {
     14374          const OsiRowCutDebugger *debugger = solver_->getRowCutDebugger() ;
     14375          if (debugger) {
     14376            printf("On optimal path after resolve\n") ;
     14377          } else {
     14378            solver_->writeMpsNative("badSolve.mps", NULL, NULL, 2);
     14379            printf("NOT on optimal path after resolve\n") ;
     14380          }
     14381        }
     14382#endif
    1432214383        if (!numberNodes_) {
    1432314384            double error = CoinMax(clpSimplex->largestDualError(),
  • releases/2.9.5/Cbc/src/CbcNode.cpp

    r2350 r2350  
    23412341                            }
    23422342                        } else if (columnLower[i] < columnUpper[i]) {
    2343                             if (fabs(solution[i] - saveSolution[i]) >
     2343                            double solutionValue = saveSolution[i];
     2344                            if (fabs(solution[i] - solutionValue) >
     2345                                integerTolerance &&
     2346                                (solutionValue - columnLower[i]) >
     2347                                integerTolerance &&
     2348                                (columnUpper[i] - solutionValue) >
    23442349                                integerTolerance) {
    23452350                                nFreeNon++;
     
    27132718                    if (20*numberInfeasible + 4*numberFixed < numberNodes) {
    27142719                        // Say never do
    2715                         if (numberBeforeTrust == 5)
     2720                        if (numberBeforeTrust == 10)
    27162721                          skipAll = -1;
    27172722                    }
  • releases/2.9.5/Cbc/src/CbcSolver.cpp

    r2350 r2350  
    54365436                                //if (model.getMIPStart().size())
    54375437                                // mipStart = model.getMIPStart();
    5438                                 if (mipStart.size() && !mipStartBefore.size())
     5438                                if (mipStart.size() && !mipStartBefore.size() && babModel_->getNumCols())
    54395439                                {
    54405440                                   std::vector< std::string > colNames;
     
    54425442                                   {
    54435443                                     std::vector< std::pair< std::string, double > > mipStart2;
     5444                                     int numberOriginalColumns = model_.solver()->getNumCols();
    54445445                                     for ( int i=0 ; (i<babModel_->solver()->getNumCols()) ; ++i ) {
    54455446                                       int iColumn = babModel_->originalColumns()[i];
    5446                                        if (iColumn>=0) {
     5447                                       if (iColumn>=0 && iColumn < numberOriginalColumns) {
    54475448                                         colNames.push_back( model_.solver()->getColName( iColumn ) );
    54485449                                         babModel_->solver()->setColName(i,model_.solver()->getColName(iColumn));
     
    72367237                                          osiclp->getModelPtr()->checkUnscaledSolution();
    72377238                                    }
     7239
    72387240                                    assert (saveSolver->isProvenOptimal());
    72397241#ifndef CBC_OTHER_SOLVER
     
    84568458                                fileName = directory + field;
    84578459                            }
    8458                             sprintf(generalPrint,"will open mipstart file %s.",fileName.c_str() );
    8459                             generalMessageHandler->message(CLP_GENERAL, generalMessages)
    8460                               << generalPrint
    8461                               << CoinMessageEol;
     8460                            sprintf(generalPrint,"opening mipstart file %s.",fileName.c_str() );
     8461                            generalMessageHandler->message(CLP_GENERAL, generalMessages) << generalPrint << CoinMessageEol;
    84628462                            double msObj;
    84638463                            readMIPStart( &model_, fileName.c_str(), mipStart, msObj );
    8464                             // copy to before preprocess if has .before.
    8465                             if (strstr(fileName.c_str(),".before.")) {
    8466                               mipStartBefore = mipStart;
    8467                               sprintf(generalPrint,"file %s will be used before preprocessing.",fileName.c_str() );
    8468                               generalMessageHandler->message(CLP_GENERAL, generalMessages)
    8469                                 << generalPrint
    8470                                 << CoinMessageEol;
    8471                             }
     8464                            // copy to before preprocess if has .before.
     8465                            if (strstr(fileName.c_str(),".before.")) {
     8466                                mipStartBefore = mipStart;
     8467                                sprintf(generalPrint,"file %s will be used before preprocessing.",fileName.c_str() );
     8468                                generalMessageHandler->message(CLP_GENERAL, generalMessages)
     8469                                    << generalPrint
     8470                                    << CoinMessageEol;
     8471                            }
    84728472                        } else {
    8473                           sprintf(generalPrint, "** Current model not valid");
    8474                           printGeneralMessage(model_,generalPrint);
     8473                            sprintf(generalPrint, "** Current model not valid");
     8474                            printGeneralMessage(model_,generalPrint);
    84758475                        }
    84768476                        break;
  • releases/2.9.5/Cbc/src/config_cbc_default.h

    r2350 r2350  
    66
    77/* Version number of project */
    8 #define CBC_VERSION "2.9.4"
     8#define CBC_VERSION "2.9.5"
    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 5
  • releases/2.9.5/README.md

    r2350 r2350  
    1 # CBC Version 2.9.3 README
     1# CBC Version 2.9.5 README
    22
    33Welcome to the README for the COIN Branch and Cut Solver (CBC). CBC is
     
    3636
    3737## CHANGELOG
     38
     39 * Release 2.9.5
     40
     41   * Bug fixes
     42
     43 * Release 2.9.4
     44
     45   * Small fixes for stability
     46   * Fixes for Doygen documentation generation
    3847
    3948 * Release 2.9.3
  • releases/2.9.5/configure

    r2350 r2350  
    22# From configure.ac 0.9.
    33# Guess values for system-dependent variables and create Makefiles.
    4 # Generated by GNU Autoconf 2.59 for Cbc 2.9.4.
     4# Generated by GNU Autoconf 2.59 for Cbc 2.9.5.
    55#
    66# Report bugs to <cbc@lists.coin-or.org>.
     
    431431PACKAGE_NAME='Cbc'
    432432PACKAGE_TARNAME='cbc'
    433 PACKAGE_VERSION='2.9.4'
    434 PACKAGE_STRING='Cbc 2.9.4'
     433PACKAGE_VERSION='2.9.5'
     434PACKAGE_STRING='Cbc 2.9.5'
    435435PACKAGE_BUGREPORT='cbc@lists.coin-or.org'
    436436
     
    10391039  # This message is too long to be a string in the A/UX 3.1 sh.
    10401040  cat <<_ACEOF
    1041 \`configure' configures Cbc 2.9.4 to adapt to many kinds of systems.
     1041\`configure' configures Cbc 2.9.5 to adapt to many kinds of systems.
    10421042
    10431043Usage: $0 [OPTION]... [VAR=VALUE]...
     
    11051105if test -n "$ac_init_help"; then
    11061106  case $ac_init_help in
    1107      short | recursive ) echo "Configuration of Cbc 2.9.4:";;
     1107     short | recursive ) echo "Configuration of Cbc 2.9.5:";;
    11081108   esac
    11091109  cat <<\_ACEOF
     
    13311331if $ac_init_version; then
    13321332  cat <<\_ACEOF
    1333 Cbc configure 2.9.4
     1333Cbc configure 2.9.5
    13341334generated by GNU Autoconf 2.59
    13351335
     
    13511351running configure, to aid debugging if configure makes a mistake.
    13521352
    1353 It was created by Cbc $as_me 2.9.4, which was
     1353It was created by Cbc $as_me 2.9.5, which was
    13541354generated by GNU Autoconf 2.59.  Invocation command line was
    13551355
     
    51175117# Define the identity of the package.
    51185118 PACKAGE='cbc'
    5119  VERSION='2.9.4'
     5119 VERSION='2.9.5'
    51205120
    51215121
     
    2352623526cat >&5 <<_CSEOF
    2352723527
    23528 This file was extended by Cbc $as_me 2.9.4, which was
     23528This file was extended by Cbc $as_me 2.9.5, which was
    2352923529generated by GNU Autoconf 2.59.  Invocation command line was
    2353023530
     
    2358423584cat >>$CONFIG_STATUS <<_ACEOF
    2358523585ac_cs_version="\\
    23586 Cbc config.status 2.9.4
     23586Cbc config.status 2.9.5
    2358723587configured by $0, generated by GNU Autoconf 2.59,
    2358823588  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  • releases/2.9.5/configure.ac

    r2350 r2350  
    1313AC_PREREQ(2.59)
    1414
    15 AC_INIT([Cbc],[2.9.4],[cbc@lists.coin-or.org])
     15AC_INIT([Cbc],[2.9.5],[cbc@lists.coin-or.org])
    1616
    1717AC_COPYRIGHT([
Note: See TracChangeset for help on using the changeset viewer.