Cbc (Coin-or branch and cut)

Table of Contents

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

OptionDescriptionDefault
clocktypetype of clock for time measurementwall
reslimmaximum secondsGAMS reslim
specialoptions passed unseen to CBC
writempscreate MPS file for problem

LP Options

OptionDescriptionDefault
autoScaleWhether to scale objective, rhs and bounds of problem if they look odd (experimental)0
biasLUWhether factorization biased towards ULX
bscaleWhether to scale in barrier (and ordering speed)off
crashWhether to create basis for problemoff
crossoverWhether to get a basic solution with the simplex algorithm after the barrier algorithm finishedon
denseThresholdThreshold for using dense factorization-1
dualPivotDual pivot choice algorithmautomatic
factorizationWhich factorization to usenormal
gammaWhether to regularize barrieroff
idiotCrashWhether to try idiot crash-1
iterlimMaximum number of iterations before stoppingGAMS iterlim
KKTWhether to use KKT factorization in barrier0
maxFactorMaximum number of iterations between refactorizations200
passPresolveHow many passes in presolve5
perturbationWhether to perturb the problem1
presolveWhether to presolve problemon
primalPivotPrimal pivot choice algorithmautomatic
primalWeightInitially algorithm acts as if it costs this much to be infeasible1e+10
psiTwo-dimension pricing factor for Positive Edge criterion-0.5
randomSeedClpRandom seed for Clp1234567
scalingWhether to scale problemautomatic
smallFactorizationThreshold for using small factorization-1
sparseFactorWhether factorization treated as sparse1
sprintCrashWhether to try sprint crash-1
startalgLP solver for root nodedual
substitutionHow long a column to substitute for in presolve3
tol_dualFor an optimal solution no dual infeasibility may exceed this value1e-07
tol_presolveTolerance to use in presolve1e-08
tol_primalFor a feasible solution no primal infeasibility, i.e., constraint violation, may exceed this value1e-07

MIP Options

OptionDescriptionDefault
costStrategyHow to use costs for branching prioritiesoff
cutoffBound on the objective value for all solutionsGAMS cutoff
cutoffConstraintWhether to use cutoff as constraintoff
dumpsolutionsname of solutions index gdx file for writing alternate solutions
dumpsolutionsmergedname of gdx file for writing all alternate solutions
expensiveStrongWhether to do even more strong branching0
extraVariablesAllow creation of extra integer variables0
fixOnDjTry heuristic based on fixing variables with reduced costs greater than this-1
incrementA valid solution must be at least this much better than last integer solutionGAMS cheat
infeasibilityWeightEach integer infeasibility is expected to cost this much0
loglevelamount of output printed by CBC1
maxsolMaximum number of solutions to save100
mipstartwhether it should be tried to use the initial variable levels as initial MIP solution0
multipleRootPassesDo multiple root passes to collect cuts and solutions0
nodeStrategyWhat strategy to use to select the next node from the branch and cut treefewest
nodlimnode limitGAMS nodlim
optcaStop when gap between best possible and best less than thisGAMS optca
optcrStop when gap between best possible and best known is less than this fraction of larger of twoGAMS optcr
OrbitalBranchingWhether to try orbital branchingoff
parallelmodewhether to run opportunistic or deterministicdeterministic
preprocessWhether to use integer preprocessingsos
printfrequencyfrequency of status prints0
randomSeedCbcRandom seed for Cbc-1
sollimMaximum number of feasible solutions to get
solvefinalfinal solve of MIP with fixed discrete variables1
solvetracename of trace file for solving information
solvetracenodefreqfrequency in number of nodes for writing to solve trace file100
solvetracetimefreqfrequency in seconds for writing to solve trace file5
sosPrioritizeHow to deal with SOS prioritiesoff
strategySwitches on groups of features1
strongBranchingNumber of variables to look at in strong branching5
threadsNumber of threads to try and useGAMS threads
tol_integerFor a feasible solution no integer variable may be more than this away from an integer value1e-07
trustPseudoCostsNumber of branches before we trust pseudocosts10

MIP Options for Cutting Plane Generators

OptionDescriptionDefault
cliqueCutsWhether to use Clique cutsifmove
conflictcutsConflict Cuts0
cut_passes_rootNumber of rounds that cut generators are applied in the root node20 or 100
cut_passes_slowMaximum number of rounds for slower cut generators10
cut_passes_treeNumber of rounds that cut generators are applied in the tree10
cutDepthDepth in tree at which to do cuts-1
cutLengthLength of a cut-1
cutsSwitches all cut generators on or offon
flowCoverCutsWhether to use Flow Cover cutsifmove
gomoryCutsWhether to use Gomory cutsifmove
gomorycuts2Whether to use alternative Gomory cutsoff
knapsackCutsWhether to use Knapsack cutsifmove
lagomoryCutsWhether to use Lagrangean Gomory cutsoff
latwomirCutsWhether to use Lagrangean TwoMir cutsoff
liftAndProjectCutsWhether to use Lift and Project cutsoff
mirCutsWhether to use Mixed Integer Rounding cutsifmove
probingCutsWhether to use Probing cutsifmove
reduceAndSplitCutsWhether to use Reduce-and-Split cutsoff
reduceAndSplitCuts2Whether to use Reduce-and-Split cuts – style 2off
residualCapacityCutsWhether to use Residual Capacity cutsoff
twoMirCutsWhether to use Two phase Mixed Integer Rounding cutsroot
zeroHalfCutsWhether to use zero half cutsifmove

MIP Options for Primal Heuristics

OptionDescriptionDefault
combine2SolutionsWhether to use crossover solution heuristicoff
combineSolutionsWhether to use combine solution heuristicoff
DinsWhether to try Distance Induced Neighborhood Searchoff
diveSolvesDiving solve option100
DivingCoefficientWhether to try Coefficient diving heuristicoff
DivingFractionalWhether to try Fractional diving heuristicoff
DivingGuidedWhether to try Guided diving heuristicoff
DivingLineSearchWhether to try Linesearch diving heuristicoff
DivingPseudoCostWhether to try Pseudocost diving heuristicoff
DivingRandomWhether to try Diving heuristicsoff
DivingVectorLengthWhether to try Vectorlength diving heuristicoff
dwHeuristicWhether to try Dantzig Wolfe heuristicoff
feaspumpWhether to try the Feasibility Pump heuristicon
feaspump_artcostCosts ≥ this treated as artificials in feasibility pump0
feaspump_cutoffFake cutoff for use in feasibility pump0
feaspump_fracbabFraction in feasibility pump0.5
feaspump_incrementFake increment for use in feasibility pump0
feaspump_passesHow many passes to do in the Feasibility Pump heuristic20
greedyHeuristicWhether to use a greedy heuristicon
heuristicsSwitches most primal heuristics on or off1
hOptionsHeuristic options0
localTreeSearchWhether to use local tree search when a solution is found0
naiveHeuristicsWhether to try some stupid heuristicoff
pivotAndComplementWhether to try Pivot and Complement heuristicoff
pivotAndFixWhether to try Pivot and Fix heuristicoff
proximitySearchWhether to do proximity search heuristicoff
randomizedRoundingWhether to try randomized rounding heuristicoff
RensWhether to try Relaxation Enforced Neighborhood Searchoff
RinsWhether to try Relaxed Induced Neighborhood Searchoff
roundingHeuristicWhether to use simple (but effective) Rounding heuristicon
VndVariableNeighborhoodSearchWhether to try Variable Neighborhood Searchoff
vubheuristicType of VUB heuristic-1