### Table of Contents

- Usage
- Special Features
- Components
- List of SCIP Options
- gams
- gams/solvetrace
- branching
- branching/allfullstrong
- branching/cloud
- branching/distribution
- branching/fullstrong
- branching/inference
- branching/leastinf
- branching/lookahead
- branching/mostinf
- branching/multaggr
- branching/nodereopt
- branching/pscost
- branching/random
- branching/relpscost
- branching/treemodel
- branching/vanillafullstrong
- conflict
- conflict/bounddisjunction
- conflict/graph
- conflict/indicatorconflict
- conflict/linear
- conflict/logicor
- conflict/setppc
- constraints
- constraints/SOS1
- constraints/SOS2
- constraints/abspower
- constraints/and
- constraints/bivariate
- constraints/bounddisjunction
- constraints/components
- constraints/indicator
- constraints/integral
- constraints/knapsack
- constraints/linear
- constraints/linear/upgrade
- constraints/logicor
- constraints/nonlinear
- constraints/nonlinear/upgrade
- constraints/orbisack
- constraints/orbitope
- constraints/quadratic
- constraints/quadratic/upgrade
- constraints/setppc
- constraints/soc
- constraints/symresack
- constraints/varbound
- decomposition
- display
- display/avgdualbound
- display/completed
- display/concdualbound
- display/concgap
- display/concmemused
- display/concprimalbound
- display/concsolfound
- display/conflicts
- display/conss
- display/curcols
- display/curconss
- display/curdualbound
- display/currows
- display/cutoffbound
- display/cuts
- display/depth
- display/dualbound
- display/estimate
- display/feasST
- display/gap
- display/lpavgiterations
- display/lpcond
- display/lpiterations
- display/lpobj
- display/maxdepth
- display/memtotal
- display/memused
- display/nexternbranchcands
- display/nfrac
- display/ninfeasleaves
- display/nnodes
- display/nnodesbelowinc
- display/nobjleaves
- display/nodesleft
- display/nrank1nodes
- display/nsols
- display/plungedepth
- display/poolsize
- display/primalbound
- display/primalgap
- display/pseudoobj
- display/separounds
- display/solfound
- display/sols
- display/strongbranchs
- display/time
- display/vars
- estimation
- estimation/restarts
- estimation/ssg
- estimation/treeprofile
- heuristics
- heuristics/actconsdiving
- heuristics/adaptivediving
- heuristics/alns
- heuristics/alns/crossover
- heuristics/alns/dins
- heuristics/alns/localbranching
- heuristics/alns/mutation
- heuristics/alns/proximity
- heuristics/alns/rens
- heuristics/alns/rins
- heuristics/alns/trustregion
- heuristics/alns/zeroobjective
- heuristics/bound
- heuristics/clique
- heuristics/coefdiving
- heuristics/completesol
- heuristics/conflictdiving
- heuristics/crossover
- heuristics/dins
- heuristics/distributiondiving
- heuristics/dualval
- heuristics/farkasdiving
- heuristics/feaspump
- heuristics/fixandinfer
- heuristics/fracdiving
- heuristics/gins
- heuristics/guideddiving
- heuristics/indicator
- heuristics/intdiving
- heuristics/intshifting
- heuristics/linesearchdiving
- heuristics/localbranching
- heuristics/locks
- heuristics/lpface
- heuristics/mpec
- heuristics/multistart
- heuristics/mutation
- heuristics/nlpdiving
- heuristics/objpscostdiving
- heuristics/octane
- heuristics/ofins
- heuristics/oneopt
- heuristics/padm
- heuristics/proximity
- heuristics/pscostdiving
- heuristics/randrounding
- heuristics/rens
- heuristics/reoptsols
- heuristics/repair
- heuristics/rins
- heuristics/rootsoldiving
- heuristics/rounding
- heuristics/shiftandpropagate
- heuristics/shifting
- heuristics/simplerounding
- heuristics/subnlp
- heuristics/trivial
- heuristics/trivialnegation
- heuristics/trustregion
- heuristics/trysol
- heuristics/twoopt
- heuristics/undercover
- heuristics/vbounds
- heuristics/veclendiving
- heuristics/zeroobj
- heuristics/zirounding
- history
- limits
- lp
- memory
- misc
- nodeselection
- nodeselection/bfs
- nodeselection/breadthfirst
- nodeselection/dfs
- nodeselection/estimate
- nodeselection/hybridestim
- nodeselection/restartdfs
- nodeselection/uct
- numerics
- presolving
- presolving/boundshift
- presolving/convertinttobin
- presolving/domcol
- presolving/dualagg
- presolving/dualcomp
- presolving/dualinfer
- presolving/dualsparsify
- presolving/gateextraction
- presolving/implics
- presolving/inttobinary
- presolving/milp
- presolving/qpkktref
- presolving/redvub
- presolving/sparsify
- presolving/stuffing
- presolving/trivial
- presolving/tworowbnd
- propagating
- propagating/dualfix
- propagating/genvbounds
- propagating/nlobbt
- propagating/obbt
- propagating/probing
- propagating/pseudoobj
- propagating/redcost
- propagating/rootredcost
- propagating/symmetry
- propagating/vbounds
- randomization
- separating
- separating/aggregation
- separating/cgmip
- separating/clique
- separating/closecuts
- separating/cmir
- separating/convexproj
- separating/disjunctive
- separating/eccuts
- separating/flowcover
- separating/gauge
- separating/gomory
- separating/impliedbounds
- separating/intobj
- separating/mcf
- separating/oddcycle
- separating/rapidlearning
- separating/strongcg
- separating/zerohalf
- solvingphases
- table/branchrules
- table/compression
- table/concurrentsolver
- table/conflict
- table/constiming
- table/constraint
- table/estim
- table/heuristics
- table/lp
- table/neighborhood
- table/nlp
- table/orbitalfixing
- table/origprob
- table/presolvedprob
- table/presolver
- table/pricer
- table/propagator
- table/relaxator
- table/root
- table/separator
- table/solution
- table/status
- table/timing
- table/tree
- timing

SCIP (**S**olving **C**onstraint **I**nteger **P**rograms) is developed at the Zuse Institute Berlin (ZIB) in cooperation with TU Darmstadt, RWTH Aachen, and University of Erlangen-Nürnberg, see the SCIP webpage for the current list of developers.

SCIP is a framework for Constraint Integer Programming oriented towards the needs of Mathematical Programming experts who want to have total control of the solution process and access detailed information down to the guts of the solver. SCIP can also be used as a pure MIP or MINLP solver or as a framework for branch-cut-and-price. Within GAMS, the MIP and MINLP solving facilities of SCIP are available.

For more detailed information, we refer to [3, 4, 5, 35, 36, 102, 169, 116, 117, 103, 248, 249, 263] and the SCIP web site.

GAMS/SCIP uses CPLEX, if licensed, and otherwise SOPLEX [265] as LP solver, the COIN-OR Interior Point Optimizer IPOPT [254] as nonlinear solver, and CppAD to compute derivatives of nonlinear functions.

SCIP supports continuous, binary, integer, semi-continuous, semi-integer variables, indicator constraints, special ordered sets, and branching priorities for discrete variables.

# Usage

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

Option MIP = SCIP; { or QCP or NLP or MIQCP or MINLP or ... }

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

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

## Specification of SCIP Options

