For more information about this solver please inspect the complete CBC manual.
General Options | |
---|---|
iterlim | iteration limit |
names | specifies whether variable and equation names should be given to CBC |
reslim | resource limit |
special | options passed unseen to CBC |
writemps | create MPS file for problem |
LP Options | |
crash | use crash method to get dual feasible |
crossover | crossover to simplex algorithm after barrier |
dualpivot | dual pivot choice algorithm |
idiotcrash | idiot crash |
maxfactor | maximum number of iterations between refactorizations |
perturbation | perturbation of problem |
presolve | switch for initial presolve of LP |
primalpivot | primal pivot choice algorithm |
scaling | scaling method |
sifting | synonym for sprint crash |
sprintcrash | sprint crash |
startalg | LP solver for root node |
tol_dual | dual feasibility tolerance |
tol_presolve | tolerance used in presolve |
tol_primal | primal feasibility tolerance |
MIP Options | |
coststrategy | how to use costs as priorities |
cutoff | cutoff for objective function value |
increment | increment of cutoff when new incumbent |
mipstart | whether it should be tried to use the initial variable levels as initial MIP solution |
nodelim | node limit |
nodestrategy | how to select nodes |
nodlim | node limit |
optca | absolute stopping tolerance |
optcr | relative stopping tolerance |
preprocess | integer presolve |
printfrequency | frequency of status prints |
sollim | limit on number of solutions |
strongbranching | strong branching |
threads | number of threads to use (available on Unix variants only) |
tol_integer | tolerance for integrality |
trustpseudocosts | after howmany nodes we trust the pseudo costs |
MIP Options for Cutting Plane Generators | |
cliquecuts | Clique Cuts |
cutdepth | depth in tree at which cuts are applied |
cuts | global switch for cutgenerators |
cut_passes_root | number of cut passes at root node |
cut_passes_tree | number of cut passes at nodes in the tree |
flowcovercuts | Flow Cover Cuts |
gomorycuts | Gomory Cuts |
knapsackcuts | Knapsack Cover Cuts |
liftandprojectcuts | Lift and Project Cuts |
mircuts | Mixed Integer Rounding Cuts |
probingcuts | Probing Cuts |
reduceandsplitcuts | Reduce and Split Cuts |
residualcapacitycuts | Residual Capacity Cuts |
twomircuts | Two Phase Mixed Integer Rounding Cuts |
MIP Options for Heuristics | |
combinesolutions | combine solutions heuristic |
feaspump | feasibility pump |
feaspump_passes | number of feasibility passes |
greedyheuristic | greedy heuristic |
heuristics | global switch for heuristics |
localtreesearch | local tree search heuristic |
rins | relaxed induced neighborhood search |
roundingheuristic | rounding heuristic |
MIP Options for the GAMS Branch Cut and Heuristic Facility | |
usercutcall | The GAMS command line to call the cut generator |
usercutfirst | Calls the cut generator for the first n nodes |
usercutfreq | Determines the frequency of the cut generator model calls |
usercutinterval | Determines the interval when to apply the multiplier for the frequency of the cut generator model calls |
usercutmult | Determines the multiplier for the frequency of the cut generator model calls |
usercutnewint | Calls the cut generator if the solver found a new integer feasible solution |
usergdxin | The name of the GDX file read back into CBC |
usergdxname | The name of the GDX file exported from the solver with the solution at the node |
usergdxnameinc | The name of the GDX file exported from the solver with the incumbent solution |
usergdxprefix | Prefixes usergdxin, usergdxname, and usergdxnameinc |
userheurcall | The GAMS command line to call the heuristic |
userheurfirst | Calls the heuristic for the first n nodes |
userheurfreq | Determines the frequency of the heuristic model calls |
userheurinterval | Determines the interval when to apply the multiplier for the frequency of the heuristic model calls |
userheurmult | Determines the multiplier for the frequency of the heuristic model calls |
userheurnewint | Calls the heuristic if the solver found a new integer feasible solution |
userheurobjfirst | Calls the heuristic if the LP value of the node is closer to the best bound than the current incumbent |
userjobid | Postfixes gdxname, gdxnameinc, and gdxin |
userkeep | Calls gamskeep instead of gams |
Determines whether and when CBC should try to generate clique cuts.
See the option cuts for an explanation on the different values.
Clique cuts are of the form "sum of a set of variables <= 1".
Reference: M. Eso, Parallel branch and cut for set partitioning, Cornell University, 1999.
(default = ifmove)
This parameter control the use of a heuristic which does branch and cut on the given problem by just using variables which have appeared in one or more solutions.
It is obviously only tried after two or more solutions.
(default = 1)
0 | . Turns the combine solutions heuristic off. |
1 | . Turns the combine solutions heuristic on. |
This parameter influence the branching variable selection.
If turned on, then the variables are sorted in order of their absolute costs, and branching is done first on variables with largest cost.
This primitive strategy can be surprisingly effective.
(default = off)
off | . Turns off a specific cost strategy. |
priorities | . Assigns highest priority to variables with largest absolute cost. |
columnorder | . Assigns the priorities 1, 2, 3,.. with respect to the column ordering. |
binaryfirst | . Handles two sets of priorities such that binary variables get high priority. |
binarylast | . Handles two sets of priorities such that binary variables get low priority. |
length | . Assigns high priority to variables that are at most nonzero. |
Determines whether CLP should use a crash algorithm to find a dual feasible basis.
(default = off)
off | . Switch off the creation of dual feasible basis by the crash method. |
on | . Switch on the creation of dual feasible basis by the crash method. |
solow_halim | . Switch on a crash variant due to Solow and Halim. |
halim_solow | . Switch on a crash variant due to Solow and Halim with modifications of John J. Forrest. |
Determines whether CLP should crossover to 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.
With the current state of the quadratic solver it may be a good idea to switch off the crossover for quadratic problems (and maybe presolve as well).
CLP does this.
(default = 1)
0 | . Turn off crossover to simplex algorithm after barrier algorithm finished. |
1 | . Turn on crossover to simplex algorithm after barrier algorithm finished. |
If the depth in the tree is a multiple of cutdepth, then cut generators are applied.
Cut generators may be off, on only at the root, on if they look useful, or on at some interval.
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.
(default = -1)
-1 | . Does not turn on cut generators because the depth of the tree is a multiple of a value. |
CBC stops if the objective function values exceeds (in case of maximization) or falls below (in case of minimization) this value.
(default = GAMS cutoff)
A global switch to turn on or off the cutgenerators.
This can be used to switch on or off all default cut generators.
Then you can set individual ones off or on using the specific options.
(default = on)
off | . Turns off all cut generators. |
on | . Turns on all default cut generators and CBC will try them in the branch and cut tree (see the option cutdepth on how to fine tune the behaviour). |
root | . Let CBC generate cuts only at the root node. |
ifmove | . Let CBC use cut generators in the tree if they look as if they are doing some good and moving the objective value. |
forceon | . Turns on all default cut generators and force CBC to use the cut generator at every node. |
Determines the number of rounds that the cut generators are applied in the root node.
A negative value -n means that n passes are also applied if the objective does not drop.
(default = 100 passes if the MIP has less than 500 columns, 100 passes (but stop if the drop in the objective function value is small) if it has less than 5000 columns, and 20 passes otherwise.)
Determines the number of rounds that the cut generators are applied in the nodes of the tree other than the root node.
A negative value -n means that n passes are also applied if the objective does not drop.
(default = 1)
Choice of the pivoting strategy in the dual simplex algorithm.
(default = auto)
auto | . Let CLP use a variant of the steepest choice method which starts like partial, i.e., scans only a subset of the primal infeasibilities, and later changes to full pricing when the factorization becomes denser. |
dantzig | . Let CLP use the pivoting strategy due to Dantzig. |
steepest | . Let CLP use the steepest choice method. |
partial | . Let CLP use a variant of the steepest choice method which scans only a subset of the primal infeasibilities to select the pivot step. |
This parameter control the use of the feasibility pump heuristic at the root.
This is due to Fischetti and Lodi and uses a sequence of LPs to try and get an integer feasible solution.
Some fine tuning is available by the option feaspump_passes.
Reference: M. Fischetti, F. Glover, and A. Lodi, The feasibility pump, Math. Programming, 104 (2005), pp. 91-104.
(default = 1)
0 | . Turns the feasibility pump off. |
1 | . Turns the feasiblity pump on. |
This fine tunes the feasibility pump heuristic by setting the number of passes.
(default = 20)
Determines whether and when CBC should try to generate flow cover cuts.
See the option cuts for an explanation on the different values.
The flow cover cut generator generates lifted simple generalized flow cover inequalities.
Since flow cover inequalities are generally not facet-defining, they are lifted to obtain stronger inequalities.
Although flow cover inequalities requires a special problem structure to be generated, they are quite useful for solving general mixed integer linear programs.
Reference: Z. Gu, G.L. Nemhauser, M.W.P. Savelsbergh, Lifted flow cover inequalities for mixed 0-1 integer programs, Math. Programming A 85 (1999) 439-467.
(default = ifmove)
Determines whether and when CBC should try to generate mixed-integer Gomory cuts.
See the option cuts for an explanation on the different values.
Reference: Laurence A. Wolsey, Integer Programming, Wiley, John & Sons, (1998) 124-132.
(default = ifmove)
This parameter control the use of a pair of greedy heuristic which will try to obtain a solution.
It may just fix a percentage of variables and then try a small branch and cut run.
(default = on)
off | . Turns off the greedy heuristic. |
on | . Turns on the greedy heuristic. |
root | . Turns on the greedy heuristic only for the root node. |
This parameter can be used to switch on or off all heuristics, except for the local tree search as it dramatically alters the search.
Then you can set individual ones off or on.
(default = 1)
0 | . Turns all MIP heuristics off. |
1 | . Turns all MIP heuristics on (except local tree search). |
This is a type of `crash' which works well on some homogeneous problems.
It works best on problems with unit elements and right hand sides but will do something to any model.
It should only be used before the primal simplex algorithm.
A positive number determines the number of passes that idiotcrash is called.
(default = -1)
-1 | . Let CLP decide by itself whether to use it. |
0 | . Switch this method off. |
A valid solution must be at least this much better than last integer solution.
If this option is not set then it 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 objective then this can be set to 0.01.
(default = GAMS cheat)
For an LP, this is the maximum number of iterations to solve the LP.
For a MIP, this option is ignored.
(default = GAMS iterlim)
Determines whether and when CBC should try to generate knapsack cover cuts.
See the option cuts for an explanation on the different values.
The knapsack cover cut generator looks for a series of different types of minimal covers.
If a minimal cover is found, it lifts the associated minimal cover inequality and adds the lifted cut to the cut set.
Reference: S. Martello, and P. Toth, Knapsack Problems, Wiley, 1990, p30.
(default = ifmove)
Determines whether and when CBC should try to generate lift and project cuts.
They might be expensive to compute, thus they are switched off by default.
See the option cuts for an explanation on the different values.
Reference: E. Balas and M. Perregaard, A precise correspondence between lift-and-project cuts, simple disjunctive cuts, and mixed integer Gomory cuts for 0-1 programming. Math. Program., 94(203,Ser. B):221-245,2003.
(default = off)
This parameter control the use of a local search algorithm when a solution is found.
It is from Fischetti and Lodi and is not really a heuristic although it can be used as one (with limited functionality).
This heuristic is not controlled by the option heuristics.
Reference: M. Fischetti and A. Lodi, Local Branching, Math. Programming B, 98 (2003), pp. 23-47.
(default = 0)
0 | . Turns the local tree search off. |
1 | . Turns the local tree search on. |
Maximum number of iterations between refactorizations in CLP.
If this is left at the default value of 200 then CLP will guess at a value to use.
CLP may decide to refactorize earlier for accuracy.
(default = 200)
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.
(default = 0)
0 | . Do not use the initial variable levels. |
1 | . Try to use the initial variable levels as a MIP starting solution. |
Determines whether and when CBC should try to generate mixed integer rounding cuts.
See the option cuts for an explanation on the different values.
Reference: H. Marchand and L. A. Wolsey, Aggregation and Mixed Integer Rounding to Solve MIPs, Operations Research, 49(3), (2001).
(default = ifmove)
This option causes GAMS names for the variables and equations to be loaded into Cbc.
These names will then be used for error messages, log entries, and so forth.
Turning names off may help if memory is very tight.
(default = 0)
0 | . Do not load variable and equation names. |
1 | . Load variable and equation names. |
Maximum number of nodes that are considered in the Branch and Bound.
(default = GAMS nodlim)
This determines the strategy used to select the next node from the branch and cut tree.
(default = fewest)
hybrid | . Let CBC do first a breath search on nodes with a small depth in the tree and then switch to choose nodes with fewest infeasibilities. |
fewest | . This will let CBC choose the node with the fewest infeasibilities. |
depth | . This will let CBC always choose the node deepest in tree. It gives minimum tree size but may take a long time to find the best solution. |
upfewest | . This will let CBC choose the node with the fewest infeasibilities and do up branches first. |
downfewest | . This will let CBC choose the node with the fewest infeasibilities and do down branches first. |
updepth | . This will let CBC choose the node deepest in tree and do up branches first. |
downdepth | . This will let CBC choose the node deepest in tree and do down branches first. |
Maximum number of nodes that are considered in the Branch and Bound.
This option is overwritten by nodelim, if set.
(default = GAMS nodlim)
Absolute optimality criterion for a MIP.
CBC stops if the gap between the best known solution and the best possible solution is less than this value.
(default = GAMS optca)
Relative optimality criterion for a MIP.
CBC stops if the relative gap between the best known solution and the best possible solution is less than this value.
(default = GAMS optcr)
Determines whether CLP should perturb the problem before starting.
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 you can switch this off.
(default = 1)
0 | . Turns off perturbation of LP. |
1 | . Turns on perturbation of LP. |
This option controls the MIP specific presolve routines.
They try to reduce the size of the model in a similar way to presolve and also try to strengthen the model.
This can be very useful and is worth trying.
(default = on)
off | . Turns off the presolve routines. |
on | . Turns on the presolve routines. |
equal | . Turns on the presolve routines and let CBC turn inequalities with more than 5 elements into equalities (cliques) by adding slack variables. |
equalall | . Turns on the presolve routines and let CBC turn all inequalities into equalities by adding slack variables. |
sos | . This option let 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. |
trysos | . This option is similar to sos, but allows any number integer variables to be outside of the sets. |
Presolve analyzes the model to find such things as redundant constraints, constraints which fix some variables, constraints which can be transformed into bounds, etc.
For the initial solve of any problem this is worth doing unless you know that it will have no effect.
(default = 1)
0 | . Turns off the initial presolve. |
1 | . Turns on the initial presolve. |
Choice of the pivoting strategy in the primal simplex algorithm.
(default = auto)
auto | . Let CLP use a variant of the exact devex method. |
dantzig | . Let CLP use the pivoting strategy due to Dantzig. |
steepest | . Let CLP use the steepest choice method. |
partial | . Let CLP use a variant of the exact devex method which scans only a subset of the primal infeasibilities to select the pivot step. |
exact | . Let CLP use the exact devex method. |
change | . Let CLP initially use Dantzig pivot method until the factorization becomes denser. |
Controls the number of nodes that are evaluated between status prints.
(default = 0)
0 | . Automatic choice, which is 100 for large problems and 1000 for small problems. |
Determines whether and when CBC should try to generate cuts based on probing.
Additional to the values for the option cuts three more values are possible here.
Reference: M. Savelsbergh, Preprocessing and Probing Techniques for Mixed Integer Programming Problems, ORSA Journal on Computing 6 (1994), 445.
(default = ifmove)
off | . Turns off Probing. |
on | . Turns on Probing and CBC will try it in the branch and cut tree (see the option cutdepth how to fine tune this behaviour). |
root | . Let CBC do Probing only at the root node. |
ifmove | . Let CBC do Probing in the tree if it looks as if it is doing some good and moves the objective value. |
forceon | . Turns on Probing and forces CBC to do Probing at every node. |
forceonbut | . Turns on Probing and forces CBC to call the cut generator at every node, but does only probing, not strengthening etc. |
forceonstrong | . If CBC is forced to turn Probing on at every node (by setting this option to force), but this generator produces no cuts, then it is actually turned on only weakly (i.e., just every now and then). Setting forceonstrong forces CBC strongly to do probing at every node. |
forceonbutstrong | . This 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. |
Determines whether and when CBC should try to generate reduced and split cuts.
See the option cuts for an explanation on the different values.
Reduce and split cuts are variants of Gomory cuts.
Starting from the current optimal tableau, linear combinations of the rows of the current optimal simplex tableau are used for generating Gomory cuts.
The choice of the linear combinations is driven by the objective of reducing the coefficients of the non basic continuous variables in the resulting row.
Reference: K. Anderson, G. Cornuejols, and Yanjun Li, Reduce-and-Split Cuts: Improving the Performance of Mixed Integer Gomory Cuts, Management Science 51 (2005).
(default = off)
Determines whether and when CBC should try to generate residual capacity cuts.
See the option cuts for an explanation on the different values.
These inequalities are particularly useful for Network Design and Capacity Planning models.
References:
T.L. Magnanti, P. Mirchandani, and R. Vachani, The convex hull of two core capacitated network design problems, Math. Programming, 60 (1993), pp. 233-250.
A. Atamturk and D. Rajan, On splittable and unsplittable flow capacitated network design arc-set polyhedra, Math. Programming, 92 (2002), pp. 315-333.
(default = off)
Maximum time in seconds.
(default = GAMS reslim)
This parameter control the use of the relaxed induced neighborhood search heuristic.
This heuristic compares the current solution with the best incumbent, fixes all discrete variables with the same value, presolves the problem, and does a branch and bound for 200 nodes.
Reference: E. Danna, E. Rothberg, and C. Le Pape, Exploring relaxation induced neighborhoods to improve MIP solutions, Math. Programming, 102 (1) (2005), pp. 71-91.
(default = 0)
0 | . Turns the relaxed induced neighborhood search off. |
1 | . Turns the relaxed induced neighborhood search on. |
This parameter control the use of a simple (but effective) rounding heuristic at each node of tree.
(default = 1)
0 | . Turns the rounding heuristic off. |
1 | . Turns the rounding heuristic on. |
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.
Both methods do several passes alternating between rows and columns using current scale factors from one and applying them to the other.
(default = auto)
off | . Turns off scaling. |
auto | . Let CLP choose the scaling method automatically. It decides for one of these methods depending on which gives the better ratio of the largest element to the smallest one. |
equilibrium | . Let CLP use an equilibrium based scaling method which uses the largest scaled element. |
geometric | . Let CLP use a geometric based scaling method which uses the squareroot of the product of largest and smallest element. |
Synonym for sprintcrash.
(default = -1)
A limit on number of feasible solutions that CBC should find for a MIP.
(default = -1)
-1 | . No limit on the number of feasible solutions. |
This parameter let you specify CBC options which are not supported by the GAMS/CoinCBC 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.
For long and thin problems this method may solve a series of small problems created by taking a subset of the columns.
Cplex calls it `sifting'.
A positive number determines the number of passes that sprintcrash is called.
(default = -1)
-1 | . Let CLP decide by itself whether to use it. |
0 | . Switch this method off. |
Determines the algorithm to use for an LP or the initial LP relaxation if the problem is a MIP.
(default = dual)
primal | . Let CLP use the primal simplex algorithm. |
dual | . Let CLP use the dual simplex algorithm. |
barrier | . Let CLP use a primal dual predictor corrector algorithm. |
Determines the 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 and try minimal up and down branches.
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 the option trustpseudocosts.
(default = 5)
This option controls the multithreading feature of CBC.
A number between 1 and 100 sets the number of threads used for parallel branch and bound.
A number 100+n with n between 1 and 100 says that n threads are used to parallelize the branch and bound, but also heuristics such as RINS which do branch and bound on a reduced model also use threads.
A number 200+n with n between 1 and 100 says that n threads are used to parallelize the branch and bound, but also the cut generators at the root node (i.e., before threads are useful) are run in parallel.
A number 300+n with n between 1 and 100 combines the 100+n and 200+n options.
Thus, n threads are used to parallelize the branch and bound, but also heuristics use threads and the cut generators at the root node are run in parallel.
The 100+n, 200+n, and 300+n options are experimental.
(default = 1)
The maximum amount the dual constraints can be violated and still be considered feasible.
(default = 1e-7)
For an optimal solution, no integer variable may be farther than this from an integer value.
(default = 1e-6)
The tolerance used in presolve.
(default = 1e-8)
The maximum amount the primal constraints can be violated and still be considered feasible.
(default = 1e-7)
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.
(default = 5)
Determines whether and when CBC should try to generate two phase mixed integer rounding cuts.
See the option cuts for an explanation on the different values.
Reference: S. Dash, and O. Guenluek, Valid Inequalities Based on Simple Mixed-integer Sets, to appear in Math. Programming.
(default = root)
The GAMS command line (minus the gams executable name) to call the cut generator.
Calls the cut generator for the first n nodes.
(default = 10)
Determines the frequency of the cut generator model calls.
(default = 10)
Determines the interval when to apply the multiplier for the frequency of the cut generator model calls.
See userheurinterval for details.
(default = 100)
Determines the multiplier for the frequency of the cut generator model calls.
(default = 2)
Calls the cut generator if the solver found a new integer feasible solution.
(default = 0)
0 | . Do not call cut generator because a new integer feasible solution is found. |
1 | . Let CBC call the cut generator if a new integer feasible solution is found. |
The name of the GDX file read back into CBC.
(default = bchin.gdx)
The name of the GDX file exported from the solver with the solution at the node.
(default = bchout.gdx)
The name of the GDX file exported from the solver with the incumbent solution.
(default = bchout_i.gdx)
Prefixes to use for usergdxin, usergdxname, and usergdxnameinc.
The GAMS command line (minus the gams executable name) to call the heuristic.
Calls the heuristic for the first n nodes.
(default = 10)
Determines the frequency of the heuristic model calls.
(default = 10)
Determines the interval when to apply the multiplier for the frequency of the heuristic model calls.
For example, for the first 100 (userheurinterval) nodes, the solver call every 10th (userheurfreq) node
the heuristic.
After 100 nodes, the frequency gets multiplied by 10 (userheurmult), so that for the next 100 node the solver calls the heuristic every 20th node.
For nodes 200-300, the heuristic get called every 40th node, for nodes 300-400 every 80th node and after node 400 every 100th node.
(default = 100)
Determines the multiplier for the frequency of the heuristic model calls.
(default = 2)
Calls the heuristic if the solver found a new integer feasible solution.
(default = 0)
0 | . Do not call heuristic because a new integer feasible solution is found. |
1 | . Let CBC call the heuristic if a new integer feasible solution is found. |
Similar to userheurfirst but only calls the heuristic if the relaxed objective value promises a significant improvement of the current incumbent, i.e., the LP value of the node has to be closer to the best bound than the current incumbent.
(default = 0)
Postfixes to use for gdxname, gdxnameinc, and gdxin.
Calls gamskeep instead of gams
(default = 0)
Write the problem formulation in MPS format. The parameter value is the name of the MPS file.