Coin Cbc and Clp Solver version 1.01.00, build Feb 21 2006
command line - solve -verbose 7 -?
verbose was changed from 0 to 7
Cbc options are set within AMPL with commands like:
option cbc_options "cuts=root log=2 feas=on slog=1"
only maximize, dual, primal, help and quit are recognized without =
Double parameters:
Command dualB(ound) Initially algorithm acts as if no gap between bounds exceeds this value
---- description
The dual algorithm in Clp is a single phase algorithm as opposed to
a two phase algorithm where you first get feasible then optimal.
If a problem has both upper and lower bounds then it is trivial to
get dual feasible by setting non basic variables to correct bound.
If the gap between the upper and lower bounds of a variable is more
than the value of dualBound Clp introduces fake bounds so that it
can make the problem dual feasible. This has the same effect as a
composite objective function in the primal algorithm. Too high a
value may mean more iterations, while too low a bound means the code
may go all the way and then have to increase the bounds. OSL had
a heuristic to adjust bounds, maybe we need that here.
----
Command dualT(olerance) For an optimal solution no dual infeasibility may exceed this value
---- description
Normally the default tolerance is fine, but you may want to increase
it a bit if a dual run 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 dual
and then clean up problem using primal and the correct tolerance (remembering
to switch off presolve for this final short clean up phase).
----
Command primalT(olerance) For an optimal solution no primal infeasibility may exceed this value
---- description
Normally the default tolerance is fine, but you may want to increase
it a bit if a primal run seems to be having a hard time
----
Command primalW(eight) Initially algorithm acts as if it costs this much to be infeasible
---- description
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 bound means the
code may go all the way and then have to increase the weight in order
to get feasible. OSL had a heuristic to adjust bounds, maybe we need
that here.
----
Branch and Cut double parameters:
Command allow(ableGap) Stop when gap between best possible and best less than this
---- description
If the gap between best solution and best possible solution is less
than this then the search will be terminated. Also see gapRatio.
----
Command cuto(ff) All solutions must be better than this
---- description
All solutions must be better than this value (in a minimization sense).
This is also set by code whenever it obtains a solution and is set
to value of objective for solution minus cutoff increment.
----
Command gap(Ratio) Stop when gap between best possible and best less than this fraction of larger of two
---- description
If the gap between best solution and 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.
----
Command inc(rement) A valid solution must be at least this much better than last integer solution
---- description
Whenever a solution is found the bound on solutions is set to solution
(in a minimizationsense) plus this. If it is not set then the code
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. Be careful if you set this negative!
----
Command inf(easibilityWeight) Each integer infeasibility is expected to cost this much
---- description
A primitive way of deciding which node to explore next. Satisfying
each integer infeasibility is expected to cost this much.
----
Command integerT(olerance) For an optimal solution no integer variable may be this away from an integer value
---- description
Beware of setting this smaller than the primal tolerance.
----
Command preT(olerance) Tolerance to use in presolve
---- description
The default is 1.0e-8 - you may wish to try 1.0e-7 if presolve says
the problem is infeasible and you have awkward numbers and you are
sure the problem is really feasible.
----
Command sec(onds) maximum seconds
---- description
After this many seconds coin solver will act as if maximum nodes had
been reached.
----
Integer parameters:
Command idiot(Crash) Whether to try idiot crash
---- description
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 primal. 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.
----
Command maxF(actor) Maximum number of iterations between refactorizations
---- description
If this is at its initial value of 200 then in this executable clp
will guess at a value to use. Otherwise the user can set a value.
The code may decide to re-factorize earlier for accuracy.
----
Command maxIt(erations) Maximum number of iterations before stopping
---- description
This can be used for testing purposes. The corresponding library
call
setMaximumIterations(value)
can be useful. If the code stops on seconds or by an interrupt this
will be treated as stopping on maximum iterations
----
Command output(Format) Which output format to use
---- description
Normally export will be done using normal representation for numbers
and two values per line. You may want to do just one per line (for
grep or suchlike) and you may wish to save with absolute accuracy
using a coded version of the IEEE value. A value of 2 is normal. otherwise
odd values gives one value per line, even two. Values 1,2 give normal
format, 3,4 gives greater precision, while 5,6 give IEEE values.
When used for exporting a basis 1 does not save values, 2 saves values,
3 with greater accuracy and 4 in IEEE.
----
Command slog(Level) Level of detail in Solver output
---- description
If 0 then there should be no output in normal circumstances. 1 is
probably the best value for most uses, while 2 and 3 give more information.
----
Command sprint(Crash) Whether to try sprint crash
---- description
For long and thin problems this program may solve a series of small
problems created by taking a subset of the columns. I introduced
the idea as 'Sprint' after an LP code of that name of the 60's which
tried the same tactic (not totally successfully). Cplex calls it
'sifting'. -1 is automatic choice, 0 is off, n is number of passes
----
Branch and Cut integer parameters:
Command cutD(epth) Depth in tree at which to do cuts
---- description
Cut generators may be - off, on only at root, on if they look possible
and on. If they are done every node then that is that, but it may
be worth doing them every so often. The original method was every
so many nodes but it is more logical to do it whenever depth in tree
is a multiple of K. This option does that and defaults to -1 (off).
----
Command log(Level) Level of detail in Coin branch and Cut output
---- description
If 0 then there should be no output in normal circumstances. 1 is
probably the best value for most uses, while 2 and 3 give more information.
----
Command maxN(odes) Maximum number of nodes to do
---- description
This is a repeatable way to limit search. Normally using time is
easier but then the results may not be repeatable.
----
Command passC(uts) Number of cut passes at root node
---- description
The default is 100 passes if less than 500 columns, 100 passes (but
stop if drop small if less than 5000 columns, 20 otherwise
----
Command passF(easibilityPump) How many passes in feasibility pump
---- description
This fine tunes Feasibility Pump by doing more or fewer passes.
----
Command strong(Branching) Number of variables to look at in strong branching
---- description
In order to decide which variable to branch on, the code will choose
up to this number of unsatisfied variables to do mini 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 number before trust.
----
Command trust(PseudoCosts) Number of branches before we trust pseudocosts
---- description
Using strong branching computes pseudo-costs. After this many times
for a variable we just trust the pseudo costs and do not do any more
strong branching.
----
Keyword parameters:
Command chol(esky) Which cholesky algorithm
---- description
For a barrier code to be effective it needs a good Cholesky ordering
and factorization. You will need to link in one from another source.
See Makefile.locations for some possibilities.
----
Command crash Whether to create basis for problem
---- description
If crash is set on and there is an all slack basis then Clp will flip
or put structural variables into basis with the aim of getting dual
feasible. On the whole dual seems to be better without it and there
alernative types of 'crash' for primal e.g. 'idiot' or 'sprint'. I
have also added a variant due to Solow and Halim which is as on but
just flip.
----
Command cross(over) Whether to get a basic solution after barrier
---- description
Interior point algorithms do not obtain a basic solution (and the
feasibility criterion is a bit suspect (JJF)). This option will crossover
to a basic solution suitable for ranging or branch and cut. With
the current state of quadratic it may be a good idea to switch off
crossover for quadratic (and maybe presolve as well) - the option
maybe does this.
----
Command direction Minimize or Maximize
---- description
The default is minimize - use 'direction maximize' for maximization.
You can also use the parameters 'maximize' or 'minimize'.
----
Command dualP(ivot) Dual pivot choice algorithm
---- description
Clp can use any pivot selection algorithm which the user codes as
long as it implements the features in the abstract pivot base class.
The Dantzig method is implemented to show a simple method 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.
----
Command keepN(ames) Whether to keep names from import
---- description
It saves space to get rid of names so if you need to you can set this
to off. This needs to be set before the import of model - so -keepnames
off -import xxxxx.mps.
----
Command mess(ages) Controls if Clpnnnn is printed
---- description
The default behavior is to put out messages such as:
Clp0005 2261 Objective 109.024 Primal infeas 944413 (758)
but this program turns this off to make it look more friendly. It
can be useful to turn them back on if you want to be able to 'grep'
for particular messages or if you intend to override the behavior
of a particular message.
----
Command perturb(ation) Whether to perturb problem
---- description
Perturbation helps to stop cycling, but Clp uses other measures for
this. However large problems and especially ones with unit elements
and unit rhs or costs benefit from perturbation. Normally Clp tries
to be intelligent, but you can switch this off. The Clp library has
this off by default. This program has it on by default.
----
Command presolve Whether to presolve problem
---- description
Presolve analyzes the model to find such things as redundant equations,
equations which fix some variables, equations which can be transformed
into bounds etc etc. For the initial solve of any problem this is
worth doing unless you know that it will have no effect. on will
normally do 5 passes while using 'more' will do 10. If the problem
is very large you may need to write the original to file using 'file'.
----
Command primalP(ivot) Primal pivot choice algorithm
---- description
Clp can use any pivot selection algorithm which the user codes as
long as it implements the features in the abstract pivot base class.
The Dantzig method is implemented to show a simple method 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.
----
Command scal(ing) Whether to scale problem
---- description
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 unscaled
it is possible that there may be small primal and/or infeasibilities.
----
Branch and Cut keyword parameters:
Command clique(Cuts) Whether to use Clique cuts
---- description
This switches on clique cuts (either at root or in entire tree) See
branchAndCut for information on options.
----
Command combine(Solutions) Whether to use combine solution heuristic
---- description
This switches on a heuristic which does branch and cut on the problem
given by just using variables which have appeared in one or more solutions.
It is obviously only tries after two or more solutions.
----
Command cost(Strategy) How to use costs as priorities
---- description
This orders the variables in order of their absolute costs - with
largest cost ones being branched on first. This primitive strategy
can be surprsingly effective.
----
Command cuts(OnOff) Switches all cuts on or off
---- description
This can be used to switch on or off all cuts (apart from Reduce and
Split). Then you can do individual ones off or on See branchAndCut
for information on options.
----
Command feas(ibilityPump) Whether to try Feasibility Pump
---- description
This switches on feasibility pump heuristic at 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 passFeasibilityPump.
----
Command flow(CoverCuts) Whether to use Flow Cover cuts
---- description
This switches on flow cover cuts (either at root or in entire tree)
See branchAndCut for information on options.
----
Command gomory(Cuts) Whether to use Gomory cuts
---- description
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.
See branchAndCut for information on options.
----
Command greedy(Heuristic) Whether to use a greedy heuristic
---- description
Switches on a greedy heuristic which will try and obtain a solution.
It may just fix a percentage of variables and then try a small branch
and cut run.
----
Command heur(isticsOnOff) Switches most heuristics on or off
---- description
This can be used to switch on or off all heuristics. Then you can
do individual ones off or on. CbcTreeLocal is not included as it
dramatically alters search.
----
Command knapsack(Cuts) Whether to use Knapsack cuts
---- description
This switches on knapsack cuts (either at root or in entire tree)
See branchAndCut for information on options.
----
Command local(TreeSearch) Whether to use local treesearch
---- description
This switches on a local search algorithm when a solution is found.
This is from Fischetti and Lodi and is not really a heuristic although
it can be used as one. When used from Coin solve it has limited functionality.
It is not switched on when heuristics are switched on.
----
Command mixed(IntegerRoundingCuts) Whether to use Mixed Integer Rounding cuts
---- description
This switches on mixed integer rounding cuts (either at root or in
entire tree) See branchAndCut for information on options.
----
Command preprocess Whether to use integer preprocessing
---- description
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. Save option saves on file presolved.mps. equal
will turn <= cliques into ==. sos will create sos sets if all 0-1
in sets (well one extra is allowed) and no overlaps. trysos is same
but allows any number extra.
----
Command probing(Cuts) Whether to use Probing cuts
---- description
This switches on probing cuts (either at root or in entire tree) See
branchAndCut for information on options.
----
Command reduce(AndSplitCuts) Whether to use Reduce-and-Split cuts
---- description
This switches on reduce and split cuts (either at root or in entire
tree) See branchAndCut for information on options.
----
Command round(ingHeuristic) Whether to use Rounding heuristic
---- description
This switches on a simple (but effective) rounding heuristic at each
node of tree.
----
Command two(MirCuts) Whether to use Two phase Mixed Integer Rounding cuts
---- description
This switches on two phase mixed integer rounding cuts (either at
root or in entire tree) See branchAndCut for information on options.
----
Actions or string parameters:
Command barr(ier) Solve using primal dual predictor corrector algorithm
---- description
This command solves the current model using the primal dual predictor
corrector algorithm. You will probably want to link in and choose
a better ordering and factorization than the default ones provided.
It will also solve models with quadratic objectives.
----
Command basisO(ut) Export basis as bas file
---- description
This will write an MPS format basis file to the given file name.
It will use the default directory given by 'directory'. A name of
'$' will use the previous value for the name. This is initialized
to 'default.bas'.
----
Command directory Set Default directory for import etc.
---- description
This sets the directory which import, export, saveModel, restoreModel
etc will use. It is initialized to './'
----
Command dualS(implex) Do dual simplex algorithm
---- description
This command solves the current model using the dual steepest edge
algorithm.The time and iterations may be affected by settings such
as presolve, scaling, crash and also by dual pivot method, fake bound
on variables and dual and primal tolerances.
----
Command either(Simplex) Do dual or primal simplex algorithm
---- description
This command solves the current model using the dual or primal algorithm,
based on a dubious analysis of model.
----
Command end Stops clp execution
---- description
This stops execution ; end, exit, quit and stop are synonyms
----
Command exit Stops clp execution
---- description
This stops the execution of Clp, end, exit, quit and stop are synonyms
----
Command export Export model as mps file
---- description
This will write an MPS format file to the given file name. It will
use the default directory given by 'directory'. A name of '$' will
use the previous value for the name. This is initialized to 'default.mps'.
----
Command initialS(olve) Solve to continuous
---- description
This just solves the problem to continuous - without adding any cuts
----
Command max(imize) Set optimization direction to maximize
---- description
The default is minimize - use 'maximize' for maximization.
You can also use the parameters 'direction maximize'.
----
Command min(imize) Set optimization direction to minimize
---- description
The default is minimize - use 'maximize' for maximization.
This should only be necessary if you have previously set maximization
You can also use the parameters 'direction minimize'.
----
Command primalS(implex) Do primal simplex algorithm
---- description
This command solves the current model using the primal algorithm.
The default is to use exact devex. The time and iterations may be
affected by settings such as presolve, scaling, crash and also by
column selection method, infeasibility weight and dual and primal
tolerances.
----
Command quit Stops clp execution
---- description
This stops the execution of Clp, end, exit, quit and stop are synonyms
----
Command restore(Model) Restore model from binary file
---- description
This reads data save by saveModel from the given file. It will use
the default directory given by 'directory'. A name of '$' will use
the previous value for the name. This is initialized to 'default.prob'.
----
Command saveM(odel) Save model to binary file
---- description
This will save the problem to the given file name for future use by
restoreModel. It will use the default directory given by 'directory'.
A name of '$' will use the previous value for the name. This is initialized
to 'default.prob'.
----
Command saveS(olution) saves solution to file
---- description
This will write a binary solution file to the given file name. It
will use the default directory given by 'directory'. A name of '$'
will use the previous value for the name. This is initialized to
'solution.file'. To read the file use fread(int) twice to pick up
number of rows and columns, then fread(double) to pick up objective
value, then pick up row activities, row duals, column activities and
reduced costs - see bottom of CbcOrClpParam.cpp for code that writes
file.
----
Command solu(tion) Prints solution to file
---- description
This will write a primitive solution file to the given file name.
It will use the default directory given by 'directory'. A name of
'$' will use the previous value for the name. This is initialized
to 'stdout'. The amount of output can be varied using printi!ngOptions
or printMask.
----
Command stat(istics) Print some statistics
---- description
This command prints some statistics for the current model. If log
level >1 then more is printed. These are for presolved model if presolve
on (and unscaled).
----
Command stop Stops clp execution
---- description
This stops the execution of Clp, end, exit, quit and stop are synonyms
----
Branch and Cut actions:
Command branch(AndCut) Do Branch and Cut
---- description
This does branch and cut. There are many parameters which can affect
the performance. First just try with default settings and look carefully
at the log file. Did cuts help? Did they take too long? Look at
output to see which cuts were effective and then do some tuning.
You will see that the options for cuts are off, on, root and ifmove.
Off is obvious, on means that this cut generator will be tried in
the branch and cut tree (you can fine tune using 'depth'). Root means
just at the root node while 'ifmove' means that cuts will be used
in the tree if they look as if they are doing some good and moving
the objective value. If pre-processing 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 strongBranching and trustPseudoCosts parameters.
----
Command solv(e) Solve problem
---- description
If there are no integer variables then this just solves LP. If there
are integer variables this does branch and cut.
----