GAMS/SCIP supports the GAMS parameters reslim, iterlim, nodlim, optca, optcr, and workspace. Further, the option threads can be used to control the number of threads used in the MILP presolver, the linear algebra routines of IPOPT, and for solving LPs if CPLEX' barrier solver is used.

Options can be specified by a SCIP options file. A SCIP options file consists of one option or comment per line. A pound sign (`#`

) at the beginning of a line causes the entire line to be ignored. Otherwise, the line will be interpreted as an option name and value separated by an equal sign (`=`

) and any amount of white space (blanks or tabs). Further, string values have to be enclosed in quotation marks.

A small example for a scip.opt file is:

propagating/probing/maxprerounds = 0 separating/maxrounds = 0 separating/maxroundsroot = 0

It causes GAMS/SCIP to disable probing during presolve and to turn off all cut generators.

## Specification of Indicators

Indicators are a modeling tool to specify that certain equations in a model must only be satisfied if certain binary variables take a specified value. Indicators are not supported by the GAMS language, but can be passed to SCIP via a separate file, see Indicator Constraints for more details on its syntax. The name of that file is specified via the option gams/indicatorfile in a SCIP option file. Currently, indicators can only be used for linear equations.

# Special Features

## SCIP interactive shell

The interactive shell in SCIP is a powerful tool that allows the user to display various information (e.g., branching statistics, presolved model), load emphasis settings, interrupt a solve to change parameters or trigger a restart, write the model in various file formats, start SCIPs solution counter, and many more things.

When setting the option gams/interactive to a nonempty string, the GAMS/SCIP interface opens the interactive shell of SCIP after having load the GAMS problem and parameters and passes the value of the gams/interactive parameter to the SCIP interactive shell.

By default, SCIP behaves as if `gams/interactive`

has been set to `"optimize write gamssol quit"`

, that is, SCIP is requested to solve the problem, then to pass the solution back to GAMS, and to quit.

An example use of the SCIP interactive shell feature via GAMS is to add the following line to your SCIP options file:

gams/interactive = "write prob orig.lp presolve write transprob presol.mps opt write gamssol quit"

This instructs SCIP to write the original problem to the file `orig.lp`

in LP format, to presolve the instance, to write the presolved problem to the file `presolved.mps`

in MPS format, to solve the instance, to write the solution out to GAMS, and to finish.

By omitting the `quit`

command, SCIPs interactive shell remains open and awaits user input. The command `help`

prints a list of available commands. Note, that on Windows, GAMS need to be called with the option interactivesolver enabled to allow user input for the solver process.

A tutorial on using the SCIP shell is available at https://www.scipopt.org/doc/html/SHELL.php.

## Emphasis Settings

SCIP includes various emphasis settings, which are predefined values for a set of SCIP parameters. Such predefined settings are available for setting the effort that SCIP should spend for, e.g., presolving, separation, or heuristics.

The emphasis settings are not available as single parameters, but can be set via SCIPs interactive shell. E.g., writing `set heuristics emphasis`

in the shell displays the available emphasis settings for heuristics (`aggressive`

, `fast`

, `off`

) and expects the user to input which setting to use. Further, general emphasis settings are available in the `set emphasis`

menu, some of them giving predefined settings similar to the CPLEX option mipemphasis.

Via the gams/interactive option, c.f. Section SCIP interactive shell, emphasis settings can be activated via a SCIP options file. For example, adding the option

gams/interactive = "set emphasis feasibility set loadgams optimize write gamssol quit"

instructs SCIP to load the emphasis setting `feasibility`

prior to optimizing the model and passing the solution back to GAMS. Note, that setting one of the emphasis settings `feasibility`

, `hardlp`

, and `optimality`

resets all previously set parameters to their default values, which includes the ones that are set by the GAMS/SCIP interface or which were loaded from a SCIP options file. Therefore, the command `set loadgams`

has been used above to restore these parameter settings.

The following emphasis settings are available in SCIP:

shell command | purpose |
---|---|

`set emphasis easycip` | use for easy problems |

`set emphasis feasibility` | emphasize finding a feasible solution |

`set emphasis hardlp` | use for problems with a hard LP |

`set emphasis optimality` | emphasize proving optimality |

`set emphasis numerics` | increase numerical stability |

`set heuristic emphasis aggressive` | use primal heuristics aggressively |

`set heuristic emphasis fast` | use only fast primal heuristics |

`set heuristic emphasis off` | disable all primal heuristics |

`set presolving emphasis aggressive` | do aggressive presolving |

`set presolving emphasis fast` | use only fast presolving steps |

`set presolving emphasis off` | disable presolving |

`set separating emphasis aggressive` | use cutting plane separators aggressively |

`set separating emphasis fast` | use only fast cutting plane separators |

`set separating emphasis off` | disable all cutting plane separators |

## Starting point

Using the completesol heuristic, SCIP can try to find a feasible solution based on values given by the user for all or some of the variables. The values need to be specified as variable levels in the GAMS model. The heuristic solves a copy of the problem where variables for which values have been provided are restricted to be close to that value. When an integral value is specified for a binary or integer variable, the variable is fixed to that value. See also Section 2.3.2 in [169] for a more detailed description of the heuristic.

For which variables the level values are passed from GAMS to SCIP is controlled by the parameter gams/mipstart. The parameter values have the following meaning:

- 0: do not pass any variable values to SCIP, the heuristic will not run
- 1: pass values for all binary and integer variables to SCIP and let SCIP try to find a feasible solution in its neighborhood by using the completesol heuristic
- 2 (default): pass values for all variables to SCIP and let SCIP check feasibility of the given solution, the heuristic will not run
- 3: pass values for all variables to SCIP and let SCIP try to find a feasible solution in the neighborhood by using the completesol heuristic
- 4: pass values for all binary and integer variables to SCIP which fractionality is at most the value of GAMS option tryint (thus, with default tryint=0, only for variables with integral values, the value is passed to SCIP) and let SCIP try to find a feasible solution in the neighborhood by using the completesol heuristic

Note, that the completesol heuristic will not run if there are too many variables with unknown values. This behavior can be adjusted by setting parameter heuristics/completesol/maxunknownrate.

## Decomposition Information

SCIP potentially can make use of a user-provided problem decomposition, e.g., in primal heuristics PADM or GINS. Note, that SCIP's Benders Decomposition is not available with GAMS at the moment. A GAMS user can inform SCIP about such a decomposition by using the .stage variable suffix.

In an attempt to following the same convention on interpreting the `.stage`

variable suffix as the GAMS/CPLEX link, variables which `.stage`

suffix is set to an integral value greater than 0 are assigned to a block with this number. Variables which `.stage`

suffix is set to a fractional value or a value smaller than 1 are assigned to no block.

Note, that the default value for the `.stage`

suffix is 1. Therefore, GAMS/SCIP only passes decomposition information to SCIP if at least one variable has its `.stage`

suffix set to a value different than 1. Moreover, in order to receive the `.stage`

values, `scaleOpt`

and `priorOpt`

must be left at their default of 0.

## Solution Pool

When SCIP solves a problem, it may find several solutions, whereof only the best one is available to the GAMS user via the variable level values in the GAMS model. If the option gams/dumpsolutions is specified, then all alternative solutions found by SCIP are written into GDX files and an index file with the name given by the this option is written. If the option gams/dumpsolutionsmerged is specified, then all alternative solutions found by SCIP are written into a single GDX file, which name is given by the this option.

