CBC (COIN-OR Branch and Cut) is an open-source mixed integer programming solver working with the COIN-OR LP solver CLP and the COIN-OR Cut generator library Cgl. The code has been written primarily by John J. Forrest. Most of the CBC documentation in the section was copied from the help in the CBC standalone version.
The CBC link in GAMS supports continuous, binary, integer, semicontinuous, semiinteger variables, special ordered sets of type 1 and 2, and branching priorities.
List of Options
There are many parameters which can affect the performance the CBCs Branch and Cut Algorithm. First just try with default settings and look carefully at the log file. Did cuts help? Did they take too long? Look at the output to see which cuts were effective and then do some tuning (see the option cuts). If the preprocessing reduced the size of the problem or strengthened many coefficients then it is probably wise to leave it on. Switch off heuristics which did not provide solutions. The other major area to look at is the search. Hopefully good solutions were obtained fairly early in the search so the important point is to select the best variable to branch on. See whether strong branching did a good job – or did it just take a lot of iterations? Adjust the options strongBranching and trustpseudocosts.
In the following, we summarize all available CBC options.
General Options
Option
Description
Default
clocktype
type of clock for time measurement
wall
reslim
maximum seconds
GAMS reslim
special
options passed unseen to CBC
writemps
create MPS file for problem
LP Options
Option
Description
Default
autoScale
Whether to scale objective, rhs and bounds of problem if they look odd (experimental)
0
biasLU
Whether factorization biased towards U
LX
bscale
Whether to scale in barrier (and ordering speed)
off
crash
Whether to create basis for problem
off
crossover
Whether to get a basic solution with the simplex algorithm after the barrier algorithm finished
on
denseThreshold
Threshold for using dense factorization
-1
dualPivot
Dual pivot choice algorithm
automatic
factorization
Which factorization to use
normal
gamma
Whether to regularize barrier
off
idiotCrash
Whether to try idiot crash
-1
iterlim
Maximum number of iterations before stopping
GAMS iterlim
KKT
Whether to use KKT factorization in barrier
0
maxFactor
Maximum number of iterations between refactorizations
200
passPresolve
How many passes in presolve
5
perturbation
Whether to perturb the problem
1
presolve
Whether to presolve problem
on
primalPivot
Primal pivot choice algorithm
automatic
primalWeight
Initially algorithm acts as if it costs this much to be infeasible
1e+10
psi
Two-dimension pricing factor for Positive Edge criterion
-0.5
randomSeedClp
Random seed for Clp
1234567
scaling
Whether to scale problem
automatic
smallFactorization
Threshold for using small factorization
-1
sparseFactor
Whether factorization treated as sparse
1
sprintCrash
Whether to try sprint crash
-1
startalg
LP solver for root node
dual
substitution
How long a column to substitute for in presolve
3
tol_dual
For an optimal solution no dual infeasibility may exceed this value
1e-07
tol_presolve
Tolerance to use in presolve
1e-08
tol_primal
For a feasible solution no primal infeasibility, i.e., constraint violation, may exceed this value
1e-07
MIP Options
Option
Description
Default
costStrategy
How to use costs for branching priorities
off
cutoff
Bound on the objective value for all solutions
GAMS cutoff
cutoffConstraint
Whether to use cutoff as constraint
off
dumpsolutions
name of solutions index gdx file for writing alternate solutions
dumpsolutionsmerged
name of gdx file for writing all alternate solutions
expensiveStrong
Whether to do even more strong branching
0
extraVariables
Allow creation of extra integer variables
0
fixOnDj
Try heuristic based on fixing variables with reduced costs greater than this
-1
increment
A valid solution must be at least this much better than last integer solution
GAMS cheat
infeasibilityWeight
Each integer infeasibility is expected to cost this much
0
loglevel
amount of output printed by CBC
1
maxsol
Maximum number of solutions to save
100
mipstart
whether it should be tried to use the initial variable levels as initial MIP solution
0
multipleRootPasses
Do multiple root passes to collect cuts and solutions
0
nodeStrategy
What strategy to use to select the next node from the branch and cut tree
fewest
nodlim
node limit
GAMS nodlim
optca
Stop when gap between best possible and best less than this
GAMS optca
optcr
Stop when gap between best possible and best known is less than this fraction of larger of two
GAMS optcr
OrbitalBranching
Whether to try orbital branching
off
parallelmode
whether to run opportunistic or deterministic
deterministic
preprocess
Whether to use integer preprocessing
sos
printfrequency
frequency of status prints
0
randomSeedCbc
Random seed for Cbc
-1
sollim
Maximum number of feasible solutions to get
∞
solvefinal
final solve of MIP with fixed discrete variables
1
solvetrace
name of trace file for solving information
solvetracenodefreq
frequency in number of nodes for writing to solve trace file
100
solvetracetimefreq
frequency in seconds for writing to solve trace file
5
sosPrioritize
How to deal with SOS priorities
off
strategy
Switches on groups of features
1
strongBranching
Number of variables to look at in strong branching
5
threads
Number of threads to try and use
GAMS threads
tol_integer
For a feasible solution no integer variable may be more than this away from an integer value
1e-07
trustPseudoCosts
Number of branches before we trust pseudocosts
10
MIP Options for Cutting Plane Generators
Option
Description
Default
cliqueCuts
Whether to use Clique cuts
ifmove
conflictcuts
Conflict Cuts
0
cut_passes_root
Number of rounds that cut generators are applied in the root node
20 or 100
cut_passes_slow
Maximum number of rounds for slower cut generators
10
cut_passes_tree
Number of rounds that cut generators are applied in the tree
10
cutDepth
Depth in tree at which to do cuts
-1
cutLength
Length of a cut
-1
cuts
Switches all cut generators on or off
on
flowCoverCuts
Whether to use Flow Cover cuts
ifmove
gomoryCuts
Whether to use Gomory cuts
ifmove
gomorycuts2
Whether to use alternative Gomory cuts
off
knapsackCuts
Whether to use Knapsack cuts
ifmove
lagomoryCuts
Whether to use Lagrangean Gomory cuts
off
latwomirCuts
Whether to use Lagrangean TwoMir cuts
off
liftAndProjectCuts
Whether to use Lift and Project cuts
off
mirCuts
Whether to use Mixed Integer Rounding cuts
ifmove
probingCuts
Whether to use Probing cuts
ifmove
reduceAndSplitCuts
Whether to use Reduce-and-Split cuts
off
reduceAndSplitCuts2
Whether to use Reduce-and-Split cuts – style 2
off
residualCapacityCuts
Whether to use Residual Capacity cuts
off
twoMirCuts
Whether to use Two phase Mixed Integer Rounding cuts
root
zeroHalfCuts
Whether to use zero half cuts
ifmove
MIP Options for Primal Heuristics
Option
Description
Default
combine2Solutions
Whether to use crossover solution heuristic
off
combineSolutions
Whether to use combine solution heuristic
off
Dins
Whether to try Distance Induced Neighborhood Search
off
diveSolves
Diving solve option
100
DivingCoefficient
Whether to try Coefficient diving heuristic
off
DivingFractional
Whether to try Fractional diving heuristic
off
DivingGuided
Whether to try Guided diving heuristic
off
DivingLineSearch
Whether to try Linesearch diving heuristic
off
DivingPseudoCost
Whether to try Pseudocost diving heuristic
off
DivingRandom
Whether to try Diving heuristics
off
DivingVectorLength
Whether to try Vectorlength diving heuristic
off
dwHeuristic
Whether to try Dantzig Wolfe heuristic
off
feaspump
Whether to try the Feasibility Pump heuristic
on
feaspump_artcost
Costs ≥ this treated as artificials in feasibility pump
0
feaspump_cutoff
Fake cutoff for use in feasibility pump
0
feaspump_fracbab
Fraction in feasibility pump
0.5
feaspump_increment
Fake increment for use in feasibility pump
0
feaspump_passes
How many passes to do in the Feasibility Pump heuristic
20
greedyHeuristic
Whether to use a greedy heuristic
on
heuristics
Switches most primal heuristics on or off
1
hOptions
Heuristic options
0
localTreeSearch
Whether to use local tree search when a solution is found
0
naiveHeuristics
Whether to try some stupid heuristic
off
pivotAndComplement
Whether to try Pivot and Complement heuristic
off
pivotAndFix
Whether to try Pivot and Fix heuristic
off
proximitySearch
Whether to do proximity search heuristic
off
randomizedRounding
Whether to try randomized rounding heuristic
off
Rens
Whether to try Relaxation Enforced Neighborhood Search
off
Rins
Whether to try Relaxed Induced Neighborhood Search
off
roundingHeuristic
Whether to use simple (but effective) Rounding heuristic