Changeset 2534


Ignore:
Timestamp:
Mar 15, 2019 12:27:39 PM (7 months ago)
Author:
stefan
Message:

sync with trunk

Location:
stable/2.10
Files:
1 deleted
18 edited
1 copied

Legend:

Unmodified
Added
Removed
  • stable/2.10

  • stable/2.10/Cbc

  • stable/2.10/Cbc/INSTALL

    r1899 r2534  
    11This is a project directory. For information on how to install the
    2 package this project was downloaded with see the INSTALL file in the
    3 root of the package (the parent directory of this directory).
     2package this project was downloaded with see the INSTALL and README.md
     3files in the root of the package (the parent directory of this directory).
  • stable/2.10/Cbc/README

    r2375 r2534  
    1 # CBC Version 2.9.9 README
    2 
    3 Welcome to the README for the COIN Branch and Cut Solver (CBC). CBC is
    4 distributed under the Eclipse Public License and is freely redistributable.
    5 All source code and documentation is Copyright IBM and others. This README may
    6 be redistributed freely.
    7 
    8 ## DOWNLOAD
    9 
    10 Binaries for most platforms are available for download from [Bintray](https://bintray.com/coin-or/download/Cbc)
    11 
    12 ## DOCUMENTATION
    13 
    14 For a quick start guide, please see the INSTALL file in this distribution. A
    15 (somehwat outdated) user's manual is available here:
    16 
    17 http://www.coin-or.org/Cbc
    18 
    19 More up-to-date automatically generated documentation of the source code can
    20 be found here:
    21 
    22 http://www.coin-or.org/Doxygen/Cbc/
    23 
    24 Further information can be found here:
    25 
    26 http://projects.coin-or.org/Cbc
    27 
    28 ## SUPPORT
    29 
    30 ### List Serve
    31 
    32 CBC users should use the Cbc mailing list. To subscribe, go to
    33 http://list.coin-or.org/mailman/listinfo/cbc
    34 
    35 ### Bug Reports
    36 
    37 Bug reports should be reported on the CBC development web site at
    38 
    39 https://projects.coin-or.org/Cbc/newticket
    40 
    41 ## CHANGELOG
    42 
    43  * Release 2.9.9
    44 
    45    * Fixes for SOS2
    46    * Updates to mipstart
    47    * Switching to new build system
    48    * Updates for CI
    49 
    50  * Release 2.9.8
    51 
    52    * Update to most current releases of dependencies
    53    * Small bug fixes
    54    * Add support for automatic build and test with Travis and Appveyor
    55 
    56 * Release 2.9.7
    57 
    58    * Small bug fixes
    59    * Option to switch to line buffered output
    60 
    61  * Release 2.9.6
    62 
    63    * Small bug fixes
    64 
    65  * Release 2.9.5
    66 
    67    * Small bug fixes
    68 
    69  * Release 2.9.4
    70 
    71    * Small fixes for stability
    72    * Fixes for Doygen documentation generation
    73 
    74  * Release 2.9.3
    75 
    76    * Minor bug fixes
    77 
    78  * Release 2.9.2
    79 
    80    * Fix for proper installation with ```DESTDIR```
    81 
    82  * Release 2.9.1
    83 
    84    * Fix for dependency linking
    85    * Minor bug fixes
    86 
    87  * Release 2.9.0
    88 
    89    * Introduced specialized branching methods for dealing with "big Ms".
    90    * Introduced new methods for dealing with symmetry (requires installation of [nauty](http://pallini.di.uniroma1.it/))
    91    * Introduction of conflict cuts (off by default, turn on with `-constraint conflict`)
    92 
    93  * Release 2.8.13
    94 
    95    * Improved message handling
    96    * Miscellaneous bug fixes.
    97 
    98  * Release 2.8.12
    99    * Update for dependencies.
    100 
    101  * Release 5.8.11
    102 
    103    * Major overhaul of C interface
    104    * Fixes to SOS
    105    * Miscellaneous bug fixes
    106 
    107  * Release 2.8.10
    108 
    109    * More changes related to thread safety.
    110    * Fix bug in build system with Visual Studio compiler.
    111    * Miscellaneous bug fixes.
    112 
    113  * Release 2.8.9
    114 
    115    * Attempt to make Cbc thread safe.
    116    * Add parallel examples.
    117    * Add CbcSolverUsefulInfo.
    118    * Bug fixes.
    119 
    120  * Release 2.8.8
    121 
    122    * Added example to show how to use Cbc with installed libraries in MSVC++
    123    * Fixed inconsistency in addition of libCbcSolver to dependencies in
    124      {{{cbc_addlibs.txt}}}.
    125 
    126  * Release 2.8.7
    127 
    128    * Changed so that Doxygen builds LaTex
    129    * Fixes for build system
    130 
    131  * Release 2.8.6
    132 
    133    * Added option to explicitly link dependencies to comply with packaging
    134      requirements on Fedora and Debian, as well as allow building of MinGW
    135      DLLs.
    136 
    137  * Release 2.8.5
    138 
    139    * Minor fixes to build system
    140 
    141  * Release 2.8.4
    142    * Small bug fixes
    143    * Upgrades to build system
    144 
    145  * Release 2.8.3:
    146 
    147    * Fix for handling SOS.
    148 
    149  * Release 2.8.2:
    150 
    151    * Fixed recognition of Glpk source in main configure.
    152    * Minor bug fixes in CoinUtils, Clp, and Cbc.
    153 
    154  * Release 2.8.1:
    155 
    156    * Minor bug fixes
    157 
    158  * Release 2.8.0:
    159 
    160    * Introduced new secondaryStatus 8 to indicate that solving stopped due to
    161      an iteration limit.
    162    * Solution pool is now accessible via the command line and the CbcMain*
    163      interface.
    164    * New mipstart option to read an initial feasible solution from a file.
    165      Only values for discrete variables need to be provided.
    166 
    167    * Added Proximity Search heuristic by Fischetti and Monaci (off by
    168      default): The simplest way to switch it on using stand-alone version is
    169      ```-proximity on```.
    170 
    171      Proximity Search is the new "No-Neighborhood Search" 0-1 MIP refinement
    172      heuristic recently proposed by Fischetti and Monaci (2012). The idea is
    173      to define a sub-MIP without additional constraints but with a modified
    174      objective function intended to attract the search in the proximity of the
    175      incumbent. The approach works well for 0-1 MIPs whose solution landscape
    176      is not too irregular (meaning the there is reasonable probability of
    177      finding an improved solution by flipping a small number of binary
    178      variables), in particular when it is applied to the first heuristic
    179      solutions found at the root node.
    180    
    181    * An implementation of Zero-Half-Cuts by Alberto Caprara is now available.
    182      By default, these cuts are off. To use add to your command line
    183      -zerohalfCuts root (or other options) or just -zero. So far, they may
    184      help only on a small subset of problems and may need some tuning.
    185 
    186      The implementation of these cuts is described in G. Andreello, A.
    187      Caprara, and M. Fischetti "Embedding Cuts in a Branch and Cut Framework:
    188      a Computational Study with {0,1/2}-Cuts" INFORMS Journal on Computing
    189      19(2), 229-238, 2007 http://dx.doi.org/10.1287/ijoc.1050.0162
    190 
    191    * An alternative implementation of a reduce and split cut generator by
    192      Giacomo Nannicini is now available. By default, these cuts are off. To
    193      use add to your command line -reduce2AndSplitCuts root (or other
    194      options).
    195 
    196      The implementation of these cuts is described in G. Cornuejols and G.
    197      Nannicini "Practical strategies for generating rank-1 split cuts in
    198      mixed-integer linear programming" Mathematical Programming Computation
    199      3(4), 281-318, 2011 http://dx.doi.org/10.1007/s12532-011-0028-6
    200 
    201    * An alternative robust implementation of a Gomory cut generator by Giacomo
    202      Nannicini is now available. By default, these cuts are off. To use add to
    203      your command line -GMI root (or other options).
    204 
    205      The implementation of these cuts is described in G. Cornuejols, F.
    206      Margot, and G. Nannicini "On the safety of Gomory cut generators"
    207      http://faculty.sutd.edu.sg/~nannicini/index.php?page=publications
    208 
    209    * To encourage the use of some of the more exotic/expensive cut generators
    210      a parameter -slowcutpasses has been added. The idea is that the code does
    211      these cuts just a few times - less than the more usual cuts. The default
    212      is 10. The cut generators identified by "may be slow" at present are just
    213      Lift and project and ReduceAndSplit (both versions).
    214    
    215    * Allow initialization of random seed by user. Pseudo-random numbers are
    216      used in Cbc and Clp. In Clp they are used to break ties in degenerate
    217      problems, while in Cbc heuristics such as the Feasibility Pump use them
    218      to decide whether to round up or down. So if a different pseudo-random
    219      seed is given to Clp then you may get a different continuous optimum and
    220      so different cuts and heuristic solutions. This can be switched on by
    221      setting randomSeed for Clp and/or randomCbcSeed for Cbc. The special
    222      value of 0 tells code to use time of day for initial seed.
    223    
    224    * Building on this idea, Andrea Lodi, Matteo Fischetti, Michele Monaci,
    225      Domenico Salvagnin, Yuji Shinano, and Andrea Tramontani suggest that this
    226      idea be improved by running at the root node with multiple copies of
    227      solver, each with its own different seed and then passing in the
    228      solutions and cuts so that the main solver has a richer set of solutions
    229      and possibly stronger cuts. This is switched on by setting
    230      -multipleRootPasses. These can also be done in parallel.
    231  
    232    * Few changes to presolve for special variables and badly scaled problems
    233      (in CoinUtils).
    234 
    235    * New option -extraVariables <number> which switches on a trivial
    236     re-formulation that introduces extra integer variables to group together
    237     variables with same cost.
    238 
    239    * For some problems, cut generators and general branching work better if
    240      the problem would be infeasible if the cost is too high. If the new
    241      option -constraintFromCutoff is set, the objective function is added as a
    242      constraint which rhs is set to the current cutoff value (objective value
    243      of best known solution).
    244 
    245  * Release 2.7.8:
    246 
    247    * Change message when LP simplex iteration limit is hit from "Exiting on
    248      maximum nodes" to "Exiting on maximum number of iterations"
    249    * Fix for using overlapping SOS.
    250    * Fixes in buildsystem.
    251 
    252  * Release 2.7.7:
    253 
    254    * Fix to report interruption on user event if SIGINT is received by
    255      CbcSolver. model->status() should now be 5 if this event happened. Added
    256      method CbcModel::sayEventHappened() to make cbc stop due to an 'user
    257      event'.
    258 
    259    * Other minor fixes.
    260 
    261  * Release 2.7.6:
    262 
    263    * Fixes to build system.
    264 
    265    * Other minor fixes.
    266 
    267  * Release 2.7.5:
    268 
    269    * Fixes to get AMPL interface working again.
    270 
    271    * More fixes to MSVC++ files.
    272 
    273  * Release 2.7.4:
    274 
    275    * Minor bugfixes.
    276 
    277  * Release 2.7.3:
    278 
    279    * Minor bugfixes.
    280 
    281    * Fixes to MSVC++ files.
    282 
    283  * Release 2.7.2:
    284 
    285    * Allow row/column names for GMPL models.
    286 
    287    * Added CbcModel::haveMultiThreadSupport() to indicate whether Cbc library
    288      has been compiled with multithread support.
    289 
    290    * Added CbcModel::waitingForMiniBranchAndBound() to indicate whether
    291      sub-MIP heuristic is currently running.
    292 
    293    * Cbc shell should work with readline if configured with
    294      ```--enable-gnu-packages```.
    295 
    296    * Support for compressed input files (.gz, .bz2) is now enabled by default.
    297 
    298    * Fix problems with relative gap tolerance > 100% and further bugs.
    299 
    300    * Fixes for MSVC++ Version 9 files.
    301 
    302    * Minor fixes in buildsystem; update to BuildTools 0.7.1.
    303 
    304  * Release 2.7.1:
    305 
    306    * Fixes to MSVC++ files
    307 
    308  * Release 2.7.0:
    309 
    310    * License has been changed to the EPL.
    311 
    312    * Support for MSVC++ version 10 added.
    313 
    314    * Support for BuildTools version 0.7 to incorporate recent enhancements,
    315      including proper library versioning in Linux, prohibiting installation of
    316      private headers, etc.
    317 
    318    * Updated externals to new stable versions of dependent projects.
    319 
    320    * Improvements to heuristics.
    321 
    322    * New options for cut generation.
    323 
    324    * Improved reporting of results.
    325 
    326    * Improvements to documentation.
    327 
    328    * Minor bug fixes.
    329 
    330 
     1This is the Cbc project. For information on the purpose of
     2this project please visit https://github.com/coin-or/Cbc
  • stable/2.10/Cbc/examples/driver3.cpp

    r2498 r2534  
    1111#include "OsiClpSolverInterface.hpp"
    1212#include "CbcBranchDynamic.hpp"
     13#include "CbcSolver.hpp"
    1314
    1415#include "CoinTime.hpp"
     
    2728
    2829************************************************************************/
     30
     31static int dummyCallBack(CbcModel * /*model*/, int /*whereFrom*/)
     32{
     33  return 0;
     34}
    2935
    3036int main(int argc, const char *argv[])
     
    106112  */
    107113  if (argc > 2) {
    108     CbcMain1(argc - 1, argv + 1, model, cbcData);
     114    CbcMain1(argc - 1, argv + 1, model, dummyCallBack, cbcData);
    109115  } else {
    110116    const char *argv2[] = { "driver3", "-solve", "-quit" };
    111     CbcMain1(3, argv2, model, cbcData);
     117    CbcMain1(3, argv2, model, dummyCallBack, cbcData);
    112118  }
    113119
  • stable/2.10/Cbc/src

  • stable/2.10/Cbc/src/CbcBranchCut.cpp

    r2467 r2534  
    194194    way_ = -1; // Swap direction
    195195  }
    196   printf("CUT %s ", (way_ == -1) ? "up" : "down");
    197   cut->print();
     196  // printf("CUT %s ", (way_ == -1) ? "up" : "down");
     197  // cut->print();
    198198  // See if cut just fixes variables
    199199  double lb = cut->lb();
  • stable/2.10/Cbc/src/CbcFullNodeInfo.cpp

    r2467 r2534  
    165165int CbcFullNodeInfo::applyBounds(int iColumn, double &lower, double &upper, int force)
    166166{
    167   if ((force && 1) == 0) {
     167  if ((force & 1) == 0) {
    168168    if (lower > lower_[iColumn])
    169169      COIN_DETAIL_PRINT(printf("%d odd lower going from %g to %g\n", iColumn, lower, lower_[iColumn]));
     
    172172    lower_[iColumn] = lower;
    173173  }
    174   if ((force && 2) == 0) {
     174  if ((force & 2) == 0) {
    175175    if (upper < upper_[iColumn])
    176176      COIN_DETAIL_PRINT(printf("%d odd upper going from %g to %g\n", iColumn, upper, upper_[iColumn]));
  • stable/2.10/Cbc/src/CbcLinked.cpp

    r2467 r2534  
    142142    }
    143143    int updated = updateCoefficients(modelPtr_, temp);
    144     if (updated || 1) {
     144    //if (updated || 1) {
    145145      temp->removeGaps(1.0e-14);
    146146      ClpMatrixBase *save = modelPtr_->clpMatrix();
     
    158158      }
    159159      modelPtr_->replaceMatrix(temp, true);
    160     } else {
    161       delete temp;
    162     }
     160    //} else {
     161    //  delete temp;
     162    //}
    163163  }
    164164  if (0) {
     
    542542          }
    543543        }
    544         if (numberContinuous && 0) {
     544#if 0
     545        if (numberContinuous) {
    545546          // iterate to get solution and fathom node
    546547          int numberColumns2 = coinModel_.numberColumns();
     
    644645          //writeMps("zz");
    645646        }
     647#endif
    646648      }
    647649      // ???  - try
  • stable/2.10/Cbc/src/CbcModel.cpp

    r2492 r2534  
    26302630    int otherOptions = (multipleRootTries_ / 10000) % 100;
    26312631    rootModels = new CbcModel *[numberModels];
    2632     unsigned int newSeed = randomSeed_;
     2632    int newSeed = randomSeed_;
    26332633    if (newSeed == 0) {
    26342634      double time = fabs(CoinGetTimeOfDay());
  • stable/2.10/Cbc/src/CbcModel.hpp

    r2476 r2534  
    26912691  //@}
    26922692
    2693   void setMIPStart(const std::vector< std::pair< std::string, double > > &mips)
    2694   {
    2695     this->mipStart_ = mips;
     2693  void setMIPStart(const std::vector< std::pair< std::string, double > > &mipstart)
     2694  {
     2695    this->mipStart_ = mipstart;
    26962696  }
    26972697
  • stable/2.10/Cbc/src/CbcSolver.cpp

    r2497 r2534  
    44264426                  // just get integer part right
    44274427                  const int *originalColumns = process.originalColumns();
    4428                   int numberColumns = solver2->getNumCols();
     4428                  int numberColumns =
     4429                    CoinMin(solver2->getNumCols(), babModel_->getNumCols());
    44294430                  double *bestSolution = babModel_->bestSolution();
    44304431                  const double *oldBestSolution = model_.bestSolution();
     
    75747575                  const int *originalColumns = process.originalColumns();
    75757576                  int numberColumns2 = clpSolver->getNumCols();
    7576                   double *solution2 = new double[n];
    75777577                  double *lower2 = new double[n];
    75787578                  double *upper2 = new double[n];
    75797579                  for (int i = 0; i < n; i++) {
    7580                     solution2[i] = COIN_DBL_MAX;
    75817580                    lower2[i] = COIN_DBL_MAX;
    75827581                    upper2[i] = -COIN_DBL_MAX;
     
    75847583                  const double *columnLower = clpSolver->getColLower();
    75857584                  const double *columnUpper = clpSolver->getColUpper();
    7586                   const double *solution = babModel_->bestSolution();
    75877585                  for (int i = 0; i < numberColumns2; i++) {
    75887586                    int jColumn = originalColumns[i];
    75897587                    if (jColumn < n) {
    7590                       solution2[jColumn] = solution[i];
    75917588                      lower2[jColumn] = columnLower[i];
    75927589                      upper2[jColumn] = columnUpper[i];
     
    76297626                  columnLower = saveSolver->getColLower();
    76307627                  columnUpper = saveSolver->getColUpper();
    7631                   solution = saveSolver->getColSolution();
    76327628                  int numberChanged = 0;
    76337629                  for (int i = 0; i < n; i++) {
     
    76897685                  }
    76907686#endif
    7691                   delete[] solution2;
    76927687                  delete[] lower2;
    76937688                  delete[] upper2;
  • stable/2.10/Cbc/src/Cbc_C_Interface.cpp

    r2495 r2534  
    12711271  if (VERBOSE > 0)
    12721272    printf("%s return\n", prefix);
    1273   return model;
     1273  return result;
    12741274}
    12751275/** Set this the variable to be continuous */
  • stable/2.10/Cbc/src/OsiCbc/OsiCbcSolverInterface.cpp

    r2469 r2534  
    749749void OsiCbcSolverInterface::branchAndBound()
    750750{
    751   *messageHandler() << "Warning: Use of OsiCbc is deprecated." << CoinMessageEol;
    752   *messageHandler() << "To enjoy the full performance of Cbc, use the CbcSolver interface." << CoinMessageEol;
     751  if( messageHandler()->logLevel() > 0 ) {
     752    *messageHandler() << "Warning: Use of OsiCbc is deprecated." << CoinMessageEol;
     753    *messageHandler() << "To enjoy the full performance of Cbc, use the CbcSolver interface." << CoinMessageEol;
     754  }
    753755  modelPtr_->branchAndBound();
    754756}
     
    768770}
    769771
    770 std::string OsiCbcSolverInterface::getObjName(unsigned maxLen) const
     772std::string OsiCbcSolverInterface::getObjName(std::string::size_type maxLen) const
    771773{
    772774  return (modelPtr_->solver()->getObjName(maxLen));
    773775}
    774776
    775 std::string OsiCbcSolverInterface::getRowName(int ndx, unsigned maxLen) const
     777std::string OsiCbcSolverInterface::getRowName(int ndx, std::string::size_type maxLen) const
    776778{
    777779  return (modelPtr_->solver()->getRowName(ndx, maxLen));
     
    783785}
    784786
    785 std::string OsiCbcSolverInterface::getColName(int ndx, unsigned maxLen) const
     787std::string OsiCbcSolverInterface::getColName(int ndx, std::string::size_type maxLen) const
    786788{
    787789  return (modelPtr_->solver()->getColName(ndx, maxLen));
  • stable/2.10/Cbc/src/OsiCbc/OsiCbcSolverInterface.hpp

    r2469 r2534  
    300300  /*! \brief Return the name of the objective function */
    301301
    302   virtual std::string getObjName(unsigned maxLen = std::string::npos) const;
     302  virtual std::string getObjName(std::string::size_type maxLen = std::string::npos) const;
    303303
    304304  /*! \brief Set the name of the objective function */
     
    309309
    310310  virtual std::string getRowName(int rowIndex,
    311     unsigned maxLen = std::string::npos) const;
     311    std::string::size_type maxLen = std::string::npos) const;
    312312
    313313  /*! \brief Return a pointer to a vector of row names */
     
    331331
    332332  virtual std::string getColName(int colIndex,
    333     unsigned maxLen = std::string::npos) const;
     333    std::string::size_type maxLen = std::string::npos) const;
    334334
    335335  /*! \brief Return a pointer to a vector of column names */
  • stable/2.10/INSTALL

    r2375 r2534  
     1The instructions here are somewhat outdated. See also README.md.
     2
    13These are quick install instructions mainly intended for UNIX-like systems
    24(including Linux, OS X, AIX, Cygwin and MSys). Additional details for building
     
    4547   cd Cbc-2.9
    4648   git clone --branch=stable/0.8 https://github.com/coin-or-tools/BuildTools
    47    BuildTools/get.dependencies fetch
     49   BuildTools/get.dependencies.sh fetch
    4850
    49513. Download the tarball from http://www.coin-or.org/download/source/Cbc
  • stable/2.10/README

    r852 r2534  
    1 To install this package, please look at the INSTALL file.
     1To install this package, please look at the INSTALL and README.md files.
    22 
    33This package contains several subdirectories corresponding to COIN-OR
  • stable/2.10/README.md

    r2510 r2534  
    1 # CBC Version 2.10.0 README
    2 
    3 Welcome to the README for the COIN Branch and Cut Solver (CBC). CBC is
    4 distributed under the Eclipse Public License and is freely redistributable.
    5 All source code and documentation is Copyright IBM and others. This README may
    6 be redistributed freely.
     1# CBC
     2
     3Cbc (*C*oin-or *b*ranch and *c*ut) is an open-source mixed integer linear programming solver written in C++.
     4It can be used as a callable library or using a stand-alone executable.
     5It can be called through
     6AIMMS (through the [AIMMSlinks](https://github.com/coin-o/AIMMSlinks) project),
     7AMPL (natively),
     8[CMPL](https://github.com/coin-or/Cmpl),
     9GAMS (through the [GAMSlinks](https://github.com/coin-or/GAMSlinks) project),
     10[JuMP](https://github.com/JuliaOpt/JuMP.jl),
     11Mathematica,
     12[MiniZinc](http://www.minizinc.org/),
     13MPL (through the [CoinMP](https://github.com/coin-or/CoinMP) project),
     14[PuLP](https://github.com/coin-or/PuLP), and
     15[OpenSolver for Excel](http://opensolver.org), among others.
     16
     17Cbc links to a number of other COIN-OR projects for additional functionality, including:
     18 * [Clp](https://github.com/coin-or/Clp) (the default solver for LP relaxations)
     19 * [Cgl](https://github.com/coin-or/Cgl) (for cut generation)
     20 * [CoinUtils](https://github.com/coin-or/CoinUtils) (for reading input files and various utilities)
     21For more information on supported platforms, links to dependent projects, current version, and more, click [here](http://www.coin-or.org/projects/Cbc.xml)
     22
     23Cbc is developed by [John Forrest](http://www.fastercoin.com), now retired from IBM Research.
     24The project is currently managed by John Forrest, [Ted Ralphs](http://coral.ie.lehigh.edu/~ted/), Haroldo Gambini Santos, and the rest of the Cbc team (Dan Fylstra (Frontline), Lou Hafer (SFU), Bill Hart (Sandia), Bjarni Kristjannson (Maximal), Cindy Phillips (Sandia), Matthew Saltzman (Clemson), Edwin Straver (Frontline), Jean-Paul Watson (Sandia)).
     25
     26Cbc is written in C++ and is released as open source code under the [Eclipse Public License (EPL)](http://www.opensource.org/licenses/eclipse-1.0) and is freely redistributable.
     27All source code and documentation is Copyright IBM and others. This README may be redistributed freely.
     28
     29Cbc is available from the [COIN-OR initiative](http://www.coin-or.org/).
     30The Cbc website is https://github.com/coin-or/Cbc.
     31
     32## CITE
     33
     34[![DOI](https://zenodo.org/badge/30382416.svg)](https://zenodo.org/badge/latestdoi/30382416)
    735
    836## CURRENT BUILD STATUS
     
    1240[![Build status](https://ci.appveyor.com/api/projects/status/l2hwifsxwhswng8y/branch/master?svg=true)](https://ci.appveyor.com/project/tkralphs/cbc/branch/master)
    1341
     42
    1443## DOWNLOAD
    1544
    16 [ ![Download](https://api.bintray.com/packages/coin-or/download/Cbc/images/download.svg) ](https://bintray.com/coin-or/download/Cbc/2.10)
    17 
    18 Binaries for most platforms are available for download from [Bintray](https://bintray.com/coin-or/download/Cbc)
    19 
    20 ## CITE
    21 
    22 [![DOI](https://zenodo.org/badge/30382416.svg)](https://zenodo.org/badge/latestdoi/30382416)
     45Binaries for most platforms are available for download from [Bintray](https://bintray.com/coin-or/download/Cbc): [ ![Download](https://api.bintray.com/packages/coin-or/download/Cbc/images/download.svg) ](https://bintray.com/coin-or/download/Cbc/2.10)
     46
     47 * *Linux*: On !Debian/Ubuntu, Cbc is available in the package `coinor-cbc` and can be installed with apt. On Fedora, Cbc is available in the package `coin-or-Cbc`.
     48 * *Windows*: The easiest way to get Cbc on Windows is to download the Windows installer for the [COIN-OR Optimization Suite](http://www.coin-or.org/download/binary/CoinAll), which provides Visual Studio compatible libraries and binaries.
     49 * *Mac OS X*: The easiest way to get Cbc on Mac OS X is through Homebrew
     50   * `brew tap coin-or-tools/coinor`
     51   * `brew install cbc`
     52 * AMPL also provides stand-alone [Cbc executables](http://ampl.com/products/solvers/open-source/#cbc) that can be used with (or without) AMPL.
     53 * The [GAMS](http://www.gams.com) distribution includes Cbc.
     54Due to license incompatibilities, pre-compiled binaries lack some functionality.
     55If binaries are not available for your platform for the latest version and you would like to request them to be built and posted, feel free to let us know on the mailing list.
     56
     57*Source code* can be obtained either by
     58
     59 * Downloading a snapshot of the source code for the latest release version of Cbc from the [Cbc source code download page](http://www.coin-or.org/download/source/Cbc), or
     60 * Checking out the code from [Github](https://github.com/coin-or/Cbc)
     61
     62The recommended method is to use Git because it makes it easier to obtain updates. Below are some quick start guides for building on common platforms. *More detailed build instructions are [BuildAndInstall here].*
     63
     64
     65## BUILDING from source
     66
     67### Using CoinBrew
     68
     69To build Cbc from source, obtain the `coinbrew` script from
     70https://coin-or.github.io/coinbrew/
     71and run
     72
     73
     74    /path/to/coinbrew fetch --mainProj=Cbc
     75    /path/to/coinbrew build --mainProj=Cbc --test
     76    /path/to/coinbrew install --mainProj=Cbc
     77
     78
     79The `coinbrew` script will fetch [these](Dependencies) additional projects.
     80
     81### Without CoinBrew (Expert users)
     82
     83 0. Install [these Dependencies](Dependencies)
     84 1. Obtain the source code, e.g., from https://github.com/coin-or/Cbc
     85 2. Run `./configure -C` to generate makefiles
     86 3. Run `make` to build the CoinUtils library
     87 4. Run `make test` to build and run the CoinUtils unit test program
     88 5. Run `make install` to install library and header files.
     89
     90### With Microsoft Visual Studio
     91
     92For Microsoft Visual C++ users, there are project files for version 10 available in the `MSVisualStudio` directory.
     93First, obtain the source code using either a Windows git client or download a snapshot.
     94In MSVC++ Version 10, open the solution file (this should be converted to whatever version of MSVC+ you are using) and build the Cbc project.
     95The code should build out of the box with default settings.
     96
     97It is also possible to build Cbc with the Visual Studio compiler from the command line using the procedure for Unix-like environments, using the Msys2 shell or CYGWIN.
     98This is the recommended and best-supported way of building Cbc in Windows from source.
     99
     100If you want to build a *parallel version* of CBC using Visual Studio you can following instructions: (thanks to Tobias Stengel and Alexis Guigue).
     101
     102Assumptions:
     103
     104- A VS solution with all necessary projects (libCbc, libClp, libCbcSolver, libCgl, libCoinUtils, libOsi, libOsiCbc, libOsiClp). The project files can be found inside the "MSVisualStudio" folders.
     105
     106Steps (based on VS 2013):
     107
     1081. for each of the lib* projects do:
     109   add `CBC_THREAD` under Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions (a subset of the lib* projects may be sufficient, but it doesn't hurt to do it for all)
     110
     1112. Link against a pthreads library.
     112   [PThreadsWin32](https://www.sourceware.org/pthreads-win32/) works (even in 64 bits systems) and is distributed under the LGPL.
     113   If you decide to use the precompiled binaries: both pthreadVC2 and pthreadVS2 seem to work.
     114   Otherwise: third party VS project files for pthreads4win can be found on github.
     115
     116   Note: If you use C++/Cli, make sure that no callback (eventHandlers, custom cut generators, custom heuristics, ...) contains managed code.
     117   Otherwise your code will crash at runtime with AssembyNotFoundExceptions inside the native threads created by Cbc. Even if not, problems with the GC are likely.
     118
     1193. If you link statically against pthreads4win, you have to define PTW32_STATIC_LIB when building your program/Cbc (e.g. via Properties -> C/C++/Preprocessor ->  Preprocessor Definitions) AND - only if you build pthreads yourself - when building pthreads.
     120   Linking pthreads dynamically works without additional preprocessor definitions.
     121
     1224. pass "-threads" "yourNumber" to CbcMain1
     123
    23124
    24125## DOCUMENTATION
    25126
    26 For a quick start guide, please see the INSTALL file in this distribution. A
    27 (somehwat outdated) user's manual is available here:
    28 
    29 http://www.coin-or.org/Cbc
    30 
    31 More up-to-date automatically generated documentation of the source code can
    32 be found here:
    33 
    34 http://www.coin-or.org/Doxygen/Cbc/
    35 
    36 Further information can be found here:
    37 
    38 http://projects.coin-or.org/Cbc
     127 * [INSTALL](INSTALL) file (partially outdated)
     128 * [User's Guide](https://coin-or.github.io/Cbc) (from 2005)
     129 * [Doxygen generated documentation](http://www.coin-or.org/Doxygen/Cbc/hierarchy.html)
     130 * Source code [examples](Cbc/examples)
     131 * [Cbc command-line guide](https://projects.coin-or.org/CoinBinary/export/1059/OptimizationSuite/trunk/Installer/files/doc/cbcCommandLine.pdf)
     132
    39133
    40134## SUPPORT
     
    42136### List Serve
    43137
    44 CBC users should use the Cbc mailing list. To subscribe, go to 
     138CBC users should use the Cbc mailing list. To subscribe, go to
    45139http://list.coin-or.org/mailman/listinfo/cbc
    46140
     
    49143Bug reports should be reported on the CBC development web site at
    50144
    51 https://projects.coin-or.org/Cbc/newticket
     145https://github.com/coin-or/Cbc/issues
    52146
    53147## CHANGELOG
     148
     149 * Release 2.10.1
     150   * Fixed Cbc_clone in C interface
     151   * Fixed CbcMain1() call in examples/driver3.cpp
     152   * Fixed possible issue with MIPstart if presolve added variables
     153   * More minor bugfixes
    54154
    55155 * Release 2.10.0
     
    81181     Cbc_setMaximumSolutions, Cbc_getLogLevel, Cbc_setLogLevel,
    82182     Cbc_getMaximumSeconds, Cbc_setMaximumSeconds
     183   * New action "guess" checks properties of the model to decide the best
     184     parameters for solving the LP relaxation.
    83185   * New example inc.cpp to illustrate solution callback
    84186   * New example driver5.cpp to illustrate user-defined branching rule
     
    87189   * Added MSVC 14 project files
    88190   * Bugfixes
    89    
     191
    90192 * Release 2.9.10
    91193   * Fix a numerical issue
     
    140242   * Minor bug fixes
    141243
    142  * Release 2.9.0 
     244 * Release 2.9.0
    143245
    144246   * Introduced specialized branching methods for dealing with "big Ms".
     
    235337     variables), in particular when it is applied to the first heuristic
    236338     solutions found at the root node.
    237    
     339
    238340   * An implementation of Zero-Half-Cuts by Alberto Caprara is now available.
    239341     By default, these cuts are off. To use add to your command line
     
    269371     is 10. The cut generators identified by "may be slow" at present are just
    270372     Lift and project and ReduceAndSplit (both versions).
    271    
     373
    272374   * Allow initialization of random seed by user. Pseudo-random numbers are
    273375     used in Cbc and Clp. In Clp they are used to break ties in degenerate
     
    278380     setting randomSeed for Clp and/or randomCbcSeed for Cbc. The special
    279381     value of 0 tells code to use time of day for initial seed.
    280    
     382
    281383   * Building on this idea, Andrea Lodi, Matteo Fischetti, Michele Monaci,
    282384     Domenico Salvagnin, Yuji Shinano, and Andrea Tramontani suggest that this
     
    286388     and possibly stronger cuts. This is switched on by setting
    287389     -multipleRootPasses. These can also be done in parallel.
    288  
     390
    289391   * Few changes to presolve for special variables and badly scaled problems
    290392     (in CoinUtils).
     
    375477   * Updated externals to new stable versions of dependent projects.
    376478
    377    * Improvements to heuristics.
    378 
    379    * New options for cut generation.
    380 
    381    * Improved reporting of results.
    382 
    383    * Improvements to documentation.
    384 
    385    * Minor bug fixes.
    386 
    387 
     479   * Improvements to heuristics.
     480
     481   * New options for cut generation.
     482
     483   * Improved reporting of results.
     484
     485   * Improvements to documentation.
     486
     487   * Minor bug fixes.
Note: See TracChangeset for help on using the changeset viewer.