The GAMS testlib model dumpsol shows an example use for this option via GUROBI. It can easily be adapted to be used with SCIP.

## Solving process tracing

The option gams/solvetrace/file can be used to specify the name of a file where information about the progress of the branch-and-bound tree search in SCIP is stored. The file is created and updated during the solution process, so it may also be used to monitor the progress of SCIP while it still solves the model.

New entries are written periodically, depending on how many nodes have been processed or how much time has been elapsed since the last entry was written. Each entry contains information on the current primal and dual bound.

## Notes on solving MINLPs with SCIP

SCIP includes capabilities to handle nonlinear functions that are specified via algebraic expressions. Therefore, neither external/extrinsic functions nor all GAMS operands (e.g., trigonometric ones) are supported yet.

Nonconvex MINLPs are solved via a spatial branch-and-bound algorithm using linear relaxations. The tightness of this relaxation depends heavily on the variable bounds, thus tight bounds for the nonlinear variables are crucial for SCIP.

### Special options for convex MINLPs

Convex MINLPs are much easier to solve for SCIP, provided it recognizes the convexity of the model. So far, only a simple convexity check is implemented in SCIP, which may not give a conclusive answer in all cases. However, setting the option constraints/nonlinear/assumeconvex to `TRUE`

can be used to tell SCIP that it should assume all nonlinear constraints to be of convex type. This may help to improve solving times for convex MINLPs considerably.

Another feature that can be especially useful for convex MINLPs is to enable the generation of cuts in the solution of the NLP relaxation in the root node and to consider using these cuts during the whole solution process. This is achieved by the parameters

constraints/quadratic/sepanlpmincont = 0 constraints/soc/sepanlpmincont = 0 constraints/nonlinear/sepanlpmincont = 0 constraints/abspower/sepanlpmincont = 0 separating/poolfreq = 1

However, it has been shown that these settings can also deteriorate performance.

# Components

In the following, we list components that are available in SCIP together with some common properties. Some of these properties can be modified with corresponding parameters.

## Branching Rules

branching rule | priority | maxdepth | maxbounddist | description |
---|---|---|---|---|

relpscost | 10000 | -1 | 100 | reliability branching on pseudo cost values |

pscost | 2000 | -1 | 100 | branching on pseudo cost values |

inference | 1000 | -1 | 100 | inference history branching |

mostinf | 100 | -1 | 100 | most infeasible branching |

leastinf | 50 | -1 | 100 | least infeasible branching |

distribution | 0 | -1 | 100 | branching rule based on variable influence on cumulative normal distribution of row activities |

fullstrong | 0 | -1 | 100 | full strong branching |

cloud | 0 | -1 | 100 | branching rule that considers several alternative LP optima |

lookahead | 0 | -1 | 100 | full strong branching over multiple levels |

multaggr | 0 | -1 | 100 | fullstrong branching on fractional and multi-aggregated variables |

allfullstrong | -1000 | -1 | 100 | all variables full strong branching |

vanillafullstrong | -2000 | -1 | 100 | vanilla full strong branching |

random | -100000 | -1 | 100 | random variable branching |

nodereopt | -9000000 | -1 | 100 | branching rule for node reoptimization |

See https://www.scipopt.org/doc/html/BRANCH.php for a detailed description of the branching rule properties.

## Conflict Handler

conflict handler | priority | description |
---|---|---|

logicor | 800000 | conflict handler creating logic or constraints |

setppc | 700000 | conflict handler creating set covering constraints |

indicatorconflict | 200000 | replace slack variables and generate logicor constraints |

linear | -1000000 | conflict handler creating linear constraints |

bounddisjunction | -3000000 | conflict handler creating bound disjunction constraints |

## Constraint Handler

constraint handler | checkprio | enfoprio | sepaprio | sepafreq | propfreq | eagerfreq | presolvetimings | description |
---|---|---|---|---|---|---|---|---|

integral | 0 | 0 | 0 | -1 | -1 | -1 | always | integrality constraint |

soc | -10 | -40 | 10 | 1 | 1 | 100 | always | constraint handler for second order cone constraints |

SOS1 | -10 | 100 | 1000 | 10 | 1 | 100 | medium | SOS1 constraint handler |

SOS2 | -10 | 100 | 10 | 0 | 1 | 100 | fast | SOS2 constraint handler |

varbound | -500000 | -500000 | 900000 | 0 | 1 | 100 | fast medium | variable bounds lhs <= x + c*y <= rhs, x non-binary, y non-continuous |

knapsack | -600000 | -600000 | 600000 | 0 | 1 | 100 | always | knapsack constraint of the form a^T x <= b, x binary and a >= 0 |

setppc | -700000 | -700000 | 700000 | 0 | 1 | 100 | always | set partitioning / packing / covering constraints |

and | -850100 | -850100 | 850100 | 1 | 1 | 100 | fast exhaustive | constraint handler for AND-constraints: r = and(x1, ..., xn) |

linear | -1000000 | -1000000 | 100000 | 0 | 1 | 100 | fast exhaustive | linear constraints of the form lhs <= a^T x <= rhs |

orbisack | -1005200 | -1005200 | 40100 | 5 | 5 | -1 | exhaustive | symmetry breaking constraint handler for orbisacks |

orbitope | -1005200 | -1005200 | 40100 | -1 | 1 | -1 | medium | symmetry breaking constraint handler relying on (partitioning/packing) orbitopes |

symresack | -1005200 | -1005200 | 40100 | 5 | 5 | -1 | exhaustive | symmetry breaking constraint handler relying on symresacks |

logicor | -2000000 | -2000000 | 10000 | 0 | 1 | 100 | always | logic or constraints |

bounddisjunction | -3000000 | -3000000 | 0 | -1 | 1 | 100 | fast | bound disjunction constraints |

abspower | -3500000 | -30 | 0 | 1 | 1 | 100 | fast medium | constraint handler for absolute power constraints lhs <= sign(x+offset)abs(x+offset)^n + c*z <= rhs |

bivariate | -3600000 | -55 | 5 | 1 | 1 | 100 | fast | constraint handler for constraints of the form lhs <= f(x,y) + c*z <= rhs where f(x,y) is a bivariate function |

quadratic | -4000000 | -50 | 10 | 1 | 1 | 100 | always | quadratic constraints of the form lhs <= b' x + x' A x <= rhs |

nonlinear | -4000010 | -60 | 10 | 1 | 1 | 100 | always | constraint handler for nonlinear constraints |

indicator | -6000000 | -100 | 10 | 10 | 1 | 100 | fast | indicator constraint handler |

components | -9999999 | 0 | 0 | -1 | 1 | -1 | independent components constraint handler |

See https://www.scipopt.org/doc/html/CONS.php for a detailed description of the constraint handler properties.

## Display Columns

display column | header | position | width | priority | status | description |
---|---|---|---|---|---|---|

solfound | 0 | 1 | 80000 | auto | letter that indicates the heuristic which found the solution | |

time | time | 50 | 5 | 4000 | auto | total solution time |

nnodes | node | 100 | 7 | 100000 | auto | number of processed nodes |

nodesleft | left | 200 | 7 | 90000 | auto | number of unprocessed nodes |

nrank1nodes | rank1 | 500 | 7 | 40000 | off | current number of rank1 nodes left |

