CBC

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.

Usage

The following statement can be used inside your GAMS program to specify using CBC

Option LP = CBC;     { or MIP or RMIP }

The above statement should appear before the Solve statement. If CBC was specified as the default solver during GAMS installation, the above statement is not necessary.

For usage and syntax of solver options file, see Section The Solver Option File. Following is an example options file cbc.opt.

cuts root
perturbation off

It will cause CBC to use cut generators only in the root node and turns off the perturbation of the LP relaxation.

GAMS/CBC currently does not support the GAMS Branch-and-Cut-and-Heuristic (BCH) Facility. If you need to use GAMS/CBC with BCH, please consider to use a GAMS system of version ≤ 23.3.

The following GAMS parameters are currently supported by GAMS/CBC: reslim, iterlim, nodlim, optca, optcr, cheat, cutoff, and threads.

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 on
VndVariableNeighborhoodSearch Whether to try Variable Neighborhood Search off
vubheuristic Type of VUB heuristic -1

Detailed Options Description

In the following, we give a detailed description of all available CBC options.

autoScale: Whether to scale objective, rhs and bounds of problem if they look odd (experimental)

Range: boolean

Default: 0

biasLU: Whether factorization biased towards U

Range: UU, UX, LX, LL

Default: LX

bscale: Whether to scale in barrier (and ordering speed)

Range: off, on, off1, on1, off2, on2

Default: off

cliqueCuts: Whether to use Clique cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglClique

Range: off, on, root, ifmove, forceOn, onglobal

Default: ifmove

clocktype: type of clock for time measurement

value meaning
cpu CPU clock
wall Wall clock

Default: wall

combine2Solutions: Whether to use crossover solution heuristic

This heuristic does branch and cut on the problem given by fixing variables which have the same value in two or more solutions. It obviously only tries after two or more solutions. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

Range: off, on, both, before

Default: off

combineSolutions: Whether to use combine solution heuristic

This heuristic does branch and cut on given problem by just using variables which have appeared in one or more solutions. It is obviously only tried after two or more solutions have been found. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
onquick
bothquick
beforequick
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

conflictcuts: Conflict Cuts

Equivalent to setting cutoffconstraint=conflict

Range: boolean

Default: 0

costStrategy: How to use costs for branching priorities

Value 'priorities' assigns highest priority to variables with largest absolute cost. This primitive strategy can be surprisingly effective. Value 'columnorder' assigns the priorities 1, 2, 3, ... with respect to the column ordering. Value '01first' ('01last') assignes two sets of priorities such that binary variables get high (low) priority. Value 'length' assigns high priority to variables that occur in many equations.

value meaning
off
priorities
columnOrder
01first
binaryfirst This is a deprecated setting. Please use 01first.
01last
binarylast This is a deprecated setting. Please use 01last.
length
singletons
nonzero
generalForce

Default: off

crash: Whether to create basis for problem

If crash is set to 'on' and there is an all slack basis then Clp will flip or put structural variables into the basis with the aim of getting dual feasible. On average, dual simplex seems to perform better without it and there are alternative types of 'crash' for primal simplex, e.g. 'idiot' or 'sprint'. A variant due to Solow and Halim which is as 'on' but just flips is also available.

Range: off, on, solow_halim, lots, idiot1, idiot2, idiot3, idiot4, idiot5, idiot6, idiot7

Default: off

crossover: Whether to get a basic solution with the simplex algorithm after the barrier algorithm finished

Interior point algorithms do not obtain a basic solution. This option will crossover to a basic solution suitable for ranging or branch and cut.

value meaning
on
off
presolve
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: on

cut_passes_root: Number of rounds that cut generators are applied in the root node

The default is to do 100 passes if the problem has less than 500 columns, 100 passes (but stop if the drop in the objective function value is small) if the problem has less than 5000 columns, and 20 passes otherwise. A negative value -n means that n passes are also applied if the objective does not drop.

Range: {-∞, ..., ∞}

Default: 20 or 100

Synonym: passCuts

cut_passes_slow: Maximum number of rounds for slower cut generators

Some cut generators are fairly slow - this limits the number of times they are tried. The cut generators identified as 'may be slow' at present are Lift and project cuts and both versions of Reduce and Split cuts.

Range: {-1, ..., ∞}

