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


Ignore:
Location:
releases/2.9.4
Files:
22 added
16 edited

Legend:

Unmodified
Added
Removed
  • releases/2.9.4/Cbc

  • releases/2.9.4/Cbc/README

    r2343 r2343  
    1 # CBC Version 2.9.5 README
     1# CBC Version 2.9.3 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
    4738
    4839 * Release 2.9.3
  • releases/2.9.4/Cbc/configure

    r2343 r2343  
    11#! /bin/sh
    22# Guess values for system-dependent variables and create Makefiles.
    3 # Generated by GNU Autoconf 2.59 for Cbc 2.9.5.
     3# Generated by GNU Autoconf 2.59 for Cbc 2.9.4.
    44#
    55# Report bugs to <cbc@lists.coin-or.org>.
     
    430430PACKAGE_NAME='Cbc'
    431431PACKAGE_TARNAME='cbc'
    432 PACKAGE_VERSION='2.9.5'
    433 PACKAGE_STRING='Cbc 2.9.5'
     432PACKAGE_VERSION='2.9.4'
     433PACKAGE_STRING='Cbc 2.9.4'
    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.5 to adapt to many kinds of systems.
     1008\`configure' configures Cbc 2.9.4 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.5:";;
     1074     short | recursive ) echo "Configuration of Cbc 2.9.4:";;
    10751075   esac
    10761076  cat <<\_ACEOF
     
    13091309if $ac_init_version; then
    13101310  cat <<\_ACEOF
    1311 Cbc configure 2.9.5
     1311Cbc configure 2.9.4
    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.5, which was
     1331It was created by Cbc $as_me 2.9.4, 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:5:9
     1857 coin_libversion=12:4:9
    18581858
    18591859
     
    45774577# Define the identity of the package.
    45784578 PACKAGE='cbc'
    4579  VERSION='2.9.5'
     4579 VERSION='2.9.4'
    45804580
    45814581
     
    3123731237cat >&5 <<_CSEOF
    3123831238
    31239 This file was extended by Cbc $as_me 2.9.5, which was
     31239This file was extended by Cbc $as_me 2.9.4, 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.5
     31302Cbc config.status 2.9.4
    3130331303configured by $0, generated by GNU Autoconf 2.59,
    3130431304  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  • releases/2.9.4/Cbc/configure.ac

    r2343 r2343  
    1313AC_PREREQ(2.59)
    1414
    15 AC_INIT([Cbc],[2.9.5],[cbc@lists.coin-or.org])
     15AC_INIT([Cbc],[2.9.4],[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:5:9)
     44AC_COIN_PROJECTDIR_INIT(Cbc,12:4:9)
    4545
    4646# Check if user wants to produce debugging code
  • releases/2.9.4/Cbc/src

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

    r2343 r2343  
    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))
    723679                      abort();
    724680                  }
  • releases/2.9.4/Cbc/src/CbcHeuristicDive.cpp

    r2343 r2343  
    7474    decayFactor_ = 1.0;
    7575    smallObjective_ = 1.0e-10;
     76    setPriorities();
    7677}
    7778
     
    233234  if (gotPriorities || priority1>priority2) {
    234235    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       assert (nInteger<numberIntegers);
    244       priority_[nInteger].priority=static_cast<unsigned int>(level);
     243      priority_[i].priority=static_cast<unsigned int>(level);
    245244      int direction=0;
    246245      if (thisOne->preferredWay()<0)
     
    249248        direction=1|1;
    250249        // at present don't try other way is not used
    251       priority_[nInteger++].direction=static_cast<unsigned char>(direction);
    252     }
    253     assert (nInteger==numberIntegers);
     250      priority_[i].direction=static_cast<unsigned char>(direction);
     251    }
    254252  }
    255253}
  • releases/2.9.4/Cbc/src/CbcHeuristicFPump.cpp

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

    r2343 r2343  
    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()) << printLine << CoinMessageEol;
     57            model->messageHandler()->message(CBC_GENERAL, model->messages())
     58              << printLine << CoinMessageEol;
    5859            continue;
    5960         }
     
    6162         {
    6263            sprintf( printLine, "Reading: %s, line %d - Third column in mipstart file should be numeric, ignoring.", fileName, nLine  );
    63             model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
     64            model->messageHandler()->message(CBC_GENERAL, model->messages())
     65              << printLine << CoinMessageEol;
    6466            continue;
    6567         }
    6668
     69         //int idx = atoi( col[0] );
    6770         char *name = col[1];
    6871         double value = atof( col[2] );
     72         //double obj = 0.0;
     73//         if (nread >= 4)
     74//            obj = atof( col[3] );
    6975
    7076         colValues.push_back( pair<string, double>(string(name),value) );
     
    7379
    7480   if (colValues.size()) {
    75       sprintf( printLine,"MIPStart values read for %d variables.", static_cast<int>(colValues.size()) );
    76           model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
     81      sprintf( printLine,"mipstart values read for %d variables.", (int)colValues.size());
     82      model->messageHandler()->message(CBC_GENERAL, model->messages())
     83        << printLine << CoinMessageEol;
    7784      if (colValues.size()<model->getNumCols()) {
    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 {
     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   {
    99107      sprintf( printLine, "No mipstart solution read from %s", fileName );
    100       model->messageHandler()->message(CBC_GENERAL, model->messages()) << printLine << CoinMessageEol;
     108      model->messageHandler()->message(CBC_GENERAL, model->messages())
     109        << printLine << CoinMessageEol;
    101110      return 1;
    102111   }
     
    111120                             double *sol, double &obj )
    112121{
    113    if (!model->getNumCols())
    114        return 0;
    115    
    116122   int status = 0;
    117123   double compObj = COIN_DBL_MAX;
     
    119125   OsiSolverInterface *lp = model->solver()->clone();
    120126   map< string, int > colIdx;
    121    assert( (static_cast<int>(colNames.size())) == lp->getNumCols() );
     127   assert( ((int)colNames.size()) == lp->getNumCols() );
    122128   /* for fast search of column names */
    123    for ( int i=0 ; (i<static_cast<int>(colNames.size())) ; ++i )
     129   for ( int i=0 ; (i<(int)colNames.size()) ; ++i )
    124130      colIdx[colNames[i]] = i;
    125131
     
    129135   char colNotFound[256] = "";
    130136   int nContinuousFixed = 0;
    131 
    132137#ifndef JUST_FIX_INTEGER
    133138#define JUST_FIX_INTEGER 0
    134139#endif
    135 
    136140#if JUST_FIX_INTEGER > 1
    137141   // all not mentioned are at zero
    138142   for ( int i=0 ; (i<lp->getNumCols()) ; ++i )
    139    {
     143     {
    140144       if (lp->isInteger(i))
    141145         lp->setColBounds( i, 0.0, 0.0 );
    142    }
    143 #endif
    144    for ( int i=0 ; (i<static_cast<int>(colValues.size())) ; ++i )
     146     }
     147#endif
     148   for ( int i=0 ; (i<(int)colValues.size()) ; ++i )
    145149   {
    146150      map< string, int >::const_iterator mIt = colIdx.find( colValues[i].first );
     
    157161#if JUST_FIX_INTEGER
    158162         if (!lp->isInteger(idx))
    159             continue;
     163           continue;
    160164#endif
    161165         if (v<1e-8)
     
    163167         if (lp->isInteger(idx))  // just to avoid small
    164168            v = floor( v+0.5 );   // fractional garbage
    165          else
    166             nContinuousFixed++;
    167 
     169         else
     170           nContinuousFixed++;
    168171         lp->setColBounds( idx, v, v );
    169172         ++fixed;
     
    174177   {
    175178      model->messageHandler()->message(CBC_GENERAL, model->messages())
    176         << "Warning: MIPstart solution is not valid, column names do not match, ignoring it."
    177         << CoinMessageEol;
     179        << "Warning: MIPstart solution is not valid, ignoring it."
     180        << CoinMessageEol;
    178181      goto TERMINATE;
    179182   }
    180183
    181    if ( notFound >= ( (static_cast<double>(colNames.size())) * 0.5 ) ) {
     184   if ( notFound >= ( ((double)colNames.size()) * 0.5 ) ) {
    182185      sprintf( printLine, "Warning: %d column names were not found (e.g. %s) while filling solution.", notFound, colNotFound );
    183         model->messageHandler()->message(CBC_GENERAL, model->messages())
    184         << printLine << CoinMessageEol;
     186      model->messageHandler()->message(CBC_GENERAL, model->messages())
     187        << printLine << CoinMessageEol;
    185188   }
    186189#if JUST_FIX_INTEGER
     
    189192   lp->setDblParam(OsiDualObjectiveLimit,COIN_DBL_MAX);
    190193   lp->initialSolve();
    191 
    192    if ( (lp->isProvenPrimalInfeasible()) || (lp->isProvenDualInfeasible()) )
    193    {
     194   //lp->writeMps("fixed","mps");
     195   if (!lp->isProvenOptimal())
     196   {
     197      model->messageHandler()->message(CBC_GENERAL, model->messages())
     198        << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
    194199      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 
    229    if (!lp->isProvenOptimal())
    230    {
    231       model->messageHandler()->message(CBC_GENERAL, model->messages())
    232            << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
    233       status = 1;
    234       goto TERMINATE;
    235    }
    236    
     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
    237222   /* some additional effort is needed to provide an integer solution */
    238223   if ( lp->getFractionalIndices().size() > 0 )
    239224   {
    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()) );
     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() );
    241226      model->messageHandler()->message(CBC_GENERAL, model->messages())
    242227        << printLine << CoinMessageEol;
     
    261246#else
    262247      CbcModel babModel( *lp );
    263       lp->writeLp("lessFix");
    264       babModel.setLogLevel( 2 );
    265       babModel.setMaximumNodes( 1000 );
     248      babModel.setLogLevel( 0 );
     249      babModel.setMaximumNodes( 500 );
    266250      babModel.setMaximumSeconds( 60 );
    267251      babModel.branchAndBound();
     
    279263      else
    280264      {
    281           model->messageHandler()->message(CBC_GENERAL, model->messages())
    282               << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
     265        model->messageHandler()->message(CBC_GENERAL, model->messages())
     266           << "Warning: mipstart values could not be used to build a solution." << CoinMessageEol;
    283267         status = 1;
    284268         goto TERMINATE;
     
    294278   if ( foundIntegerSol )
    295279   {
    296       sprintf( printLine,"MIPStart provided solution with cost %g", compObj);
    297       model->messageHandler()->message(CBC_GENERAL, model->messages())
    298            << printLine << CoinMessageEol;
     280      sprintf( printLine,"mipstart provided solution with cost %g", compObj);
     281      model->messageHandler()->message(CBC_GENERAL, model->messages())
     282        << printLine << CoinMessageEol;
    299283#if 0
    300284      {
  • releases/2.9.4/Cbc/src/CbcModel.cpp

    r2343 r2343  
    70927092    if (name)
    70937093        heuristic_[where]->setHeuristicName(name) ;
    7094 #ifndef SAME_HEURISTIC_SEED
    70957094    heuristic_[where]->setSeed(987654321 + where);
    7096 #else
    7097     heuristic_[where]->setSeed(987654321);
    7098 #endif
    70997095    numberHeuristics_++ ;
    71007096}
     
    73177313            cutsToDrop = new int[currentNumberCuts] ;
    73187314            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);
    73237315            for (i = 0; i < currentNumberCuts; i++) {
    73247316                CoinWarmStartBasis::Status status =
     
    78607852        feasible = false; // pretend infeasible
    78617853    }
    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
    78697854    /*
    78707855      NEW_UPDATE_OBJECT is defined to 0 when unthreaded (CBC_THREAD undefined), 2
     
    85558540        int numberToAdd = theseCuts.sizeRowCuts() ;
    85568541        numberNewCuts_ = lastNumberCuts + numberToAdd ;
    8557         // resize whichGenerator
    8558         resizeWhichGenerator(lastNumberCuts,numberNewCuts_);
    85598542        /*
    85608543          Now actually add the row cuts and reoptimise.
     
    85818564            if (numberToAdd > 0) {
    85828565                int i ;
    8583                 int * whichGenerator = whichGenerator_ + lastNumberCuts;
     8566                int * whichGenerator = whichGenerator_ -
     8567                  numberRowsAtContinuous_+solver_->getNumRows();
    85848568                // Faster to add all at once
    85858569                addCuts = new const OsiRowCut * [numberToAdd] ;
     
    92409224        }
    92419225        // 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
    92489226        if (!numberNodes_) {
    92499227          for (i = 0; i < numberCutGenerators_; i++)
     
    96479625    }
    96489626#endif
    9649 #ifdef CHECK_KNOWN_SOLUTION
    9650     if (onOptimalPath && (solver_->isDualObjectiveLimitReached()||
    9651                           !feasible)) {
    9652       printf("help\n");
    9653     }
    9654 #endif
    96559627#ifdef CBC_DEBUG
    96569628    if (onOptimalPath && !solver_->isDualObjectiveLimitReached())
     
    100119983    const CoinWarmStartBasis* ws ;
    100129984    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
    100219985    bool needPurge = true ;
    100229986    /*
     
    1017210136    }
    1017310137   
    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
    1017910138    /*
    1018010139      Clean up and return.
     
    1399813957CbcModel::makeGlobalCut(const OsiColCut * cut)
    1399913958{
     13959  abort(); // need to think about top of tree
    1400013960  const double * lower;
    1400113961  const double * upper;
     
    1435914319            }
    1436014320        }
    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
    1437114321        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
    1438314322        if (!numberNodes_) {
    1438414323            double error = CoinMax(clpSimplex->largestDualError(),
  • releases/2.9.4/Cbc/src/CbcNode.cpp

    r2343 r2343  
    23412341                            }
    23422342                        } else if (columnLower[i] < columnUpper[i]) {
    2343                             double solutionValue = saveSolution[i];
    2344                             if (fabs(solution[i] - solutionValue) >
    2345                                 integerTolerance &&
    2346                                 (solutionValue - columnLower[i]) >
    2347                                 integerTolerance &&
    2348                                 (columnUpper[i] - solutionValue) >
     2343                            if (fabs(solution[i] - saveSolution[i]) >
    23492344                                integerTolerance) {
    23502345                                nFreeNon++;
     
    27182713                    if (20*numberInfeasible + 4*numberFixed < numberNodes) {
    27192714                        // Say never do
    2720                         if (numberBeforeTrust == 10)
     2715                        if (numberBeforeTrust == 5)
    27212716                          skipAll = -1;
    27222717                    }
  • releases/2.9.4/Cbc/src/CbcSolver.cpp

    r2343 r2343  
    54365436                                //if (model.getMIPStart().size())
    54375437                                // mipStart = model.getMIPStart();
    5438                                 if (mipStart.size() && !mipStartBefore.size() && babModel_->getNumCols())
     5438                                if (mipStart.size() && !mipStartBefore.size())
    54395439                                {
    54405440                                   std::vector< std::string > colNames;
     
    54425442                                   {
    54435443                                     std::vector< std::pair< std::string, double > > mipStart2;
    5444                                      int numberOriginalColumns = model_.solver()->getNumCols();
    54455444                                     for ( int i=0 ; (i<babModel_->solver()->getNumCols()) ; ++i ) {
    54465445                                       int iColumn = babModel_->originalColumns()[i];
    5447                                        if (iColumn>=0 && iColumn < numberOriginalColumns) {
     5446                                       if (iColumn>=0) {
    54485447                                         colNames.push_back( model_.solver()->getColName( iColumn ) );
    54495448                                         babModel_->solver()->setColName(i,model_.solver()->getColName(iColumn));
     
    72377236                                          osiclp->getModelPtr()->checkUnscaledSolution();
    72387237                                    }
    7239 
    72407238                                    assert (saveSolver->isProvenOptimal());
    72417239#ifndef CBC_OTHER_SOLVER
     
    84588456                                fileName = directory + field;
    84598457                            }
    8460                             sprintf(generalPrint,"opening mipstart file %s.",fileName.c_str() );
    8461                             generalMessageHandler->message(CLP_GENERAL, generalMessages) << generalPrint << CoinMessageEol;
     8458                            sprintf(generalPrint,"will open mipstart file %s.",fileName.c_str() );
     8459                            generalMessageHandler->message(CLP_GENERAL, generalMessages)
     8460                              << generalPrint
     8461                              << 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.4/Cbc/src/config_cbc_default.h

    r2343 r2343  
    66
    77/* Version number of project */
    8 #define CBC_VERSION "2.9.5"
     8#define CBC_VERSION "2.9.4"
    99
    1010/* Major Version number of project */
     
    1515
    1616/* Release Version number of project */
    17 #define CBC_VERSION_RELEASE 5
     17#define CBC_VERSION_RELEASE 4
  • releases/2.9.4/README.md

    r2343 r2343  
    1 # CBC Version 2.9.5 README
     1# CBC Version 2.9.3 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
    4738
    4839 * Release 2.9.3
  • releases/2.9.4/configure

    r2343 r2343  
    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.5.
     4# Generated by GNU Autoconf 2.59 for Cbc 2.9.4.
    55#
    66# Report bugs to <cbc@lists.coin-or.org>.
     
    431431PACKAGE_NAME='Cbc'
    432432PACKAGE_TARNAME='cbc'
    433 PACKAGE_VERSION='2.9.5'
    434 PACKAGE_STRING='Cbc 2.9.5'
     433PACKAGE_VERSION='2.9.4'
     434PACKAGE_STRING='Cbc 2.9.4'
    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.5 to adapt to many kinds of systems.
     1041\`configure' configures Cbc 2.9.4 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.5:";;
     1107     short | recursive ) echo "Configuration of Cbc 2.9.4:";;
    11081108   esac
    11091109  cat <<\_ACEOF
     
    13311331if $ac_init_version; then
    13321332  cat <<\_ACEOF
    1333 Cbc configure 2.9.5
     1333Cbc configure 2.9.4
    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.5, which was
     1353It was created by Cbc $as_me 2.9.4, 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.5'
     5119 VERSION='2.9.4'
    51205120
    51215121
     
    2352623526cat >&5 <<_CSEOF
    2352723527
    23528 This file was extended by Cbc $as_me 2.9.5, which was
     23528This file was extended by Cbc $as_me 2.9.4, 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.5
     23586Cbc config.status 2.9.4
    2358723587configured by $0, generated by GNU Autoconf 2.59,
    2358823588  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
  • releases/2.9.4/configure.ac

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