nnodesbelowinc | nbInc | 550 | 6 | 40000 | off | current number of nodes with an estimate better than the current incumbent |

lpiterations | LP iter | 1000 | 7 | 30000 | auto | number of simplex iterations |

lpavgiterations | LP it/n | 1400 | 7 | 25000 | auto | average number of LP iterations since the last output line |

lpcond | LP cond | 1450 | 7 | 0 | auto | estimate on condition number of LP solution |

memused | umem | 1500 | 5 | 0 | auto | total number of bytes used in block memory |

memtotal | mem/heur | 1500 | 8 | 20000 | auto | total number of bytes in block memory or the creator name when a new incumbent solution was found |

depth | depth | 2000 | 5 | 500 | auto | depth of current node |

maxdepth | mdpt | 2100 | 5 | 5000 | auto | maximal depth of all processed nodes |

plungedepth | pdpt | 2200 | 5 | 10 | auto | current plunging depth |

nfrac | frac | 2500 | 5 | 700 | auto | number of fractional variables in the current solution |

nexternbranchcands | extbr | 2600 | 5 | 650 | auto | number of extern branching variables in the current node |

vars | vars | 3000 | 5 | 3000 | auto | number of variables in the problem |

conss | cons | 3100 | 5 | 3100 | auto | number of globally valid constraints in the problem |

curconss | ccons | 3200 | 5 | 600 | auto | number of enabled constraints in current node |

curcols | cols | 3300 | 5 | 800 | auto | number of LP columns in current node |

currows | rows | 3400 | 5 | 900 | auto | number of LP rows in current node |

cuts | cuts | 3500 | 5 | 2100 | auto | total number of cuts applied to the LPs |

separounds | sepa | 3600 | 4 | 100 | auto | number of separation rounds performed at the current node |

poolsize | pool | 3700 | 5 | 50 | auto | number of LP rows in the cut pool |

conflicts | confs | 4000 | 5 | 2000 | auto | total number of conflicts found in conflict analysis |

strongbranchs | strbr | 5000 | 5 | 1000 | auto | total number of strong branching calls |

pseudoobj | pseudoobj | 6000 | 14 | 300 | auto | current pseudo objective value |

lpobj | lpobj | 6500 | 14 | 300 | auto | current LP objective value |

curdualbound | curdualbound | 7000 | 14 | 400 | auto | dual bound of current node |

estimate | estimate | 7500 | 14 | 200 | auto | estimated value of feasible solution in current node |

avgdualbound | avgdualbound | 8000 | 14 | 40 | auto | average dual bound of all unprocessed nodes |

dualbound | dualbound | 9000 | 14 | 70000 | auto | current global dual bound |

primalbound | primalbound | 10000 | 14 | 80000 | auto | current primal bound |

cutoffbound | cutoffbound | 10100 | 14 | 10 | auto | current cutoff bound |

gap | gap | 20000 | 8 | 60000 | auto | current (relative) gap using |primal-dual|/MIN(|dual|,|primal|) |

primalgap | primgap | 21000 | 8 | 20000 | off | current (relative) gap using |primal-dual|/|primal| |

nsols | nsols | 30000 | 5 | 0 | auto | current number of solutions found |

completed | compl. | 30100 | 8 | 110000 | auto | completion of search in percent (based on tree size estimation) |

nobjleaves | objleav | 31000 | 7 | 0 | auto | current number of encountered objective limit leaves |

ninfeasleaves | infleav | 32000 | 7 | 0 | auto | number of encountered infeasible leaves |

sols | sols | 100000 | 7 | 110000 | off | number of detected feasible solutions |

feasST | feasST | 110000 | 6 | 110000 | off | number of detected non trivial feasible subtrees |

See https://www.scipopt.org/doc/html/DISP.php for a detailed description of the display column properties.

## Node Selectors

node selector | standard priority | memsave priority | description |
---|---|---|---|

estimate | 200000 | 100 | best estimate search |

bfs | 100000 | 0 | best first search |

hybridestim | 50000 | 50 | hybrid best estimate / best bound search |

restartdfs | 10000 | 50000 | depth first search with periodical selection of the best node |

uct | 10 | 0 | node selector which balances exploration and exploitation |

dfs | 0 | 100000 | depth first search |

breadthfirst | -10000 | -1000000 | breadth first search |

See https://www.scipopt.org/doc/html/NODESEL.php for a detailed description of the node selector properties.

## Presolvers

presolver | priority | timing | maxrounds | description |
---|---|---|---|---|

milp | 9999999 | medium | -1 | MILP specific presolving methods |

trivial | 9000000 | fast | -1 | round fractional bounds on integers, fix variables with equal bounds |

boundshift | 7900000 | fast | 0 | converts variables with domain [a,b] to variables with domain [0,b-a] |

inttobinary | 7000000 | fast | -1 | converts integer variables with domain [a,a+1] to binaries |

convertinttobin | 6000000 | fast | 0 | converts integer variables to binaries |

gateextraction | 1000000 | exhaustive | -1 | presolver extracting gate(and)-constraints |

qpkktref | -1 | medium | -1 | adds KKT conditions to (mixed-binary) quadratic programs |

dualcomp | -50 | exhaustive | -1 | compensate single up-/downlocks by singleton continuous variables |

stuffing | -100 | exhaustive | 0 | fix redundant singleton continuous variables |

domcol | -1000 | exhaustive | -1 | dominated column presolver |

tworowbnd | -2000 | exhaustive | 0 | do bound tigthening by using two rows |

dualinfer | -3000 | exhaustive | 0 | exploit dual information for fixings and side changes |

implics | -10000 | medium | -1 | implication graph aggregator |

dualagg | -12000 | exhaustive | 0 | aggregate variables by dual arguments |

sparsify | -24000 | exhaustive | -1 | eliminate non-zero coefficients |

dualsparsify | -240000 | exhaustive | -1 | eliminate non-zero coefficients |

redvub | -9000000 | exhaustive | 0 | detect redundant variable bound constraints |

See https://www.scipopt.org/doc/html/PRESOL.php for a detailed description of the presolver properties.

## Primal Heuristics

primal heuristic | type | priority | freq | freqoffset | description |
---|---|---|---|---|---|

padm | L | 70000 | 0 | 0 | penalty alternating direction method primal heuristic |

ofins | L | 60000 | 0 | 0 | primal heuristic for reoptimization, objective function induced neighborhood search |

trivialnegation | p | 40000 | 0 | 0 | negate solution entries if an objective coefficient changes the sign, enters or leaves the objective. |

reoptsols | p | 40000 | 0 | 0 | primal heuristic updating solutions found in a previous optimization round |

trivial | t | 10000 | 0 | 0 | start heuristic which tries some trivial solutions |

clique | p | 5000 | 0 | 0 | LNS heuristic using a clique partition to restrict the search neighborhood |

locks | p | 3000 | 0 | 0 | heuristic that fixes variables based on their rounding locks |

vbounds | p | 2500 | 0 | 0 | LNS heuristic uses the variable lower and upper bounds to determine the search neighborhood |

shiftandpropagate | p | 1000 | 0 | 0 | Pre-root heuristic to expand an auxiliary branch-and-bound tree and apply propagation techniques |

zeroobj | L | 100 | -1 | 0 | heuristic trying to solve the problem without objective |

