COIN-OR is a collection of open source software for optimization. The official repository is www.coin-or.org.
This page collects introductory material and small examples that might be helpful to first time users. Most of the examples are related to BCP and Cbc, two packages for Branch-and-Cut and to Clp, one of the LP solvers available in COIN-OR. If you are using (or planning to use) BCP as a pure Branch-and-Cut code (i.e. not using column generation), performance can be significantly improved by a few modification of the code. My favorite ones are available here. It also mentions a cut generator for reduce-and-split cuts and interface to read and write LP files from the solvers.
Previous versions:
make doxydoc
in coin-Pkg/build (assuming that Doxygen is installed on your machine), you can open in a browser coin-Pkg/doxydoc/html/index.html and find the documentation for CglRedSplit (Click on "Classes" at the top). If Doxygen is not available, read through Cgl/src/CglRedSplit/CglRedSplit.hpp or go to the Cgl documentation.
make doxydoc
in coin-Pkg/build (assuming that Doxygen is installed on your machine), you can open in a browser coin-Pkg/doxydoc/html/index.html and find the documentation for CoinLpIO (Click on "Classes" at the top). If Doxygen is not available, read through CoinUtils/src/CoinLpIO.hpp or go to the CoinUtils documentation.
To read an LP file "any_name.lp" and write an LP file "aa.lp" using Clp, you can use:
OsiClpSolverInterface solver;
solver.readLp("any_name.lp");
solver.writeLp("aa", "lp", 1e-5, 10, 5);
And similarly with the other solvers working with Osi.
To get the optimal solution with associated names you can use:
solver->initialSolve();
const int numCols = solver->getNumCols();
const double *x = solver->getColSolution();
for (int j=0; j < numCols; j++){
    const char *name = solver->getColName(j);
    std::cout << name << " " << x[j] << "\n";
}
Note that a solver will lose names read from an Lp file
except if its class derived from OsiSolverInterface has an implementation
of the OsiSolverInterface::readLp() method dealing with names.
The names used in the solver
will be printed in an Lp file only if the derived class has
an implementation of the OsiSolverInterface::writeLp() method dealing with
names. Alternatively, you can use the method
OsiSolverInterface::writeLpNative(). See the documentation of this method
for more details.