Default: 10

Synonym: slowcutpasses

cut_passes_tree: Number of rounds that cut generators are applied in the tree

The default is to do one pass. A negative value -n means that n passes are also applied if the objective does not drop.

Range: {-∞, ..., ∞}

Default: 10

Synonym: passTreeCuts

cutDepth: Depth in tree at which to do cuts

Cut generators may be off, on, on only at the root node, or on if they look useful. Setting this option to a positive value K let CBC call a cutgenerator on a node whenever the depth in the tree is a multiple of K. The default of -1 lets CBC decide.

Range: {-1, ..., ∞}

Default: -1

cutLength: Length of a cut

At present this only applies to Gomory cuts. -1 (default) leaves as is. Any value >0 says that all cuts ≤ this length can be generated both at root node and in tree. 0 says to use some dynamic lengths. If value ≥10,000,000 then the length in tree is value%10000000 - so 10000100 means unlimited length at root and 100 in tree.

Range: {-1, ..., ∞}

Default: -1

cutoff: Bound on the objective value for all solutions

All solutions must have a better objective value than the value of this option. CBC also updates this value whenever it obtains a solution to the value of the objective function of the solution minus the cutoff increment.

Range: real

Default: GAMS cutoff

cutoffConstraint: Whether to use cutoff as constraint

For some problems, cut generators and general branching work better if the problem would be infeasible if the cost is too high. If this option is enabled, the objective function is added as a constraint which right hand side is set to the current cutoff value (objective value of best known solution)

value meaning
off
on
variable
forcevariable
conflict
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

Synonym: constraintfromCutoff

cuts: Switches all cut generators on or off

This can be used to switch on or off all cut generators (apart from Reduce and Split). Then one can turn individual ones off or on. Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node.

Range: off, on, root, ifmove, forceOn

Default: on

Synonym: cutsOnOff

denseThreshold: Threshold for using dense factorization

If processed problem ≤ this use dense factorization

Range: {-1, ..., 10000}

Default: -1

Dins: Whether to try Distance Induced Neighborhood Search

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
often
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

diveSolves: Diving solve option

If >0 then do up to this many solves. However, the last digit is ignored and used for extra options: 1-3 enables fixing of satisfied integer variables (but not at bound), where 1 switches this off for that dive if the dive goes infeasible, and 2 switches it off permanently if the dive goes infeasible.

Range: {-1, ..., 200000}

Default: 100

DivingCoefficient: Whether to try Coefficient diving heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

DivingFractional: Whether to try Fractional diving heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

DivingGuided: Whether to try Guided diving heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

DivingLineSearch: Whether to try Linesearch diving heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

DivingPseudoCost: Whether to try Pseudocost diving heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

DivingRandom: Whether to try Diving heuristics

This switches on a random diving heuristic at various times. One may prefer to individually turn diving heuristics on or off. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

Synonym: DivingSome

DivingVectorLength: Whether to try Vectorlength diving heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

dualPivot: Dual pivot choice algorithm

The Dantzig method is simple but its use is deprecated. Steepest is the method of choice and there are two variants which keep all weights updated but only scan a subset each iteration. Partial switches this on while automatic decides at each iteration based on information about the factorization. The PE variants add the Positive Edge criterion. This selects incoming variables to try to avoid degenerate moves. See also option psi.

value meaning
automatic
dantzig
partial
steepest
PEsteepest
PEdantzig
auto Same as automatic. This is a deprecated setting.

Default: automatic

dumpsolutions: name of solutions index gdx file for writing alternate solutions

The name of a solutions index gdx file for writing alternate solutions found by CBC. The GDX file specified by this option will contain a set called index that contains the names of GDX files with the individual solutions.

Range: string

Default: empty

dumpsolutionsmerged: name of gdx file for writing all alternate solutions

Range: string

Default: empty

dwHeuristic: Whether to try Dantzig Wolfe heuristic

This heuristic is very very compute intensive. It tries to find a Dantzig Wolfe structure and use that. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

Range: off, on, both, before

Default: off

expensiveStrong: Whether to do even more strong branching