completesol | L | 0 | 0 | 0 | primal heuristic trying to complete given partial solutions |

dualval | L | 0 | -1 | 0 | primal heuristic using dual values |

simplerounding | r | 0 | 1 | 0 | simple and fast LP rounding heuristic |

repair | L | 0 | -1 | 0 | tries to repair a primal infeasible solution |

randrounding | r | -200 | 20 | 0 | fast LP rounding heuristic |

zirounding | r | -500 | 1 | 0 | LP rounding heuristic as suggested by C. Wallace taking row slacks and bounds into account |

rounding | r | -1000 | 1 | 0 | LP rounding heuristic with infeasibility recovering |

shifting | r | -5000 | 10 | 0 | LP rounding heuristic with infeasibility recovering also using continuous variables |

intshifting | r | -10000 | 10 | 0 | LP rounding heuristic with infeasibility recovering and final LP solving |

oneopt | i | -20000 | 1 | 0 | 1-opt heuristic which tries to improve setting of single integer variables |

twoopt | i | -20100 | -1 | 0 | primal heuristic to improve incumbent solution by flipping pairs of variables |

indicator | L | -20200 | 1 | 0 | indicator heuristic to create feasible solutions from values for indicator variables |

adaptivediving | d | -70000 | 5 | 3 | diving heuristic that selects adaptively between the existing, public divesets |

fixandinfer | p | -500000 | -1 | 0 | iteratively fixes variables and propagates inferences |

farkasdiving | d | -900000 | 10 | 0 | LP diving heuristic that tries to construct a Farkas-proof |

feaspump | o | -1000000 | 20 | 0 | objective feasibility pump 2.0 |

conflictdiving | d | -1000100 | 10 | 0 | LP diving heuristic that chooses fixings w.r.t. conflict locks |

coefdiving | d | -1001000 | -1 | 1 | LP diving heuristic that chooses fixings w.r.t. the matrix coefficients |

pscostdiving | d | -1002000 | 10 | 2 | LP diving heuristic that chooses fixings w.r.t. the pseudo cost values |

fracdiving | d | -1003000 | 10 | 3 | LP diving heuristic that chooses fixings w.r.t. the fractionalities |

nlpdiving | d | -1003000 | 10 | 3 | NLP diving heuristic that chooses fixings w.r.t. the fractionalities |

veclendiving | d | -1003100 | 10 | 4 | LP diving heuristic that rounds variables with long column vectors |

distributiondiving | d | -1003300 | 10 | 3 | Diving heuristic that chooses fixings w.r.t. changes in the solution density |

intdiving | d | -1003500 | -1 | 9 | LP diving heuristic that fixes binary variables with large LP value to one |

actconsdiving | d | -1003700 | -1 | 5 | LP diving heuristic that chooses fixings w.r.t. the active constraints |

objpscostdiving | o | -1004000 | 20 | 4 | LP diving heuristic that changes variable's objective values instead of bounds, using pseudo costs as guide |

rootsoldiving | o | -1005000 | 20 | 5 | LP diving heuristic that changes variable's objective values using root LP solution as guide |

linesearchdiving | d | -1006000 | 10 | 6 | LP diving heuristic that chooses fixings following the line from root solution to current solution |

guideddiving | d | -1007000 | 10 | 7 | LP diving heuristic that chooses fixings in direction of incumbent solutions |

octane | r | -1008000 | -1 | 0 | octane primal heuristic for pure {0;1}-problems based on Balas et al. |

rens | L | -1100000 | 0 | 0 | LNS exploring fractional neighborhood of relaxation's optimum |

alns | L | -1100500 | 20 | 0 | Large neighborhood search heuristic that orchestrates the popular neighborhoods Local Branching, RINS, RENS, DINS etc. |

rins | L | -1101000 | 25 | 0 | relaxation induced neighborhood search by Danna, Rothberg, and Le Pape |

localbranching | L | -1102000 | -1 | 0 | local branching heuristic by Fischetti and Lodi |

trustregion | L | -1102000 | -1 | 0 | LNS heuristic for Benders' decomposition based on trust region methods |

gins | L | -1103000 | 20 | 8 | gins works on k-neighborhood in a variable-constraint graph |

mutation | L | -1103000 | -1 | 8 | mutation heuristic randomly fixing variables |

lpface | L | -1104000 | 15 | 0 | LNS heuristic that searches the optimal LP face inside a sub-MIP |

crossover | L | -1104000 | 30 | 0 | LNS heuristic that fixes all variables that are identic in a couple of solutions |

dins | L | -1105000 | -1 | 0 | distance induced neighborhood search by Ghosh |

bound | p | -1107000 | -1 | 0 | heuristic which fixes all integer variables to a bound and solves the remaining LP |

undercover | L | -1110000 | 0 | 0 | solves a sub-CIP determined by a set covering approach |

proximity | L | -2000000 | -1 | 0 | heuristic trying to improve the incumbent by an auxiliary proximity objective function |

subnlp | L | -2000000 | 1 | 0 | primal heuristic that performs a local search in an NLP after fixing integer variables and presolving |

mpec | d | -2050000 | 50 | 0 | regularization heuristic for convex and nonconvex MINLPs |

multistart | L | -2100000 | 0 | 0 | multistart heuristic for convex and nonconvex MINLPs |

trysol | t | -3000000 | 1 | 0 | try solution heuristic |

See https://www.scipopt.org/doc/html/HEUR.php for a detailed description of the primal heuristic properties.

## Propagators

propagator | propprio | freq | presolveprio | presolvetiming | description |
---|---|---|---|---|---|

rootredcost | 10000000 | 1 | 0 | always | reduced cost strengthening using root node reduced costs and the cutoff bound |

dualfix | 8000000 | 0 | 8000000 | fast | roundable variables dual fixing |

genvbounds | 3000000 | 1 | -2000000 | fast | generalized variable bounds propagator |

vbounds | 3000000 | 1 | -90000 | medium exhaustive | propagates variable upper and lower bounds |

pseudoobj | 3000000 | 1 | 6000000 | fast | pseudo objective function propagator |

redcost | 1000000 | 1 | 0 | always | reduced cost strengthening propagator |

probing | -100000d | -1 | -100000 | exhaustive | probing propagator on binary variables |

symmetry | -1000000 | 1 | -10000000 | exhaustive | propagator for handling symmetry |

obbt | -1000000d | 0 | 0 | always | optimization-based bound tightening propagator |

nlobbt | -1100000d | -1 | 0 | always | propagator template |

See https://www.scipopt.org/doc/html/PROP.php for a detailed description of the propagator properties.

## Separators

separator | priority | freq | bounddist | description |
---|---|---|---|---|

closecuts | 1000000 | -1 | 1 | closecuts meta separator |

disjunctive | 10d | 0 | 0 | disjunctive cut separator |

convexproj | 0d | -1 | 1 | separate at projection of point onto convex region |

gauge | 0 | -1 | 1 | gauge separator |

impliedbounds | -50 | 10 | 1 | implied bounds separator |

intobj | -100 | -1 | 0 | integer objective value separator |

cgmip | -1000 | -1 | 0 | Chvatal-Gomory cuts via MIPs separator |

gomory | -1000 | 10 | 1 | Gomory MIR cuts separator |

strongcg | -2000 | 10 | 1 | Strong CG cuts separator (Letchford and Lodi) |

