-
Notifications
You must be signed in to change notification settings - Fork 16
/
generate_readme
113 lines (90 loc) · 6.29 KB
/
generate_readme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env bash
# Exit when command fails
set -e
#Attempt to use undefined variable outputs error message, and forces an exit
set -u
#Causes a pipeline to return the exit status of the last command in the pipe
#that returned a non-zero return value.
set -o pipefail
#set -x
source $COINBREW_HOME/scripts/generate_readme
pushd . > /dev/null
cd $(dirname $0)
SCRIPT_DIR=$PWD
popd > /dev/null
create_variables $SCRIPT_DIR/config.yml
make_header
echo "The COIN-OR Cut Generation Library (\`Cgl\`) is a collection of cut generators that can be
used with other COIN-OR packages that make use of cuts, such as, among others, the linear solver
[Clp](https://github.com/coin-or/Clp) or the mixed integer linear programming solvers
[Cbc](https://github.com/coin-or/Cbc) or [BCP](https://github.com/coin-or/Bcp).
\`Cgl\` uses the abstract class \`OsiSolverInterface\`
(see [Osi](https://github.com/coin-or/Osi)) to use or communicate with a solver.
It does not directly call a solver.
Each cut generator is in a separate directory with its own maintainer.
All generators are combined in one library when \`Cgl\` is compiled.
Available cut generators are:
* Combinatorial cuts:
* [CglAllDifferent](https://github.com/coin-or/Cgl/wiki/CglAllDifferent)
* CglBKClique
* [CglClique](https://github.com/coin-or/Cgl/wiki/CglClique)
* [CglKnapsackCover](https://github.com/coin-or/Cgl/wiki/CglKnapsackCover)
* [CglOddHole](https://github.com/coin-or/Cgl/wiki/CglOddHole)
* CglOddWheel
* CglZeroHalf
* Flow cover cuts:
* [CglFlowCover](https://github.com/coin-or/Cgl/wiki/CglFlowCover)
* Gomory cuts and variants:
* [CglGomory](https://github.com/coin-or/Cgl/wiki/CglGomory)
* CglGMI
* [CglRedSplit](https://github.com/coin-or/Cgl/wiki/CglRedSplit)
* CglRedSplit2
* Lift-and-project cuts:
* [CglLiftAndProject](https://github.com/coin-or/Cgl/wiki/CglLiftAndProject)
* [CglLandP](https://github.com/coin-or/Cgl/wiki/CglLandP)
* Mixed integer rounding cuts and variants:
* [CglMixedIntegerRounding](https://github.com/coin-or/Cgl/wiki/CglMixedIntegerRounding)
* [CglMixedIntegerRounding2](https://github.com/coin-or/Cgl/wiki/CglMixedIntegerRounding2)
* [CglTwomir](https://github.com/coin-or/Cgl/wiki/CglTwomir)
* [CglResidualCapacity](https://github.com/coin-or/Cgl/wiki/CglResidualCapacity)
* Strengthening:
* CglCliqueStrengthening
* [CglDuplicateRow](https://github.com/coin-or/Cgl/wiki/CglDuplicateRow)
* [CglPreprocess](https://github.com/coin-or/Cgl/wiki/CglPreprocess)
* [CglProbing](https://github.com/coin-or/Cgl/wiki/CglProbing)
* [CglSimpleRounding](https://github.com/coin-or/Cgl/wiki/CglSimpleRounding)
CoinUtils is an open-source collection of classes and helper functions
that are generally useful to multiple COIN-OR projects.
These utilities include:
* classes for storing and manipulating sparse matrices and vectors,
* performing matrix factorization,
* parsing input files in standard formats, e.g. MPS,
* building representations of mathematical programs,
* performing simple presolve operations,
* warm starting algorithms for mathematical programs,
* comparing floating point numbers with a tolerance
* classes for storing and manipulating conflict graphs, and
* classes for searching and storing cliques and odd cycles in conflict graphs, among others.
The project managers of Cgl are Robin Lougee (@rlougee) and Francois Margot.
"
make_build_info
make_doxygen_info
make_links
echo "---------
## Information for Subproject Managers
A cut generator in \`Cgl\` must conform to the following:
* Its main class \`CglCutGeneratorDeriv\` is derived from the class \`CglCutGenerator\`.
* It has three related classes used for data, parameters and information with respect to the enumeration tree:
* A class \`CglDataDeriv\` derived from \`CglData\`; it should contain pointers on all data used by the generator that might be obtained from an \`OsiSolverInterface\` object when calling \`generateCuts()\` with an \`OsiSolverInterface\` object as parameter. The class \`CglDataDeriv\` might be \`CglData\` if the latter is sufficient. An exception is made for generators needing information deemed too expensive to collect from the solver (for example the optimal Simplex tableau); in this case \`CglDataDeriv\` might still contain a pointer on the \`OsiSolverInterface\` object, but its use should be limited to obtaining the \"expensive\" information from the solver.
* A class \`CglParamDeriv\` derived from \`CglParam\`. It should contain parameters of the generator that can be set by the user. The parameters in the class \`CglParamDeriv\` must be taken into account during the cut generation. The class \`CglParamDeriv\` might be \`CglParam\` if the latter is sufficient.
* A class \`CglTreeInfoDeriv\` derived from \`CglTreeInfo\`. The class \`CglTreeInfoDeriv\` might be \`CglTreeInfo\` if the latter is sufficient.
* The class \`CglCutGeneratorDeriv\` must have
* A member of type \`CglParamDeriv\` used to store the current parameters.
* A method \`getParam()\` that returns the object storing the current parameters.
* A method \`generateCuts(const OsiSolverInterface & si, OsiCuts & cs, const CglTreeInfoDeriv info)\`
* A method \`generateCuts(const CglDataDeriv &data, OsiCuts & cs, const CglTreeInfoDeriv info)\`
* The data class \`CglDataDeriv\` must have methods \`getMember()\` and \`setMember()\` for each \`member\` of the class. Data members in \`CglData\` irrelevant for a generator are completely ignored. If a data member that is used by a generator is not available when \`generateCuts(const CglDataDeriv &data, OsiCuts & cs, const CglTreeInfoDeriv info)\` is called, the call is aborted, as if no cuts were found. A warning message might be printed.
* The class \`CglParamDeriv\` must have methods \`getMember()\` and \`setMember()\` for each \`member\` of the class. All parameters must have default values. Each cut generator with a derived class is free to change the default values for all the members of \`CglParamDeriv\`, including those from \`CglParam\`.
* Once an object of the cut generator class is created, it should be possible to call generateCuts() several times in a row without having to destroy and re-create the object.
* By default, a successful call to \`generateCuts()\` should not generate any output. If an error occurs, a message might be printed.
"