Strategy for extra strong branching. 0 is normal strong branching. 1, 2, 4, and 6 does strong branching on all fractional variables if at the root node (1), at depth less than modifier (2), objective equals best possible (4), or at depth less than modifier and objective equals best possible (6). 11, 12, 14, and 16 are like 1, 2, 4, and 6, respecitively, but do strong branching on all integer (incl. non-fractional) variables. Values ≥ 100 are used to specify a depth limit (value/100), otherwise 5 is used. If the values ≥ 100, then above rules are applied to value%100.

Range: {0, ..., ∞}

Default: 0

extraVariables: Allow creation of extra integer variables

Switches on a trivial re-formulation that introduces extra integer variables to group together variables with same cost.

Range: {-∞, ..., ∞}

Default: 0

factorization: Which factorization to use

The default is to use the normal CoinFactorization, but other choices are a dense one, OSL's, or one designed for small problems.

Range: normal, dense, simple, osl

Default: normal

feaspump: Whether to try the Feasibility Pump heuristic

This heuristic is due to Fischetti, Glover, and Lodi and uses a sequence of LPs to try and get an integer feasible solution. Some fine tuning is available by options passFeasibilityPump and pumpTune. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: on

Synonym: feasibilityPump

feaspump_artcost: Costs ≥ this treated as artificials in feasibility pump

A value of 0.0 means off. Otherwise, variables with costs ≥ this are treated as artificial variables and fixed to lower bound in feasibility pump.

Range: [0, ∞]

Default: 0

Synonym: artificialCost

feaspump_cutoff: Fake cutoff for use in feasibility pump

A value of 0.0 means off. Otherwise, add a constraint forcing objective below this value in feasibility pump

Range: real

Default: 0

Synonym: pumpCutoff

feaspump_fracbab: Fraction in feasibility pump

After a pass in the feasibility pump, variables which have not moved about are fixed and if the preprocessed model is smaller than this fraction of the original problem, a few nodes of branch and bound are done on the reduced problem.

Range: [1e-05, 1.1]

Default: 0.5

Synonym: fractionforBAB

feaspump_increment: Fake increment for use in feasibility pump

A value of 0.0 means off. Otherwise use as absolute increment to cutoff when solution found in feasibility pump

Range: real

Default: 0

Synonym: pumpIncrement

feaspump_passes: How many passes to do in the Feasibility Pump heuristic

Range: {0, ..., 10000}

Default: 20

Synonym: passFeasibilityPump

fixOnDj: Try heuristic based on fixing variables with reduced costs greater than this

If this is set integer variables with reduced costs greater than this will be fixed before branch and bound - use with extreme caution!

Range: real

Default: -1

flowCoverCuts: Whether to use Flow Cover cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglFlowCover

Range: off, on, root, ifmove, forceOn, onglobal

Default: ifmove

gamma: Whether to regularize barrier

Range: off, on, gamma, delta, onstrong, gammastrong, deltastrong

Default: off

gomoryCuts: Whether to use Gomory cuts

The original cuts - beware of imitations! Having gone out of favor, they are now more fashionable as LP solvers are more robust and they interact well with other cuts. They will almost always give cuts (although in this executable they are limited as to number of variables in cut). However the cuts may be dense so it is worth experimenting (Long allows any length). Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglGomory

Range: off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceLongOn, long

Default: ifmove

gomorycuts2: Whether to use alternative Gomory cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. This version is by Giacomo Nannicini and may be more robust than gomoryCuts.

Range: off, on, root, ifmove, forceOn, endonly, long, longroot, longifmove, forceLongOn, longendonly

Default: off

Synonym: GMICuts

greedyHeuristic: Whether to use a greedy heuristic

This heuristic tries to obtain a feasible solution by just fixing a percentage of variables and then try a small branch and cut run. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

Range: off, on, both, before

Default: on

heuristics: Switches most primal heuristics on or off

This option can be used to switch on or off all heuristics that search for feasible solutions, except for the local tree search, as it dramatically alters the search. Then individual heuristics can be turned off or on.

Range: boolean

Default: 1

Synonym: heuristicsOnOff

hOptions: Heuristic options

Value 1 stops heuristics immediately if the allowable gap has been reached. Other values are for the feasibility pump - 2 says do exact number of passes given, 4 only applies if an initial cutoff has been given and says relax after 50 passes, while 8 will adapt the cutoff rhs after the first solution if it looks as if the code is stalling.

Range: {-∞, ..., ∞}

Default: 0