aggregation | -3000 | 10 | 1 | aggregation heuristic for complemented mixed integer rounding cuts and flowcover cuts |

clique | -5000 | 0 | 0 | clique separator of stable set relaxation |

zerohalf | -6000 | 10 | 1 | {0,1/2}-cuts separator |

mcf | -10000 | 0 | 0 | multi-commodity-flow network cut separator |

eccuts | -13000 | -1 | 1 | separator for edge-concave functions |

oddcycle | -15000 | -1 | 1 | odd cycle separator |

flowcover | -100000 | 10 | 0 | separator for flowcover cuts |

cmir | -100000 | 10 | 0 | separator for cmir cuts |

rapidlearning | -1200000 | 5 | 1 | rapid learning heuristic and separator |

See https://www.scipopt.org/doc/html/SEPA.php for a detailed description of the separator properties.

# List of SCIP Options

SCIP supports a large set of options. In the following, we give a detailed list of all SCIP options.

## gams

Option | Description | Default |
---|---|---|

gams/dumpsolutions | name of solutions index gdx file for writing all alternate solutions Range: string | |

gams/dumpsolutionsmerged | name of gdx file for writing all alternate solutions into a single file Range: string | |

gams/indicatorfile | name of GAMS options file that contains definitions on indicators Range: string | |

gams/interactive | command to be issued to the SCIP shell instead of issuing a solve command Range: string | |

gams/mipstart | how to handle initial variable levels, see also section Starting point Range: {0, ..., 4} | 2 |

gams/resolvenlp | whether to resolve MINLP with fixed discrete variables if best solution violates some constraints Range: boolean | 1 |

## gams/solvetrace

## branching

## branching/allfullstrong

## branching/cloud

## branching/distribution

## branching/fullstrong

## branching/inference

## branching/leastinf

## branching/lookahead

## branching/mostinf

## branching/multaggr

## branching/nodereopt

## branching/pscost

## branching/random

## branching/relpscost

## branching/treemodel

## branching/vanillafullstrong

## conflict

## conflict/bounddisjunction

## conflict/graph

Option | Description | Default |
---|---|---|

Options for expert users | ||

conflict/graph/depthscorefac | score factor for depth level in bound relaxation heuristic Range: real | 1 |

## conflict/indicatorconflict

Option | Description | Default |
---|---|---|

Options for expert users | ||

conflict/indicatorconflict/priority | priority of conflict handler <indicatorconflict> Range: {-2147483648, ..., ∞} | 200000 |

## conflict/linear

Option | Description | Default |
---|---|---|

Options for expert users | ||

conflict/linear/priority | priority of conflict handler <linear> Range: {-2147483648, ..., ∞} | -1000000 |

## conflict/logicor

Option | Description | Default |
---|---|---|

Options for expert users | ||

conflict/logicor/priority | priority of conflict handler <logicor> Range: {-2147483648, ..., ∞} | 800000 |

## conflict/setppc

Option | Description | Default |
---|---|---|

Options for expert users | ||

conflict/setppc/priority | priority of conflict handler <setppc> Range: {-2147483648, ..., ∞} | 700000 |

## constraints

## constraints/SOS1

## constraints/SOS2

## constraints/abspower

## constraints/and

## constraints/bivariate

## constraints/bounddisjunction

## constraints/components

## constraints/indicator

## constraints/integral

## constraints/knapsack

## constraints/linear

## constraints/linear/upgrade

## constraints/logicor

## constraints/nonlinear

## constraints/nonlinear/upgrade

## constraints/orbisack

## constraints/orbitope

## constraints/quadratic

## constraints/quadratic/upgrade

## constraints/setppc

## constraints/soc

## constraints/symresack

## constraints/varbound

## decomposition

Option | Description | Default |
---|---|---|

decomposition/maxgraphedge | maximum number of edges in block graph computation, or -1 for no limit Range: {-1, ..., ∞} | 10000 |

## display

## display/avgdualbound

Option | Description | Default |
---|---|---|

display/avgdualbound/active | display activation status of display column <avgdualbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/completed

Option | Description | Default |
---|---|---|

display/completed/active | display activation status of display column <completed> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/concdualbound

Option | Description | Default |
---|---|---|

display/concdualbound/active | display activation status of display column <concdualbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/concgap

Option | Description | Default |
---|---|---|

display/concgap/active | display activation status of display column <concgap> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/concmemused

Option | Description | Default |
---|---|---|

display/concmemused/active | display activation status of display column <concmemused> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/concprimalbound

Option | Description | Default |
---|---|---|

display/concprimalbound/active | display activation status of display column <concprimalbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/concsolfound

Option | Description | Default |
---|---|---|

display/concsolfound/active | display activation status of display column <concsolfound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/conflicts

Option | Description | Default |
---|---|---|

display/conflicts/active | display activation status of display column <conflicts> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/conss

Option | Description | Default |
---|---|---|

display/conss/active | display activation status of display column <conss> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/curcols

Option | Description | Default |
---|---|---|

display/curcols/active | display activation status of display column <curcols> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/curconss

Option | Description | Default |
---|---|---|

display/curconss/active | display activation status of display column <curconss> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/curdualbound

Option | Description | Default |
---|---|---|

display/curdualbound/active | display activation status of display column <curdualbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/currows

Option | Description | Default |
---|---|---|

display/currows/active | display activation status of display column <currows> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/cutoffbound

Option | Description | Default |
---|---|---|

display/cutoffbound/active | display activation status of display column <cutoffbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/cuts

Option | Description | Default |
---|---|---|

display/cuts/active | display activation status of display column <cuts> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/depth

Option | Description | Default |
---|---|---|

display/depth/active | display activation status of display column <depth> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/dualbound

Option | Description | Default |
---|---|---|

display/dualbound/active | display activation status of display column <dualbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/estimate

Option | Description | Default |
---|---|---|

display/estimate/active | display activation status of display column <estimate> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/feasST

Option | Description | Default |
---|---|---|

display/feasST/active | display activation status of display column <feasST> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 0 |

## display/gap

Option | Description | Default |
---|---|---|

display/gap/active | display activation status of display column <gap> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/lpavgiterations

Option | Description | Default |
---|---|---|

display/lpavgiterations/active | display activation status of display column <lpavgiterations> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 (0 for Windows without IDE) |

## display/lpcond

Option | Description | Default |
---|---|---|

display/lpcond/active | display activation status of display column <lpcond> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/lpiterations

Option | Description | Default |
---|---|---|

display/lpiterations/active | display activation status of display column <lpiterations> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/lpobj

Option | Description | Default |
---|---|---|

display/lpobj/active | display activation status of display column <lpobj> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/maxdepth

Option | Description | Default |
---|---|---|

display/maxdepth/active | display activation status of display column <maxdepth> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 (0 for Windows without IDE) |

## display/memtotal

Option | Description | Default |
---|---|---|

display/memtotal/active | display activation status of display column <memtotal> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/memused

Option | Description | Default |
---|---|---|

display/memused/active | display activation status of display column <memused> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/nexternbranchcands

Option | Description | Default |
---|---|---|

display/nexternbranchcands/active | display activation status of display column <nexternbranchcands> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 (2 for nonlinear instances) |

## display/nfrac

Option | Description | Default |
---|---|---|

display/nfrac/active | display activation status of display column <nfrac> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 (2 if discrete variables) |

## display/ninfeasleaves