idiotCrash: Whether to try idiot crash

This is a type of 'crash' which works well on some homogeneous problems. It works best on problems with unit elements and rhs but will do something to any model. It should only be used before the primal simplex algorithm. It can be set to -1 when the code decides for itself whether to use it, 0 to switch off, or n > 0 to do n passes.

Range: {-1, ..., ∞}

Default: -1

increment: A valid solution must be at least this much better than last integer solution

Whenever a solution is found the bound on the objective value for new solutions is set to the objective function of the found solution (in a minimization sense) plus this. If it is not set then CBC will try and work one out, e.g. if all objective coefficients are multiples of 0.01 and only integer variables have entries in the objective function, then the increment can be set to 0.01. Be careful if setting this to a negative value!

Range: real

Default: GAMS cheat

infeasibilityWeight: Each integer infeasibility is expected to cost this much

A primitive way of deciding which node to explore next. Satisfying each integer infeasibility is expected to cost this much.

Range: [0, ∞]

Default: 0

iterlim: Maximum number of iterations before stopping

For an LP, this is the maximum number of iterations to solve the LP. For a MIP, this option is ignored.

Range: {0, ..., ∞}

Default: GAMS iterlim

Synonym: maxIterations

KKT: Whether to use KKT factorization in barrier

Range: boolean

Default: 0

knapsackCuts: Whether to use Knapsack cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglKnapsackCover

Range: off, on, root, ifmove, forceOn, onglobal, forceandglobal

Default: ifmove

lagomoryCuts: Whether to use Lagrangean Gomory cuts

This is a gross simplification of 'A Relax-and-Cut Framework for Gomory's Mixed-Integer Cuts' by Matteo Fischetti & Domenico Salvagnin. This simplification just uses original constraints while modifying objective using other cuts. So you don't use messy constraints generated by Gomory etc. A variant is to allow non messy cuts e.g. clique cuts. So 'only' does this while 'clean' also allows integral valued cuts. 'End' is recommended and waits until other cuts have finished before it does a few passes. The length options for gomory cuts are used.

Range: off, endonlyroot, endcleanroot, root, endonly, endclean, endboth, onlyaswell, cleanaswell, bothaswell, onlyinstead, cleaninstead, bothinstead, onlyaswellroot, cleanaswellroot, bothaswellroot

Default: off

latwomirCuts: Whether to use Lagrangean TwoMir cuts

This is a Lagrangean relaxation for TwoMir cuts. See lagomoryCuts for description of options.

Range: off, endonlyroot, endcleanroot, endbothroot, endonly, endclean, endboth, onlyaswell, cleanaswell, bothaswell, onlyinstead, cleaninstead, bothinstead

Default: off

liftAndProjectCuts: Whether to use Lift and Project cuts

These cuts may be expensive to compute. Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglLandP

Range: off, on, root, ifmove, forceOn

Default: off

localTreeSearch: Whether to use local tree search when a solution is found

The heuristic is from Fischetti and Lodi and is not really a heuristic although it can be used as one (with limited functionality). It is not switched on when heuristics are switched on.

Range: boolean

Default: 0

loglevel: amount of output printed by CBC

Range: {0, ..., ∞}

Default: 1

maxFactor: Maximum number of iterations between refactorizations

If this is left at its default value of 200 then CLP will guess a value to use. CLP may decide to re-factorize earlier for accuracy.

Range: {1, ..., ∞}

Default: 200

maxsol: Maximum number of solutions to save

Maximal number of solutions to store during search and to dump into gdx files if dumpsolutions options is set.

Range: {0, ..., ∞}

Default: 100

Synonym: maxSavedSolutions

mipstart: whether it should be tried to use the initial variable levels as initial MIP solution

This option controls the use of advanced starting values for mixed integer programs. A setting of 1 indicates that the variable level values should be checked to see if they provide an integer feasible solution before starting optimization.

Range: boolean

Default: 0

mirCuts: Whether to use Mixed Integer Rounding cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglMixedIntegerRounding2

Range: off, on, root, ifmove, forceOn, onglobal

Default: ifmove

Synonym: mixedIntegerRoundingCuts

multipleRootPasses: Do multiple root passes to collect cuts and solutions

Solve (in parallel, if enabled) the root phase this number of times, each with its own different seed, and collect all solutions and cuts generated. The actual format is aabbcc where aa is the number of extra passes; if bb is non zero, then it is number of threads to use (otherwise uses threads setting); and cc is the number of times to do root phase. The solvers do not interact with each other. However if extra passes are specified then cuts are collected and used in later passes - so there is interaction there. Some parts of this implementation have their origin in idea of Andrea Lodi, Matteo Fischetti, Michele Monaci, Domenico Salvagnin, and Andrea Tramontani.

Range: {0, ..., ∞}

Default: 0

naiveHeuristics: Whether to try some stupid heuristic

This is naive heuristics which, e.g., fix all integers with costs to zero!. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

nodeStrategy: What strategy to use to select the next node from the branch and cut tree

Normally before a feasible solution is found, CBC will choose a node with fewest infeasibilities. Alternatively, one may choose tree-depth as the criterion. This requires the minimal amount of memory, but may take a long time to find the best solution. Additionally, one may specify whether up or down branches must be selected first (the up-down choice will carry on after a first solution has been bound). The default choice 'hybrid' does breadth first on small depth nodes and then switches to 'fewest'.

Range: hybrid, fewest, depth, upfewest, downfewest, updepth, downdepth

Default: fewest

nodlim: node limit

Maximum number of nodes that are enumerated in the Branch and Bound tree search.

Range: {-1, ..., ∞}

Default: GAMS nodlim

Synonyms: maxNodes nodelim

optca: Stop when gap between best possible and best less than this

If the gap between best known solution and the best possible solution is less than this value, then the search will be terminated. Also see ratioGap.

Range: [0, ∞]

Default: GAMS optca

Synonym: allowableGap

optcr: Stop when gap between best possible and best known is less than this fraction of larger of two

If the gap between the best known solution and the best possible solution is less than this fraction of the objective value at the root node then the search will terminate. See 'allowableGap' for a way of using absolute value rather than fraction.

Range: [0, ∞]

Default: GAMS optcr

Synonym: ratioGap

OrbitalBranching: Whether to try orbital branching

This switches on Orbital branching. Value 'on' just adds orbital, 'strong' tries extra fixing in strong branching. 'cuts' just adds global cuts to break symmetry. 'fastish' only computes symmetry at root. 'lightweight' is as on where computation seems cheap

Range: off, on, strong, force, simple, fastish, lightweight, moreprinting, cuts, cutslight

Default: off

parallelmode: whether to run opportunistic or deterministic

Determines whether a parallel MIP search (threads > 1) should be done in a deterministic (i.e., reproducible) way or in a possibly faster but not necessarily reproducible way

Range: opportunistic, deterministic

Default: deterministic

passPresolve: How many passes in presolve

Normally Presolve does 10 passes but you may want to do less to make it more lightweight or do more if improvements are still being made. As Presolve will return if nothing is being taken out, you should not normally need to use this fine tuning.

Range: {-200, ..., 100}

Default: 5

perturbation: Whether to perturb the problem

Perturbation helps to stop cycling, but CLP uses other measures for this. However, large problems and especially ones with unit elements and unit right hand sides or costs benefit from perturbation. Normally CLP tries to be intelligent, but one can switch this off.

Range: boolean

Default: 1

pivotAndComplement: Whether to try Pivot and Complement heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

Range: off, on, both, before

Default: off

pivotAndFix: Whether to try Pivot and Fix heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

preprocess: Whether to use integer preprocessing

This tries to reduce size of model in a similar way to presolve and it also tries to strengthen the model - this can be very useful and is worth trying. Value 'save' saves the presolved problem to a file presolved.mps. Value 'equal' will turn inequality-cliques into equalities. Value 'sos' lets CBC search for rows with upper bound 1 and where all nonzero coefficients are 1 and creates special ordered sets if the sets are not overlapping and all integer variables (except for at most one) are in the sets. Value 'trysos' is same as 'sos', but allows any number of integer variables outside of sets. Value 'equalall' lets CBC turn all valid inequalities into equalities by adding integer slack variables.

Range: off, on, save, equal, sos, trysos, equalall, strategy, aggregate, forcesos, stopaftersaving

Default: sos

presolve: Whether to presolve problem