Option | Description | Default |
---|---|---|

display/ninfeasleaves/active | display activation status of display column <ninfeasleaves> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/nnodes

Option | Description | Default |
---|---|---|

display/nnodes/active | display activation status of display column <nnodes> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/nnodesbelowinc

Option | Description | Default |
---|---|---|

display/nnodesbelowinc/active | display activation status of display column <nnodesbelowinc> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 0 |

## display/nobjleaves

Option | Description | Default |
---|---|---|

display/nobjleaves/active | display activation status of display column <nobjleaves> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/nodesleft

Option | Description | Default |
---|---|---|

display/nodesleft/active | display activation status of display column <nodesleft> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/nrank1nodes

Option | Description | Default |
---|---|---|

display/nrank1nodes/active | display activation status of display column <nrank1nodes> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 0 |

## display/nsols

Option | Description | Default |
---|---|---|

display/nsols/active | display activation status of display column <nsols> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/plungedepth

Option | Description | Default |
---|---|---|

display/plungedepth/active | display activation status of display column <plungedepth> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/poolsize

Option | Description | Default |
---|---|---|

display/poolsize/active | display activation status of display column <poolsize> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/primalbound

Option | Description | Default |
---|---|---|

display/primalbound/active | display activation status of display column <primalbound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/primalgap

Option | Description | Default |
---|---|---|

display/primalgap/active | display activation status of display column <primalgap> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 0 |

## display/pseudoobj

Option | Description | Default |
---|---|---|

display/pseudoobj/active | display activation status of display column <pseudoobj> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/separounds

Option | Description | Default |
---|---|---|

display/separounds/active | display activation status of display column <separounds> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/solfound

Option | Description | Default |
---|---|---|

display/solfound/active | display activation status of display column <solfound> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/sols

Option | Description | Default |
---|---|---|

display/sols/active | display activation status of display column <sols> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 0 |

## display/strongbranchs

Option | Description | Default |
---|---|---|

display/strongbranchs/active | display activation status of display column <strongbranchs> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## display/time

Option | Description | Default |
---|---|---|

display/time/active | display activation status of display column <time> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 (2 for Windows without IDE) |

## display/vars

Option | Description | Default |
---|---|---|

display/vars/active | display activation status of display column <vars> (0: off, 1: auto, 2:on) Range: {0, ..., 2} | 1 |

## estimation

## estimation/restarts

## estimation/ssg

## estimation/treeprofile

## heuristics

Option | Description | Default |
---|---|---|

Options for expert users | ||

heuristics/useuctsubscip | should setting of common subscip parameters include the activation of the UCT node selector? Range: boolean | 0 |

## heuristics/actconsdiving

## heuristics/adaptivediving

## heuristics/alns

## heuristics/alns/crossover

## heuristics/alns/dins

## heuristics/alns/localbranching

## heuristics/alns/mutation

## heuristics/alns/proximity

## heuristics/alns/rens

## heuristics/alns/rins

## heuristics/alns/trustregion

## heuristics/alns/zeroobjective

## heuristics/bound

## heuristics/clique

## heuristics/coefdiving

## heuristics/completesol

## heuristics/conflictdiving

## heuristics/crossover

## heuristics/dins

## heuristics/distributiondiving

## heuristics/dualval

## heuristics/farkasdiving

## heuristics/feaspump

## heuristics/fixandinfer

## heuristics/fracdiving

## heuristics/gins

## heuristics/guideddiving

## heuristics/indicator

## heuristics/intdiving

## heuristics/intshifting

## heuristics/linesearchdiving

## heuristics/localbranching

## heuristics/locks

## heuristics/lpface

## heuristics/mpec

## heuristics/multistart

## heuristics/mutation

## heuristics/nlpdiving

## heuristics/objpscostdiving

## heuristics/octane

## heuristics/ofins

## heuristics/oneopt

## heuristics/padm

## heuristics/proximity

## heuristics/pscostdiving

## heuristics/randrounding

## heuristics/rens

## heuristics/reoptsols

## heuristics/repair

## heuristics/rins

## heuristics/rootsoldiving

## heuristics/rounding

## heuristics/shiftandpropagate

## heuristics/shifting

## heuristics/simplerounding

## heuristics/subnlp

## heuristics/trivial

## heuristics/trivialnegation

## heuristics/trustregion

## heuristics/trysol

## heuristics/twoopt

## heuristics/undercover

## heuristics/vbounds

## heuristics/veclendiving

## heuristics/zeroobj

## heuristics/zirounding

## history

## limits

Option | Description | Default |
---|---|---|

limits/absgap | solving stops, if the absolute gap = |primalbound - dualbound| is below the given value Range: [0, ∞] | GAMS optca |

limits/autorestartnodes | if solve exceeds this number of nodes for the first time, an automatic restart is triggered (-1: no automatic restart) Range: {-1, ..., ∞} | -1 |

limits/bestsol | solving stops, if the given number of solution improvements were found (-1: no limit) Range: {-1, ..., ∞} | -1 |

limits/gap | solving stops, if the relative gap = |primal - dual|/MIN(|dual|,|primal|) is below the given value, the gap is 'Infinity', if primal and dual bound have opposite signs Range: [0, ∞] | GAMS optcr |

limits/maxorigsol | maximal number of solutions candidates to store in the solution storage of the original problem Range: {0, ..., ∞} | 10 |

limits/maxsol | maximal number of solutions to store in the solution storage Range: {1, ..., ∞} | 100 |

limits/memory | maximal memory usage in MB; reported memory usage is lower than real memory usage! Range: [0, 8.79609e+12] | GAMS workspace |

limits/nodes | maximal number of nodes to process (-1: no limit) Range: {-1, ..., ∞} | GAMS nodlim, if > 0, otherwise -1 |

limits/restarts | solving stops, if the given number of restarts was triggered (-1: no limit) Range: {-1, ..., ∞} | -1 |

limits/softtime | soft time limit which should be applied after first solution was found (-1.0: disabled) Range: [-1, ∞] | -1 |

limits/solutions | solving stops, if the given number of solutions were found (-1: no limit) Range: {-1, ..., ∞} | -1 |

limits/stallnodes | solving stops, if the given number of nodes was processed since the last improvement of the primal solution value (-1: no limit) Range: {-1, ..., ∞} | -1 |

limits/time | maximal time in seconds to run Range: [0, ∞] | GAMS reslim |

limits/totalnodes | maximal number of total nodes (incl. restarts) to process (-1: no limit) Range: {-1, ..., ∞} | -1 |

## lp

Option | Description | Default |
---|---|---|

lp/alwaysgetduals | should the Farkas duals always be collected when an LP is found to be infeasible? Range: boolean | 0 |

lp/initalgorithm | LP algorithm for solving initial LP relaxations (automatic 's'implex, 'p'rimal simplex, 'd'ual simplex, 'b'arrier, barrier with 'c'rossover) Range: s, p, d, b, c | s |

lp/pricing | LP pricing strategy ('l'pi default, 'a'uto, 'f'ull pricing, 'p'artial, 's'teepest edge pricing, 'q'uickstart steepest edge pricing, 'd'evex pricing) Range: l, a, f, p, s, q, d | l |

lp/resolvealgorithm | LP algorithm for resolving LP relaxations if a starting basis exists (automatic 's'implex, 'p'rimal simplex, 'd'ual simplex, 'b'arrier, barrier with 'c'rossover) Range: s, p, d, b, c | s |