Presolve analyzes the model to find such things as redundant equations, equations which fix some variables, equations which can be transformed into bounds, etc. For the initial solve of any problem this is worth doing unless one knows that it will have no effect. Option 'on' will normally do 5 passes, while using 'more' will do 10.

value meaning
on
off
more
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: on

primalPivot: Primal pivot choice algorithm

The Dantzig method is simple but its use is deprecated. Exact devex is the method of choice and there are two variants which keep all weights updated but only scan a subset each iteration. Partial switches this on while 'change' initially does 'dantzig' until the factorization becomes denser. This is still a work in progress. The PE variants add the Positive Edge criterion. This selects incoming variables to try to avoid degenerate moves. See also Towhidi, M., Desrosiers, J., Soumis, F., The positive edge criterion within COIN-OR's CLP; Omer, J., Towhidi, M., Soumis, F., The positive edge pricing rule for the dual simplex.

value meaning
automatic
exact
dantzig
partial
steepest
change
sprint
PEsteepest
PEdantzig
auto Same as automatic. This is a deprecated setting.

Default: automatic

primalWeight: Initially algorithm acts as if it costs this much to be infeasible

The primal algorithm in Clp is a single phase algorithm as opposed to a two phase algorithm where you first get feasible then optimal. So Clp is minimizing this weight times the sum of primal infeasibilities plus the true objective function (in minimization sense). Too high a value may mean more iterations, while too low a value means the algorithm may iterate into the wrong directory for long and then has to increase the weight in order to get feasible.

Range: [1e-20, ∞]

Default: 1e+10

printfrequency: frequency of status prints

Controls the number of nodes that are evaluated between status prints.

Range: {0, ..., ∞}

Default: 0

probingCuts: Whether to use Probing cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Value 'forceOnBut' turns on probing and forces CBC to do probing at every node, but does only probing, not strengthening etc. Value 'strong' forces CBC to strongly do probing at every node, that is, also when CBC would usually turn it off because it hasn't found something. Value 'forceonbutstrong' is like 'forceonstrong', but does only probing (column fixing) and turns off row strengthening, so the matrix will not change inside the branch and bound. Reference: https://github.com/coin-or/Cgl/wiki/CglProbing

Range: off, on, root, ifmove, forceOn, onglobal, forceonglobal, forceOnBut, forceOnStrong, forceOnButStrong, strongRoot

Default: ifmove

proximitySearch: Whether to do proximity search heuristic

This heuristic looks for a solution close to the incumbent solution (Fischetti and Monaci, 2012). The idea is to define a sub-MIP without additional constraints but with a modified objective function intended to attract the search in the proximity of the incumbent. The approach works well for 0-1 MIPs whose solution landscape is not too irregular (meaning the there is reasonable probability of finding an improved solution by flipping a small number of binary variables), in particular when it is applied to the first heuristic solutions found at the root node. Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
10
100
300
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

psi: Two-dimension pricing factor for Positive Edge criterion

The Positive Edge criterion has been added to select incoming variables to try and avoid degenerate moves. Variables not in the promising set have their infeasibility weight multiplied by psi, so 0.01 would mean that if there were any promising variables, then they would always be chosen, while 1.0 effectively switches the algorithm off. There are two ways of switching this feature on. One way is to set psi to a positive value and then the Positive Edge criterion will be used for both primal and dual simplex. The other way is to select PEsteepest in dualpivot choice (for example), then the absolute value of psi is used. Code donated by Jeremy Omer. See Towhidi, M., Desrosiers, J., Soumis, F., The positive edge criterion within COIN-OR's CLP; Omer, J., Towhidi, M., Soumis, F., The positive edge pricing rule for the dual simplex.

Range: [-1.1, 1.1]

Default: -0.5

randomizedRounding: Whether to try randomized rounding heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

randomSeedCbc: Random seed for Cbc

Allows initialization of the random seed for pseudo-random numbers used in heuristics such as the Feasibility Pump to decide whether to round up or down. The special value of 0 lets Cbc use the time of the day for the initial seed.

Range: {-1, ..., ∞}

Default: -1

Synonym: randomCbcSeed

randomSeedClp: Random seed for Clp

Initialization of the random seed for pseudo-random numbers used to break ties in degenerate problems. This may yield a different continuous optimum and, in the context of Cbc, different cuts and heuristic solutions. The special value of 0 lets CLP use the time of the day for the initial seed.

Range: {0, ..., ∞}

Default: 1234567

Synonym: randomSeed

reduceAndSplitCuts: Whether to use Reduce-and-Split cuts

These cuts may be expensive to generate. Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglRedSplit

Range: off, on, root, ifmove, forceOn

Default: off

reduceAndSplitCuts2: Whether to use Reduce-and-Split cuts - style 2

This switches on reduce and split cuts (either at root or in entire tree). This version is by Giacomo Nannicini based on Francois Margot's version. Standard setting only uses rows in tableau ≤ 256, long uses all. These cuts may be expensive to generate. See option cuts for more information on the possible values.

Range: off, on, root, longOn, longRoot

Default: off

Synonym: reduce2AndSplitCuts

Rens: Whether to try Relaxation Enforced Neighborhood Search

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve. Value 'on' just does 50 nodes. 200, 1000, and 10000 does that many nodes.

value meaning
off
on
both
before
200
1000
10000
dj
djbefore
usesolution
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

residualCapacityCuts: Whether to use Residual Capacity cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglResidualCapacity

Range: off, on, root, ifmove, forceOn

Default: off

reslim: maximum seconds

Range: [-1, ∞]

Default: GAMS reslim

Synonym: seconds

Rins: Whether to try Relaxed Induced Neighborhood Search

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
often
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: off

roundingHeuristic: Whether to use simple (but effective) Rounding heuristic

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

value meaning
off
on
both
before
0 Same as off. This is a deprecated setting.
1 Same as on. This is a deprecated setting.

Default: on

scaling: Whether to scale problem

Scaling can help in solving problems which might otherwise fail because of lack of accuracy. It can also reduce the number of iterations. It is not applied if the range of elements is small. When the solution is evaluated in the unscaled problem, it is possible that small primal and/or dual infeasibilities occur. Option 'equilibrium' uses the largest element for scaling. Option 'geometric' uses the squareroot of the product of largest and smallest element. Option 'auto' let CLP choose a method that gives the best ratio of the largest element to the smallest one.

value meaning
off
equilibrium
geometric
automatic
dynamic
rowsonly
auto Same as automatic. This is a deprecated setting.

Default: automatic

smallFactorization: Threshold for using small factorization

If processed problem ≤ this use small factorization

Range: {-1, ..., 10000}

Default: -1

sollim: Maximum number of feasible solutions to get

Range: {1, ..., ∞}

Default: ∞

Synonym: maxSolutions

solvefinal: final solve of MIP with fixed discrete variables

Whether the MIP with discrete variables fixed to solution values should be solved after CBC finished.

Range: boolean

Default: 1

solvetrace: name of trace file for solving information

Name of file for writing solving progress information during solve.

Range: string

Default: empty

solvetracenodefreq: frequency in number of nodes for writing to solve trace file

Range: {0, ..., ∞}

Default: 100

solvetracetimefreq: frequency in seconds for writing to solve trace file

Range: [0, ∞]

Default: 5

sosPrioritize: How to deal with SOS priorities

This sets priorities for SOS. Values 'high' and 'low' just set a priority relative to the for integer variables. Value 'orderhigh' gives first highest priority to the first SOS and integer variables a low priority. Value 'orderlow' gives integer variables a high priority then SOS in order.

Range: off, high, low, orderhigh, orderlow

Default: off

sparseFactor: Whether factorization treated as sparse

Range: boolean

Default: 1

special: options passed unseen to CBC

This parameter let you specify CBC options which are not supported by the GAMS/CBC interface. The string value given to this parameter is split up into parts at each space and added to the array of parameters given to CBC (in front of the -solve command). Hence, you can use it like the command line parameters for the CBC standalone version.

Range: string

Default: empty

sprintCrash: Whether to try sprint crash

For long and thin problems this method may solve a series of small problems created by taking a subset of the columns. The idea as 'Sprint' was introduced by J. Forrest after an LP code of that name of the 60's which tried the same tactic (not totally successfully). CPLEX calls it 'sifting'. -1 lets CLP automatically choose the number of passes, 0 is off, n is number of passes

Range: {-1, ..., ∞}

Default: -1

Synonym: sifting

startalg: LP solver for root node