lp/solvedepth | maximal depth for solving LP at the nodes (-1: no depth limit) Range: {-1, ..., 65534} | -1 |

lp/solvefreq | frequency for solving LP at the nodes (-1: never; 0: only root LP) Range: {-1, ..., 65534} | 1 |

lp/solver | LP solver to use (clp, cplex, soplex) Range: string | cplex, if licensed, otherwise soplex |

Options for expert users | ||

lp/checkdualfeas | should LP solutions be checked for dual feasibility, resolving LP when numerical troubles occur? Range: boolean | 1 |

lp/checkfarkas | should infeasibility proofs from the LP be checked? Range: boolean | 1 |

lp/checkprimfeas | should LP solutions be checked for primal feasibility, resolving LP when numerical troubles occur? Range: boolean | 1 |

lp/checkstability | should LP solver's return status be checked for stability? Range: boolean | 1 |

lp/cleanupcols | should new non-basic columns be removed after LP solving? Range: boolean | 0 |

lp/cleanupcolsroot | should new non-basic columns be removed after root LP solving? Range: boolean | 0 |

lp/cleanuprows | should new basic rows be removed after LP solving? Range: boolean | 1 |

lp/cleanuprowsroot | should new basic rows be removed after root LP solving? Range: boolean | 1 |

lp/clearinitialprobinglp | should lp state be cleared at the end of probing mode when lp was initially unsolved, e.g., when called right after presolving? Range: boolean | 1 |

lp/colagelimit | maximum age a dynamic column can reach before it is deleted from the LP (-1: don't delete columns due to aging) Range: {-1, ..., ∞} | 10 |

lp/conditionlimit | maximum condition number of LP basis counted as stable (-1.0: no limit) Range: [-1, ∞] | -1 |

lp/disablecutoff | disable the cutoff bound in the LP solver? (0: enabled, 1: disabled, 2: auto) Range: {0, ..., 2} | 2 |

lp/fastmip | which FASTMIP setting of LP solver should be used? 0: off, 1: low Range: {0, ..., 1} | 1 |

lp/freesolvalbuffers | should the buffers for storing LP solution values during diving be freed at end of diving? Range: boolean | 0 |

lp/iterlim | iteration limit for each single LP solve (-1: no limit) Range: {-1, ..., ∞} | -1 |

lp/lexdualalgo | should the lexicographic dual algorithm be used? Range: boolean | 0 |

lp/lexdualbasic | choose fractional basic variables in lexicographic dual algorithm? Range: boolean | 0 |

lp/lexdualmaxrounds | maximum number of rounds in the lexicographic dual algorithm (-1: unbounded) Range: {-1, ..., ∞} | 2 |

lp/lexdualrootonly | should the lexicographic dual algorithm be applied only at the root node Range: boolean | 1 |

lp/lexdualstalling | turn on the lex dual algorithm only when stalling? Range: boolean | 1 |

lp/minmarkowitz | minimal Markowitz threshold to control sparsity/stability in LU factorization Range: [0.0001, 0.9999] | 0.01 |

lp/presolving | should presolving of LP solver be used? Range: boolean | 1 |

lp/refactorinterval | LP refactorization interval (0: auto) Range: {0, ..., ∞} | 0 |

lp/resolveiterfac | factor of average LP iterations that is used as LP iteration limit for LP resolve (-1: unlimited) Range: [-1, ∞] | -1 |

lp/resolveitermin | minimum number of iterations that are allowed for LP resolve Range: {1, ..., ∞} | 1000 |

lp/resolverestore | should the LP be resolved to restore the state at start of diving (if FALSE we buffer the solution values)? Range: boolean | 0 |

lp/rootiterlim | iteration limit for initial root LP solve (-1: no limit) Range: {-1, ..., ∞} | -1 |

lp/rowagelimit | maximum age a dynamic row can reach before it is deleted from the LP (-1: don't delete rows due to aging) Range: {-1, ..., ∞} | 10 |

lp/rowrepswitch | simplex algorithm shall use row representation of the basis if number of rows divided by number of columns exceeds this value (-1.0 to disable row representation) Range: [-1, ∞] | 1.2 |

lp/scaling | LP scaling (0: none, 1: normal, 2: aggressive) Range: {0, ..., 2} | 1 |

lp/solutionpolishing | LP solution polishing method (0: disabled, 1: only root, 2: always, 3: auto) Range: {0, ..., 3} | 3 |

lp/threads | number of threads used for solving the LP (0: automatic) Range: {0, ..., 64} | GAMS threads |

## memory

## misc

## nodeselection

## nodeselection/bfs

## nodeselection/breadthfirst

## nodeselection/dfs

## nodeselection/estimate

## nodeselection/hybridestim

## nodeselection/restartdfs

## nodeselection/uct

## numerics

## presolving

## presolving/boundshift

## presolving/convertinttobin

## presolving/domcol

## presolving/dualagg

## presolving/dualcomp

## presolving/dualinfer

## presolving/dualsparsify

## presolving/gateextraction

## presolving/implics

## presolving/inttobinary

## presolving/milp

Option | Description | Default |
---|---|---|

presolving/milp/hugebound | absolute bound value that is considered too huge for activitity based calculations Range: [0, ∞] | 1e+08 |

presolving/milp/markowitztolerance | the markowitz tolerance used for substitutions Range: [0, 1] | 0.01 |

presolving/milp/maxfillinpersubstitution | maximal possible fillin for substitutions to be considered Range: {-2147483648, ..., ∞} | 3 |

presolving/milp/maxrounds | maximal number of presolving rounds the presolver participates in (-1: no limit) Range: {-1, ..., ∞} | -1 |

presolving/milp/modifyconsfac | modify SCIP constraints when the number of nonzeros or rows is at most this factor times the number of nonzeros or rows before presolving Range: [0, 1] | 0.8 |

presolving/milp/randomseed | the random seed used for randomization of tie breaking Range: {-2147483648, ..., ∞} | 0 |

presolving/milp/threads | maximum number of threads presolving may use (0: automatic) Range: {0, ..., ∞} | GAMS threads |

Options for expert users | ||

presolving/milp/enabledomcol | should the dominated column presolver be enabled within the presolve library? Range: boolean | 1 |

presolving/milp/enabledualinfer | should the dualinfer presolver be enabled within the presolve library? Range: boolean | 1 |

presolving/milp/enablemultiaggr | should the multi-aggregation presolver be enabled within the presolve library? Range: boolean | 1 |

presolving/milp/enableparallelrows | should the parallel rows presolver be enabled within the presolve library? Range: boolean | 1 |

presolving/milp/enableprobing | should the probing presolver be enabled within the presolve library? Range: boolean | 1 |

presolving/milp/enablesparsify | should the sparsify presolver be enabled within the presolve library? Range: boolean | 0 |

presolving/milp/maxshiftperrow | maximal amount of nonzeros allowed to be shifted to make space for substitutions Range: {0, ..., ∞} | 10 |

presolving/milp/priority | priority of presolver <milp> Range: {-536870912, ..., 536870911} | 9999999 |

presolving/milp/timing | timing mask of presolver <milp> (4:FAST, 8:MEDIUM, 16:EXHAUSTIVE, 32:FINAL) Range: {4, ..., 60} | 8 |