Determines the algorithm to use for an LP or the initial LP relaxation if the problem is a MIP.

value meaning
primal Primal Simplex algorithm
dual Dual Simplex algorithm
barrier Primal-dual predictor-corrector algorithm

Default: dual

strategy: Switches on groups of features

This turns on newer features. Use 0 for easy problems, 1 is default, 2 is aggressive. 1 uses Gomory cuts with a tolerance of 0.01 at the root node, does a possible restart after 100 nodes if many variables could be fixed, activates a diving and RINS heuristic, and makes the feasibility pump more aggressive.

Range: {0, ..., 2}

Default: 1

strongBranching: Number of variables to look at in strong branching

In order to decide which variable to branch on, the code will choose up to this number of unsatisfied variables to try minimal up and down branches on. Then the most effective one is chosen. If a variable is branched on many times then the previous average up and down costs may be used - see also option trustPseudoCosts.

Range: {0, ..., ∞}

Default: 5

substitution: How long a column to substitute for in presolve

Normally Presolve gets rid of 'free' variables when there are no more than 3 coefficients in a row. If you increase this, the number of rows may decrease but the number of coefficients may increase.

Range: {0, ..., 10000}

Default: 3

threads: Number of threads to try and use

If set to 0, then multithreading of Cbc itself is disabled, but all available processors are made available for linear algebra subroutines.

Range: {0, ..., 99}

Default: GAMS threads

tol_dual: For an optimal solution no dual infeasibility may exceed this value

Normally the default tolerance is fine, but one may want to increase it a bit if the dual simplex algorithm seems to be having a hard time. One method which can be faster is to use a large tolerance e.g. 1.0e-4 and the dual simplex algorithm and then to clean up the problem using the primal simplex algorithm with the correct tolerance (remembering to switch off presolve for this final short clean up phase).

Range: [1e-20, ∞]

Default: 1e-07

Synonym: dualTolerance

tol_integer: For a feasible solution no integer variable may be more than this away from an integer value

Beware of setting this smaller than the primal feasibility tolerance.

Range: [1e-20, 0.5]

Default: 1e-07

Synonym: integerTolerance

tol_presolve: Tolerance to use in presolve

One may want to increase this tolerance if presolve says the problem is infeasible and one has awkward numbers and is sure that the problem is really feasible.

Range: [1e-20, ∞]

Default: 1e-08

Synonym: preTolerance

tol_primal: For a feasible solution no primal infeasibility, i.e., constraint violation, may exceed this value

Normally the default tolerance is fine, but one may want to increase it a bit if the primal simplex algorithm seems to be having a hard time.

Range: [1e-20, ∞]

Default: 1e-07

Synonym: primalTolerance

trustPseudoCosts: Number of branches before we trust pseudocosts

Using strong branching computes pseudo-costs. This parameter determines after how many branches for a variable we just trust the pseudo costs and do not do any more strong branching.

Range: {-3, ..., ∞}

Default: 10

twoMirCuts: Whether to use Two phase Mixed Integer Rounding cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. Reference: https://github.com/coin-or/Cgl/wiki/CglTwomir

Range: off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceLongOn

Default: root

VndVariableNeighborhoodSearch: Whether to try Variable Neighborhood Search

Value 'on' means to use the heuristic in each node of the tree, i.e. after preprocessing. Value 'before' means use the heuristic only if option doHeuristics is used. Value 'both' means to use the heuristic if option doHeuristics is used and during solve.

Range: off, on, both, before, intree

Default: off

vubheuristic: Type of VUB heuristic

This heuristic tries and fix some integer variables.

Range: {-2, ..., 20}

Default: -1

writemps: create MPS file for problem

Write the problem formulation in MPS format. The parameter value is the name of the MPS file.

Range: string

Default: empty

zeroHalfCuts: Whether to use zero half cuts

Value 'on' enables the cut generator and CBC will try it in the branch and cut tree (see cutDepth on how to fine tune the behavior). Value 'root' lets CBC run the cut generator generate only at the root node. Value 'ifmove' lets CBC use the cut generator in the tree if it looks as if it is doing some good and moves the objective value. Value 'forceon' turns on the cut generator and forces CBC to use it at every node. This implementation was written by Alberto Caprara.

Range: off, on, root, ifmove, forceOn, onglobal

Default: ifmove