Scippy

SCIP

Solving Constraint Integer Programs

Tutorial: the interactive shell

If you are using SCIP as a black box solver, here you will find some tips and tricks what you can do.

Read and optimize a problem instance

"Prerequisites"

First of all, we need a SCIP binary and an example problem file to work with. For installation we refer you to the Installing SCIP section.

Therefore, you can either download the SCIP standard distribution (which includes problem files) and compile it on your own or you can download a precompiled binary and an example problem separately. SCIP can read files in LP, MPS, ZPL, WBO, FZN, PIP, OSiL, and other formats (see File Readers).

If you want to download the source code of the SCIP standard distribution, we recommend to go to the SCIP download section, download the latest release, inflate the tarball (e.g., with "tar xzf scipoptsuite-[version].tgz"), and follow the instructions in the INSTALL file. The instance stein27, which will serve as an example in this tutorial, can be found under scipoptsuite-[version]/scip-[version]/check/instances/MIP/stein27.fzn. Alternatively you can download an instance file from the MIPLIB 2017 page.

If you want to download a precompiled binary, go to the SCIP download section and download an appropriate binary for your operating system. The SCIP source code distribution already comes with the example instance used throughout this tutorial. To follow this tutorial with a precompiled binary, we recommend downloading the instance stein27 from the MIPLIB 3.0 homepage.

"After installation"

Now start your binary, without any arguments. This opens the interactive shell, which should look somehow like this:

SCIP version 9.2.0 [precision: 8 byte] [memory: block] [mode: optimized] [LP solver: Soplex 7.1.2] [GitHash: 74cea9222e-dirty]
Copyright (c) 2002-2024 Zuse Institute Berlin (ZIB)
External libraries:
Readline 8.2 GNU library for command line editing (gnu.org/s/readline)
Soplex 7.1.2 Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: b040369c]
CppAD 20180000.0 Algorithmic Differentiation of C++ algorithms developed by B. Bell (github.com/coin-or/CppAD)
ZLIB 1.2.13 General purpose compression library by J. Gailly and M. Adler (zlib.net)
GMP 6.2.1 GNU Multiple Precision Arithmetic Library developed by T. Granlund (gmplib.org)
ZIMPL 3.6.2 Zuse Institute Mathematical Programming Language developed by T. Koch (zimpl.zib.de)
AMPL/MP 690e9e7 AMPL .nl file reader library (github.com/ampl/mp)
PaPILO 2.4.0 parallel presolve for integer and linear optimization (github.com/scipopt/papilo)
Nauty 2.8.8 Computing Graph Automorphism Groups by Brendan D. McKay (users.cecs.anu.edu.au/~bdm/nauty)
sassy 1.1 Symmetry preprocessor by Markus Anders (github.com/markusa4/sassy)
Ipopt 3.14.16 Interior Point Optimizer developed by A. Waechter et.al. (github.com/coin-or/Ipopt)
user parameter file <scip.set> not found - using default parameters

First of all "help" shows you a list of all available shell commands. Brackets indicate a submenu with further options.

SCIP> help
<change> change the problem
<display> display information
<fix> fix/unfix parameters
<set> load/save/change parameters
<write> write information to file
checksol double checks best solution w.r.t. original problem
concurrentopt solve the problem using concurrent solvers
count count number of feasible solutions
countpresolve presolve instance before counting number of feasible solutions
free free current problem from memory
help display this help
newstart reset branch and bound tree to start again from root
optimize solve the problem
presolve solve the problem, but stop after presolving stage
quit leave SCIP
read read a problem
validatesolve validate the solution against external objective reference interval

Okay, let's solve the example instance... use "read check/instances/MIP/stein27.fzn" (or the problem file of your choice) to parse the instance file, "optimize" to solve it and "display solution" to show the nonzero variables of the best found solution.

SCIP> read check/instances/MIP/stein27.fzn
read problem <check/instances/MIP/stein27.fzn>
============
original problem has 29 variables (29 bin, 0 int, 0 impl, 0 cont) and 118 constraints
SCIP> optimize
feasible solution found by trivial heuristic after 0.0 seconds, objective value 2.700000e+01
presolving:
(round 1, fast) 2 del vars, 0 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
(0.0s) running MILP presolver
(0.0s) MILP presolver found nothing
(round 2, exhaustive) 2 del vars, 0 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 118 upgd conss, 0 impls, 0 clqs
(0.0s) probing cycle finished: starting next cycle
(0.0s) symmetry computation started: requiring (bin +, int +, cont +), (fixed: bin -, int -, cont -)
(0.0s) symmetry computation finished: 8 generators found (max: 1500, log10 of symmetry group size: 0.0) (symcode time: 0.00)
dynamic symmetry handling statistics:
orbitopal reduction: no components
orbital reduction: 1 components of sizes 8
lexicographic reduction: 8 permutations with support sizes 18, 18, 18, 18, 18, 26, 24, 18
handled 1 out of 1 symmetry components
presolving (3 rounds: 3 fast, 2 medium, 2 exhaustive):
2 deleted vars, 0 deleted constraints, 0 added constraints, 0 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients
0 implications, 0 cliques
presolved problem has 27 variables (27 bin, 0 int, 0 impl, 0 cont) and 118 constraints
1 constraints of type <knapsack>
117 constraints of type <logicor>
transformed objective value is always integral (scale: 1)
Presolving Time: 0.01
transformed 1/1 original solutions to the transformed problem space
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
i 0.0s| 1 | 0 | 0 | - | oneopt| 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 27 | - | 1774k | 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.0s| 1 | 0 | 27 | - |randroun| 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 56 | - | 2014k | 0 | 27 | 118 | 120 | 3 | 1 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 97 | - | 2165k | 0 | 27 | 118 | 122 | 5 | 2 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 109 | - | 2488k | 0 | 27 | 118 | 123 | 6 | 3 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.1s| 1 | 0 | 113 | - | 3088k | 0 | 27 | 118 | 125 | 8 | 4 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.1s| 1 | 0 | 113 | - |randroun| 0 | 27 | 118 | 125 | 0 | 4 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.1s| 1 | 0 | 122 | - | 3414k | 0 | 27 | 118 | 126 | 9 | 5 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.1s| 1 | 0 | 143 | - | 4135k | 0 | 27 | 118 | 128 | 11 | 6 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.1s| 1 | 0 | 143 | - |rounding| 0 | 27 | 118 | 128 | 11 | 6 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 157 | - | 5113k | 0 | 27 | 118 | 130 | 13 | 7 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 166 | - | 5696k | 0 | 27 | 118 | 131 | 14 | 8 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 181 | - | 6765k | 0 | 27 | 118 | 132 | 15 | 9 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 197 | - | 7648k | 0 | 27 | 118 | 133 | 16 | 10 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
0.1s| 1 | 0 | 207 | - | 7662k | 0 | 27 | 118 | 134 | 18 | 11 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 214 | - | 7675k | 0 | 27 | 118 | 137 | 21 | 12 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 220 | - | 7690k | 0 | 27 | 118 | 139 | 23 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
r 0.1s| 1 | 0 | 220 | - |randroun| 0 | 27 | 118 | 139 | 0 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 227 | - | 7705k | 0 | 27 | 118 | 140 | 24 | 14 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 238 | - | 7720k | 0 | 27 | 118 | 141 | 25 | 15 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 247 | - | 7735k | 0 | 27 | 118 | 142 | 26 | 16 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 250 | - | 7758k | 0 | 27 | 118 | 142 | 27 | 17 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 254 | - | 7758k | 0 | 27 | 118 | 143 | 28 | 18 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 2 | 254 | - | 7760k | 0 | 27 | 118 | 143 | 28 | 18 | 0 | 11 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.2s| 100 | 17 | 1251 | 10.1 | 9770k | 13 | 27 | 118 | 137 | 76 | 0 | 4 | 126 | 1.433333e+01 | 1.800000e+01 | 25.58%| 75.51%
0.3s| 200 | 23 | 2118 | 9.4 | 13M | 15 | 27 | 118 | 135 | 157 | 0 | 12 | 137 | 1.525556e+01 | 1.800000e+01 | 17.99%| 82.23%
SCIP Status : problem is solved [optimal solution found]
Solving Time (sec) : 0.36
Solving Nodes : 265
Primal Bound : +1.80000000000000e+01 (254 solutions)
Dual Bound : +1.80000000000000e+01
Gap : 0.00 %
SCIP> display solution
objective value: 18
true 1 (obj:0)
x0002 1 (obj:1)
x0003 1 (obj:1)
x0006 1 (obj:1)
x0007 1 (obj:1)
x0008 1 (obj:1)
x0009 1 (obj:1)
x0012 1 (obj:1)
x0013 1 (obj:1)
x0014 1 (obj:1)
x0015 1 (obj:1)
x0017 1 (obj:1)
x0018 1 (obj:1)
x0019 1 (obj:1)
x0021 1 (obj:1)
x0022 1 (obj:1)
x0024 1 (obj:1)
x0025 1 (obj:1)
x0026 1 (obj:1)

What do we see here? After "optimize", SCIP first goes into presolving. Not much is happening for this instance, just the linear constraints get upgraded to more specific types. Each round of presolving will be displayed in a single line, with a short summary at the end. Then, we see the actual solving process. The table output of the branch-and-cut solving process is very detailed during the root node. Afterwards, a new line is displayed every 100th node. Furthermore, every new incumbent solution triggers a new table row, starting with a character to indicate the heuristic that found the solution. Which letter represents which heuristic can be seen with the "display heuristics" command, see Displaying detailed solving statistics for an example.

After some lines the root node processing is finished. From now on, we will see an output line every hundredth node or whenever a new incumbent is found. After some more nodes, the "dualbound" starts moving, too. At one point, both will be the same, and the solving process terminates, showing us some wrap-up information.

The exact performance may of course vary among different architectures and operating systems. Do not be worried if your installation needs more or less time or nodes to solve. Also, this instance has more than 2000 different optimal solutions. The optimal objective value always has to be 18, but the solution vector may differ. If you are interested in this behavior, which is called "performance variability", you may have a look at the MIPLIB2010 paper.

Writing problems and solutions to a file

SCIP can also write information to files. E.g., we could store the incumbent solution to a file, or output the problem instance in another file format (the LP format is much more human readable than the MPS format, for example).

SCIP> write solution stein27.sol
written solution information to file <stein27.sol>
SCIP> write problem stein27.lp
written original problem to file <stein27.lp>

Passing starting solutions can increase the solving performance so that SCIP does not need to construct an initial feasible solution by itself. After reading the problem instance, use the "read" command again, this time with a file containing solution information. Solutions can be specified in a raw or xml-format and must have the file extension ".sol", see the documentation of the solution reader of SCIP for further information.

Customized settings are not written or read with the "write" and "read" commands, but with the three commands

SCIP> set save settingsfile.set
saved parameter file <settingsfile.set>
SCIP> set diffsave settingsfile.set
saved non-default parameter settings to file <settingsfile.set>
SCIP> set load settingsfile.set
loaded parameter file <settingsfile.set>

See the section on parameters Changing parameters from the interactive shell for more information.

Displaying detailed solving statistics

We might want to have some more information now. Which of the heuristics found solutions? Which plugins were called during the solutions process and how much time did they spend? Information on certain plugin types (e.g., heuristics, branching rules, separators) is displayed via "display <plugin-type>", information on the solution process via "display statistics", and "display problem" shows the current instance.

SCIP> display heuristics
primal heuristic c priority freq ofs description
---------------- - -------- ---- --- -----------
dps L 75000 -1 0 primal heuristic for decomposable MIPs
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
reoptsols p 40000 0 0 primal heuristic updating solutions found in a previous optimization round
trivialnegation p 39990 0 0 negate solution entries if an objective coefficient changes the sign, enters or leaves the objective.
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 -10 -1 0 primal heuristic using dual values
repair L -20 -1 0 tries to repair a primal infeasible solution
simplerounding r -30 1 0 simple and fast LP rounding heuristic
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
scheduler L -30000 -1 0 Adaptive heuristic to schedule LNS and diving heuristics
adaptivediving d -70000 5 3 diving heuristic that selects adaptively between the existing, public divesets
indicatordiving I -150000 0 0 LP diving heuristic that fixes indicator variables controlling semicontinuous variables
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 -1003010 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 -1102010 -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 -1103010 -1 8 mutation heuristic randomly fixing variables
crossover L -1104000 30 0 LNS heuristic that fixes all variables that are identic in a couple of solutions
lpface L -1104010 15 0 LNS heuristic that searches the optimal LP face inside a sub-MIP
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 -2000010 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 -3000010 1 0 try solution heuristic
SCIP> display statistics
SCIP Status : problem is solved [optimal solution found]
Total Time : 0.37
solving : 0.36
presolving : 0.01 (included in solving)
reading : 0.00
copying : 0.00 (2 #copies) (minimal 0.00, maximal 0.00, average 0.00)
Original Problem :
Problem name : check/instances/MIP/stein27.fzn
Variables : 29 (29 binary, 0 integer, 0 implicit integer, 0 continuous)
Constraints : 118 initial, 118 maximal
Objective : minimize, 27 non-zeros (abs.min = 1, abs.max = 1)
Presolved Problem :
Problem name : t_check/instances/MIP/stein27.fzn
Variables : 27 (27 binary, 0 integer, 0 implicit integer, 0 continuous)
Constraints : 118 initial, 118 maximal
Objective : minimize, 27 non-zeros (abs.min = 1, abs.max = 1)
Nonzeros : 378 constraint, 0 clique table
Presolvers : ExecTime SetupTime Calls FixedVars AggrVars ChgTypes ChgBounds AddHoles DelCons AddCons ChgSides ChgCoefs
boundshift : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
convertinttobin : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
domcol : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
dualagg : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualcomp : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualinfer : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualsparsify : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
gateextraction : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
implics : 0.00 0.00 2 0 0 0 0 0 0 0 0 0
inttobinary : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
milp : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
qpkktref : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
redvub : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
sparsify : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
stuffing : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
trivial : 0.00 0.00 3 2 0 0 0 0 0 0 0 0
tworowbnd : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualfix : 0.00 0.00 3 0 0 0 0 0 0 0 0 0
genvbounds : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
probing : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
pseudoobj : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
symmetry : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
vbounds : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
knapsack : 0.00 0.00 3 0 0 0 0 0 0 0 0 0
linear : 0.00 0.00 3 0 0 0 0 0 0 0 0 0
logicor : 0.00 0.00 3 0 0 0 0 0 0 0 0 0
benders : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
components : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
root node : - - - 13 - - 13 - - - - -
Constraints : Number MaxNumber #Separate #Propagate #EnfoLP #EnfoRelax #EnfoPS #Check #ResProp Cutoffs DomReds Cuts Applied Conss Children
benderslp : 0 0 0 0 157 0 0 259 0 0 0 0 0 0 0
integral : 0 0 0 0 157 0 0 259 0 0 57 0 0 2 264
knapsack : 1 1 0 1088 0 0 0 255 0 1 0 0 0 0 0
logicor : 117+ 119 18 770 0 0 0 254 14 3 249 0 0 0 0
benders : 0 0 0 0 0 0 0 256 0 0 0 0 0 0 0
fixedvar : 0 0 0 0 0 0 0 256 0 0 0 0 0 0 0
countsols : 0 0 0 0 0 0 0 256 0 0 0 0 0 0 0
components : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Constraint Timings : TotalTime SetupTime Separate Propagate EnfoLP EnfoPS EnfoRelax Check ResProp SB-Prop
benderslp : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
integral : 0.03 0.00 0.00 0.00 0.03 0.00 0.00 0.00 0.00 0.00
knapsack : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
logicor : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
benders : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
fixedvar : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
countsols : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
components : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Propagators : #Propagate #ResProp Cutoffs DomReds
dualfix : 2 0 0 0
genvbounds : 0 0 0 0
nlobbt : 0 0 0 0
obbt : 0 0 0 0
probing : 0 0 0 0
pseudoobj : 639 2 1 4
redcost : 20 0 0 0
rootredcost : 0 0 0 0
symmetry : 888 0 6 65
vbounds : 0 0 0 0
Propagator Timings : TotalTime SetupTime Presolve Propagate ResProp SB-Prop
dualfix : 0.00 0.00 0.00 0.00 0.00 0.00
genvbounds : 0.00 0.00 0.00 0.00 0.00 0.00
nlobbt : 0.00 0.00 0.00 0.00 0.00 0.00
obbt : 0.00 0.00 0.00 0.00 0.00 0.00
probing : 0.00 0.00 0.00 0.00 0.00 0.00
pseudoobj : 0.00 0.00 0.00 0.00 0.00 0.00
redcost : 0.00 0.00 0.00 0.00 0.00 0.00
rootredcost : 0.00 0.00 0.00 0.00 0.00 0.00
symmetry : 0.01 0.00 0.00 0.00 0.00 0.00
vbounds : 0.00 0.00 0.00 0.00 0.00 0.00
Symmetry :
orbitopal red. : 0 reductions applied, 0 cutoffs
orbital reduction: 39 reductions applied, 3 cutoffs
lexicographic red: 83 reductions applied, 3 cutoffs
shadow tree time : 0.00 s
Conflict Analysis : Time Calls Success DomReds Conflicts Literals Reconvs ReconvLits Dualrays Nonzeros LP Iters (pool size: [10000,10000])
propagation : 0.00 3 1 - 3 12.3 0 0.0 - - -
infeasible LP : 0.00 0 0 - 0 0.0 0 0.0 0 0.0 0
bound exceed. LP : 0.00 89 13 - 17 7.3 0 0.0 0 0.0 10
strong branching : 0.00 0 0 - 0 0.0 0 0.0 - - 0
pseudo solution : 0.00 0 0 - 0 0.0 0 0.0 - - -
applied globally : 0.00 - - 0 0 0.0 - - 0 - -
applied locally : - - - 0 14 7.4 - - 0 - -
Separators : ExecTime SetupTime Calls RootCalls Cutoffs DomReds FoundCuts ViaPoolAdd DirectAdd Applied ViaPoolApp DirectApp Conss
cut pool : 0.01 - 261 35 - - 3188 5584 - - - - - (maximal pool size: 1965)
aggregation : 0.03 0.00 136 18 0 0 0 0 0 0 0 0 0
> cmir : - - - - - - - 0 0 0 0 0 -
> flowcover : - - - - - - - 0 0 0 0 0 -
> knapsackcover : - - - - - - - 0 0 0 0 0 -
cgmip : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
clique : 0.00 0.00 1 1 0 0 0 0 0 0 0 0 0
closecuts : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
convexproj : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
disjunctive : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
eccuts : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
gauge : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
gomory : 0.17 0.00 118 10 0 0 3064 5313 0 148 148 0 0
> gomorymi : - - - - - - - 2337 0 66 66 0 -
> strongcg : - - - - - - - 2976 0 82 82 0 -
impliedbounds : 0.00 0.00 136 18 0 0 0 0 0 0 0 0 0
interminor : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
intobj : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
lagromory : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
mcf : 0.00 0.00 1 1 0 0 0 0 0 0 0 0 0
minor : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
mixing : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
oddcycle : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
rapidlearning : 0.02 0.00 1 1 0 0 0 0 0 0 0 0 0
rlt : 0.00 0.00 10 10 0 0 0 0 0 0 0 0 0
zerohalf : 0.01 0.00 126 18 0 0 124 271 0 33 33 0 0
Cutselectors : ExecTime SetupTime Calls RootCalls Selected Forced Filtered RootSelec RootForc RootFilt
hybrid : 0.00 0.00 134 18 181 0 5403 28 0 2057
ensemble : 0.00 0.00 0 0 0 0 0 0 0 0
dynamic : 0.00 0.00 0 0 0 0 0 0 0 0
Pricers : ExecTime SetupTime Calls Vars
problem variables: 0.00 - 0 0
Branching Rules : ExecTime SetupTime BranchLP BranchExt BranchPS Cutoffs DomReds Cuts Conss Children
allfullstrong : 0.00 0.00 0 0 0 0 0 0 0 0
cloud : 0.00 0.00 0 0 0 0 0 0 0 0
distribution : 0.00 0.00 0 0 0 0 0 0 0 0
fullstrong : 0.00 0.00 0 0 0 0 0 0 0 0
gomory : 0.00 0.00 0 0 0 0 0 0 0 0
inference : 0.00 0.00 0 0 0 0 0 0 0 0
leastinf : 0.00 0.00 0 0 0 0 0 0 0 0
lookahead : 0.00 0.00 0 0 0 0 0 0 0 0
mostinf : 0.00 0.00 0 0 0 0 0 0 0 0
multaggr : 0.00 0.00 0 0 0 0 0 0 0 0
nodereopt : 0.00 0.00 0 0 0 0 0 0 0 0
pscost : 0.00 0.00 0 0 0 0 0 0 0 0
random : 0.00 0.00 0 0 0 0 0 0 0 0
relpscost : 0.03 0.00 157 0 0 0 57 0 2 264
vanillafullstrong: 0.00 0.00 0 0 0 0 0 0 0 0
Primal Heuristics : ExecTime SetupTime Calls Found Best
LP solutions : 0.00 - - 0 0
relax solutions : 0.00 - - 0 0
pseudo solutions : 0.00 - - 0 0
strong branching : 0.00 - - 93 0
actconsdiving : 0.00 0.00 0 0 0
adaptivediving : 0.00 0.00 1 0 0
alns : 0.00 0.00 1 0 0
bound : 0.00 0.00 0 0 0
clique : 0.00 0.00 0 0 0
coefdiving : 0.00 0.00 0 0 0
completesol : 0.00 0.00 0 0 0
conflictdiving : 0.00 0.00 1 0 0
crossover : 0.00 0.00 0 0 0
dins : 0.00 0.00 0 0 0
distributiondivin: 0.00 0.00 1 0 0
dps : 0.00 0.00 0 0 0
dualval : 0.00 0.00 0 0 0
farkasdiving : 0.00 0.00 0 0 0
feaspump : 0.00 0.00 0 0 0
fixandinfer : 0.00 0.00 0 0 0
fracdiving : 0.00 0.00 1 0 0
gins : 0.00 0.00 0 0 0
guideddiving : 0.00 0.00 0 0 0
indicator : 0.00 0.00 0 0 0
indicatordiving : 0.00 0.00 0 0 0
intdiving : 0.00 0.00 0 0 0
intshifting : 0.00 0.00 0 0 0
linesearchdiving : 0.00 0.00 0 0 0
localbranching : 0.00 0.00 0 0 0
locks : 0.01 0.00 1 0 0
lpface : 0.00 0.00 0 0 0
mpec : 0.00 0.00 0 0 0
multistart : 0.00 0.00 0 0 0
mutation : 0.00 0.00 0 0 0
nlpdiving : 0.00 0.00 0 0 0
objpscostdiving : 0.00 0.00 1 1 0
octane : 0.00 0.00 0 0 0
ofins : 0.00 0.00 0 0 0
oneopt : 0.00 0.00 5 1 1
padm : 0.00 0.00 0 0 0
proximity : 0.00 0.00 0 0 0
pscostdiving : 0.00 0.00 1 1 0
randrounding : 0.00 0.00 19 19 0
rens : 0.00 0.00 0 0 0
reoptsols : 0.00 0.00 0 0 0
repair : 0.00 0.00 0 0 0
rins : 0.00 0.00 0 0 0
rootsoldiving : 0.00 0.00 0 0 0
rounding : 0.00 0.00 291 1 1
scheduler : 0.00 0.00 0 0 0
shiftandpropagate: 0.00 0.00 0 0 0
shifting : 0.00 0.00 160 12 0
simplerounding : 0.00 0.00 291 28 0
subnlp : 0.00 0.00 0 0 0
trivial : 0.00 0.00 2 1 1
trivialnegation : 0.00 0.00 0 0 0
trustregion : 0.00 0.00 0 0 0
trysol : 0.00 0.00 0 0 0
twoopt : 0.00 0.00 0 0 0
undercover : 0.00 0.00 0 0 0
vbounds : 0.00 0.00 0 0 0
veclendiving : 0.00 0.00 1 0 0
zeroobj : 0.00 0.00 0 0 0
zirounding : 0.00 0.00 132 97 0
other solutions : - - - 0 -
LNS (Scheduler) : Calls SetupTime SolveTime SolveNodes Sols Best Exp3 Exp3-IX EpsGreedy UCB TgtFixRate Opt Inf Node Stal Sol Usr Othr Actv
rens : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
rins : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
mutation : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
localbranching : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
crossover : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
proximity : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
zeroobjective : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
dins : 0 0.00 0.00 0 0 0 0.00000 0.12500 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 1
trustregion : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
LP : Time Calls Iterations Iter/call Iter/sec Time-0-It Calls-0-It ItLimit
primal LP : 0.00 54 0 0.00 - 0.00 54
dual LP : 0.03 418 2461 5.90 77516.69 0.00 1
lex dual LP : 0.00 0 0 0.00 -
barrier LP : 0.00 0 0 0.00 - 0.00 0
resolve instable : 0.00 0 0 0.00 -
diving/probing LP: 0.01 34 129 3.79 -
strong branching : 0.02 138 2137 15.49 110416.45 - - 0
(at root node) : - 11 471 42.82 -
conflict analysis: 0.00 1 10 10.00 -
B&B Tree :
number of runs : 1
nodes : 265 (132 internal, 133 leaves)
feasible leaves : 0
infeas. leaves : 6
objective leaves : 127
nodes (total) : 265 (132 internal, 133 leaves)
nodes left : 0
max depth : 15
max depth (total): 15
backtracks : 87 (32.8%)
early backtracks : 0 (0.0%)
nodes exc. ref. : 0 (0.0%)
delayed cutoffs : 0
repropagations : 20 (6 domain reductions, 0 cutoffs)
avg switch length: 4.05
switching time : 0.00
Root Node :
First LP value : +9.00000000000000e+00
First LP Iters : 27 (6267.41 Iter/sec)
First LP Time : 0.00
Final Dual Bound : +1.30000000000000e+01
Final Root Iters : 254
Root LP Estimate : +1.91671457800945e+01
Solution :
Solutions found : 254 (3 improvements)
First Solution : +2.70000000000000e+01 (in run 1, after 0 nodes, 0.02 seconds, depth 0, found by <trivial>)
Gap First Sol. : infinite
Gap Last Sol. : 38.46 %
Primal Bound : +1.80000000000000e+01 (in run 1, after 1 nodes, 0.11 seconds, depth 12, found by <randrounding>)
Dual Bound : +1.80000000000000e+01
Gap : 0.00 %
Integrals : Total Avg%
primal-dual : 9.70 26.61
primal-ref : - - (not evaluated)
dual-ref : - - (not evaluated)

The statistics obtained via "display statistics" are quite comprehensive, thus, we just explain a few lines here. Information is grouped by the plugin type. For the primal heuristics, the execution time in seconds is shown as well as the number of calls to the heuristic, and its success regarding the number of (best) solutions found by that heuristic. Appropriate statistics are also shown for presolvers, constraint handlers, separators, propagators, the search tree, etc. User-written plugins will appear automatically in these statistics, after they were included into SCIP.

Changing parameters from the interactive shell

Now, we can start playing around with parameters. The primal heuristics Rounding and shifting seem to be quite successful on this instance, wondering what happens if we disable them? Or what happens, if we are even more rigorous and disable all heuristics? Or if we do the opposite and use aggressive heuristics?

SCIP> set
<benders> parameters for <benders>
<branching> change parameters for branching rules
<compression> parameters for <compression>
<concurrent> parameters for <concurrent>
<conflict> change parameters for conflict handlers
<constraints> change parameters for constraint handlers
<cutselection> change parameters for cut selectors
<decomposition> parameters for <decomposition>
<display> change parameters for display columns
<emphasis> predefined parameter settings
<estimation> change parameters for restarts and tree size estimation
<expr> change parameters for expression handlers
<heuristics> change parameters for primal heuristics
<history> parameters for <history>
<limits> change parameters for time, memory, objective value, and other limits
<lp> change parameters for linear programming relaxations
<memory> change parameters for memory management
<misc> change parameters for miscellaneous stuff
<nlhdlr> change parameters for nonlinear handlers
<nlp> change parameters for nonlinear programming relaxation
<nlpi> change parameters for NLP solver interfaces
<nodeselection> change parameters for node selectors
<numerics> change parameters for numerical values
<parallel> change parameters for parallel implementation
<presolving> change parameters for presolving
<pricing> change parameters for pricing variables
<propagating> change parameters for constraint propagation
<randomization> parameters for <randomization>
<reading> change parameters for problem file readers
<reoptimization> parameters for <reoptimization>
<separating> change parameters for cut separators
<solvingphases> parameters for <solvingphases>
<table> parameters for <table>
<timing> change parameters for timing issues
<visual> change parameters for visualization output
<write> parameters for <write>
default reset parameter settings to their default values
diffsave save non-default parameter settings to a file
load load parameter settings from a file
save save parameter settings to a file
SCIP/set> heuristics
<actconsdiving> LP diving heuristic that chooses fixings w.r.t. the active constraints
<adaptivediving> diving heuristic that selects adaptively between the existing, public divesets
<advanced> advanced parameters
<alns> Large neighborhood search heuristic that orchestrates the popular neighborhoods Local Branching, RINS, RENS, DINS etc.
<bound> heuristic which fixes all integer variables to a bound and solves the remaining LP
<clique> LNS heuristic using a clique partition to restrict the search neighborhood
<coefdiving> LP diving heuristic that chooses fixings w.r.t. the matrix coefficients
<completesol> primal heuristic trying to complete given partial solutions
<conflictdiving> LP diving heuristic that chooses fixings w.r.t. conflict locks
<crossover> LNS heuristic that fixes all variables that are identic in a couple of solutions
<dins> distance induced neighborhood search by Ghosh
<distributiondiving> Diving heuristic that chooses fixings w.r.t. changes in the solution density
<dps> primal heuristic for decomposable MIPs
<dualval> primal heuristic using dual values
<emphasis> predefined parameter settings
<farkasdiving> LP diving heuristic that tries to construct a Farkas-proof
<feaspump> objective feasibility pump 2.0
<fixandinfer> iteratively fixes variables and propagates inferences
<fracdiving> LP diving heuristic that chooses fixings w.r.t. the fractionalities
<gins> gins works on k-neighborhood in a variable-constraint graph
<guideddiving> LP diving heuristic that chooses fixings in direction of incumbent solutions
<indicator> indicator heuristic to create feasible solutions from values for indicator variables
<indicatordiving> LP diving heuristic that fixes indicator variables controlling semicontinuous variables
<intdiving> LP diving heuristic that fixes binary variables with large LP value to one
<intshifting> LP rounding heuristic with infeasibility recovering and final LP solving
<linesearchdiving> LP diving heuristic that chooses fixings following the line from root solution to current solution
<localbranching> local branching heuristic by Fischetti and Lodi
<locks> heuristic that fixes variables based on their rounding locks
<lpface> LNS heuristic that searches the optimal LP face inside a sub-MIP
<mpec> regularization heuristic for convex and nonconvex MINLPs
<multistart> multistart heuristic for convex and nonconvex MINLPs
<mutation> mutation heuristic randomly fixing variables
<nlpdiving> NLP diving heuristic that chooses fixings w.r.t. the fractionalities
<objpscostdiving> LP diving heuristic that changes variable's objective values instead of bounds, using pseudo costs as guide
<octane> octane primal heuristic for pure {0;1}-problems based on Balas et al.
<ofins> primal heuristic for reoptimization, objective function induced neighborhood search
<oneopt> 1-opt heuristic which tries to improve setting of single integer variables
<padm> penalty alternating direction method primal heuristic
<proximity> heuristic trying to improve the incumbent by an auxiliary proximity objective function
<pscostdiving> LP diving heuristic that chooses fixings w.r.t. the pseudo cost values
<randrounding> fast LP rounding heuristic
<rens> LNS exploring fractional neighborhood of relaxation's optimum
<reoptsols> primal heuristic updating solutions found in a previous optimization round
<repair> tries to repair a primal infeasible solution
<rins> relaxation induced neighborhood search by Danna, Rothberg, and Le Pape
<rootsoldiving> LP diving heuristic that changes variable's objective values using root LP solution as guide
<rounding> LP rounding heuristic with infeasibility recovering
<scheduler> Adaptive heuristic to schedule LNS and diving heuristics
<shiftandpropagate> Pre-root heuristic to expand an auxiliary branch-and-bound tree and apply propagation techniques
<shifting> LP rounding heuristic with infeasibility recovering also using continuous variables
<simplerounding> simple and fast LP rounding heuristic
<subnlp> primal heuristic that performs a local search in an NLP after fixing integer variables and presolving
<trivial> start heuristic which tries some trivial solutions
<trivialnegation> negate solution entries if an objective coefficient changes the sign, enters or leaves the objective.
<trustregion> LNS heuristic for Benders' decomposition based on trust region methods
<trysol> try solution heuristic
<twoopt> primal heuristic to improve incumbent solution by flipping pairs of variables
<undercover> solves a sub-CIP determined by a set covering approach
<vbounds> LNS heuristic uses the variable lower and upper bounds to determine the search neighborhood
<veclendiving> LP diving heuristic that rounds variables with long column vectors
<zeroobj> heuristic trying to solve the problem without objective
<zirounding> LP rounding heuristic as suggested by C. Wallace taking row slacks and bounds into account
SCIP/set/heuristics> shifting
<advanced> advanced parameters
freq frequency for calling primal heuristic <shifting> (-1: never, 0: only at depth freqofs) [10]
freqofs frequency offset for calling primal heuristic <shifting> [0]
SCIP/set/heuristics/shifting> freq
current value: 10, new value [-1,1073741822]: -1
heuristics/shifting/freq = -1
SCIP> se he rou freq -1
heuristics/rounding/freq = -1
SCIP> read check/instances/MIP/stein27.fzn
read problem <check/instances/MIP/stein27.fzn>
============
original problem has 29 variables (29 bin, 0 int, 0 impl, 0 cont) and 118 constraints
SCIP> optimize
feasible solution found by trivial heuristic after 0.0 seconds, objective value 2.700000e+01
presolving:
(round 1, fast) 2 del vars, 0 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
(0.0s) running MILP presolver
(0.0s) MILP presolver found nothing
(round 2, exhaustive) 2 del vars, 0 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 118 upgd conss, 0 impls, 0 clqs
(0.0s) probing cycle finished: starting next cycle
(0.0s) symmetry computation started: requiring (bin +, int +, cont +), (fixed: bin -, int -, cont -)
(0.0s) symmetry computation finished: 8 generators found (max: 1500, log10 of symmetry group size: 0.0) (symcode time: 0.00)
dynamic symmetry handling statistics:
orbitopal reduction: no components
orbital reduction: 1 components of sizes 8
lexicographic reduction: 8 permutations with support sizes 18, 18, 18, 18, 18, 26, 24, 18
handled 1 out of 1 symmetry components
presolving (3 rounds: 3 fast, 2 medium, 2 exhaustive):
2 deleted vars, 0 deleted constraints, 0 added constraints, 0 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients
0 implications, 0 cliques
presolved problem has 27 variables (27 bin, 0 int, 0 impl, 0 cont) and 118 constraints
1 constraints of type <knapsack>
117 constraints of type <logicor>
transformed objective value is always integral (scale: 1)
Presolving Time: 0.00
transformed 1/1 original solutions to the transformed problem space
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
i 0.0s| 1 | 0 | 0 | - | oneopt| 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 27 | - | 4920k | 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.0s| 1 | 0 | 27 | - |randroun| 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 56 | - | 5632k | 0 | 27 | 118 | 120 | 3 | 1 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 97 | - | 5713k | 0 | 27 | 118 | 122 | 5 | 2 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 109 | - | 6018k | 0 | 27 | 118 | 123 | 6 | 3 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 113 | - | 6438k | 0 | 27 | 118 | 125 | 8 | 4 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.0s| 1 | 0 | 113 | - |randroun| 0 | 27 | 118 | 125 | 0 | 4 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 122 | - | 6700k | 0 | 27 | 118 | 126 | 9 | 5 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 143 | - | 7172k | 0 | 27 | 118 | 128 | 11 | 6 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 157 | - | 8020k | 0 | 27 | 118 | 130 | 13 | 7 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 166 | - | 8539k | 0 | 27 | 118 | 131 | 14 | 8 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
* 0.0s| 1 | 0 | 166 | - | LP | 0 | 27 | 118 | 131 | 14 | 8 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.0s| 1 | 0 | 181 | - | 10M | 0 | 27 | 318 | 132 | 15 | 9 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 197 | - | 10M | 0 | 27 | 318 | 133 | 16 | 10 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
0.1s| 1 | 0 | 207 | - | 10M | 0 | 27 | 318 | 134 | 18 | 11 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 214 | - | 10M | 0 | 27 | 318 | 137 | 21 | 12 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 220 | - | 10M | 0 | 27 | 318 | 139 | 23 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 227 | - | 10M | 0 | 27 | 318 | 140 | 24 | 14 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 238 | - | 10M | 0 | 27 | 318 | 141 | 25 | 15 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 247 | - | 10M | 0 | 27 | 318 | 142 | 26 | 16 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 250 | - | 10M | 0 | 27 | 318 | 142 | 27 | 17 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 254 | - | 10M | 0 | 27 | 318 | 143 | 28 | 18 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 2 | 254 | - | 11M | 0 | 27 | 318 | 143 | 28 | 18 | 0 | 13 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.2s| 100 | 11 | 1259 | 10.2 | 12M | 12 | 27 | 289 | 133 | 79 | 1 | 2 | 146 | 1.369841e+01 | 1.800000e+01 | 31.40%| 71.11%
0.2s| 200 | 5 | 2155 | 9.6 | 13M | 13 | 27 | 281 | 133 | 153 | 1 | 5 | 146 | 1.500000e+01 | 1.800000e+01 | 20.00%| 80.68%
SCIP Status : problem is solved [optimal solution found]
Solving Time (sec) : 0.27
Solving Nodes : 221
Primal Bound : +1.80000000000000e+01 (241 solutions)
Dual Bound : +1.80000000000000e+01
Gap : 0.00 %

We can navigate through the menus step-by-step and get a list of available options and submenus. Therefore, we select "set" to change settings, "heuristics" to change settings of primal heuristics, and "shifting" for that particular heuristic. Then we see a list of parameters (and yet another submenu for advanced parameters), and disable this heuristic by setting its calling frequency to -1. If we already know the path to a certain setting, we can directly type it (as for the rounding heuristic in the above example). Note that we do not have to use the full names, but we may use short versions, as long as they are unique.

To solve a problem a second time, we have to read it in again before starting the optimization process.

SCIP> set default
reset parameters to their default values
SCIP> set heuristics emphasis
aggressive sets heuristics <aggressive>
default sets heuristics settings to <default>
fast sets heuristics <fast>
off turns <off> all heuristics
SCIP/set/heuristics/emphasis> aggr
heuristics/ofins/freq = 20
heuristics/lpface/freq = 8
heuristics/rootsoldiving/freq = 10
heuristics/rootsoldiving/maxlpiterofs = 1500
heuristics/rootsoldiving/maxlpiterquot = 0.015
heuristics/linesearchdiving/freq = 5
heuristics/linesearchdiving/maxlpiterofs = 1500
heuristics/linesearchdiving/maxlpiterquot = 0.075
heuristics/guideddiving/freq = 5
heuristics/guideddiving/maxlpiterofs = 1500
heuristics/guideddiving/maxlpiterquot = 0.075
heuristics/gins/freq = 10
heuristics/intshifting/freq = 5
heuristics/farkasdiving/freq = 5
heuristics/farkasdiving/maxlpiterofs = 1500
heuristics/farkasdiving/maxlpiterquot = 0.075
heuristics/adaptivediving/freq = 3
heuristics/adaptivediving/maxlpiterquot = 0.15
heuristics/conflictdiving/freq = 5
heuristics/conflictdiving/maxlpiterofs = 1500
heuristics/conflictdiving/maxlpiterquot = 0.225
heuristics/pscostdiving/freq = 5
heuristics/pscostdiving/maxlpiterofs = 1500
heuristics/pscostdiving/maxlpiterquot = 0.075
heuristics/fracdiving/freq = 5
heuristics/fracdiving/maxlpiterofs = 1500
heuristics/fracdiving/maxlpiterquot = 0.075
heuristics/dps/freq = 20
heuristics/padm/freq = 20
heuristics/reoptsols/freq = 20
heuristics/trivialnegation/freq = 20
heuristics/trivial/freq = 20
heuristics/clique/freq = 20
heuristics/locks/freq = 20
heuristics/vbounds/freq = 20
heuristics/shiftandpropagate/freq = 20
heuristics/zeroobj/freq = 20
heuristics/completesol/freq = 20
heuristics/repair/freq = 20
heuristics/randrounding/freq = 10
heuristics/shifting/freq = 5
heuristics/twoopt/freq = 20
heuristics/scheduler/freq = 20
heuristics/indicatordiving/freq = 20
heuristics/indicatordiving/maxlpiterofs = 1500
heuristics/indicatordiving/maxlpiterquot = 0.075
heuristics/fixandinfer/freq = 20
heuristics/feaspump/freq = 10
heuristics/feaspump/maxlpiterofs = 1500
heuristics/feaspump/maxlpiterquot = 0.015
heuristics/coefdiving/freq = 20
heuristics/nlpdiving/freq = 5
heuristics/veclendiving/freq = 5
heuristics/veclendiving/maxlpiterofs = 1500
heuristics/veclendiving/maxlpiterquot = 0.075
heuristics/distributiondiving/freq = 5
heuristics/distributiondiving/maxlpiterofs = 1500
heuristics/distributiondiving/maxlpiterquot = 0.075
heuristics/intdiving/freq = 20
heuristics/actconsdiving/freq = 20
heuristics/objpscostdiving/freq = 10
heuristics/objpscostdiving/maxlpiterofs = 1500
heuristics/objpscostdiving/maxlpiterquot = 0.015
heuristics/octane/freq = 20
heuristics/rens/freq = 20
heuristics/alns/freq = 10
heuristics/rins/freq = 13
heuristics/localbranching/freq = 20
heuristics/trustregion/freq = 20
heuristics/mutation/freq = 20
heuristics/crossover/freq = 15
heuristics/dins/freq = 20
heuristics/bound/freq = 20
heuristics/undercover/freq = 20
heuristics/proximity/freq = 20
heuristics/mpec/freq = 25
heuristics/multistart/freq = 20
heuristics/rens/nodesofs = 2000
heuristics/rens/minfixingrate = 0.3
heuristics/crossover/nwaitingnodes = 20
heuristics/crossover/dontwaitatroot = TRUE
heuristics/crossover/nodesquot = 0.15
heuristics/crossover/minfixingrate = 0.5
heuristics/alns/trustregion/active = TRUE
heuristics/alns/nodesquot = 0.2
heuristics/alns/nodesofs = 2000
SCIP> set limits nodes 200
limits/nodes = 200
SCIP> read check/instances/MIP/stein27.fzn
read problem <check/instances/MIP/stein27.fzn>
============
original problem has 29 variables (29 bin, 0 int, 0 impl, 0 cont) and 118 constraints
SCIP> optimize
feasible solution found by trivial heuristic after 0.0 seconds, objective value 2.700000e+01
presolving:
(round 1, fast) 2 del vars, 0 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
(0.0s) running MILP presolver
(0.0s) MILP presolver found nothing
(round 2, exhaustive) 2 del vars, 0 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 118 upgd conss, 0 impls, 0 clqs
(0.0s) probing cycle finished: starting next cycle
(0.0s) symmetry computation started: requiring (bin +, int +, cont +), (fixed: bin -, int -, cont -)
(0.0s) symmetry computation finished: 8 generators found (max: 1500, log10 of symmetry group size: 0.0) (symcode time: 0.00)
dynamic symmetry handling statistics:
orbitopal reduction: no components
orbital reduction: 1 components of sizes 8
lexicographic reduction: 8 permutations with support sizes 18, 18, 18, 18, 18, 26, 24, 18
handled 1 out of 1 symmetry components
presolving (3 rounds: 3 fast, 2 medium, 2 exhaustive):
2 deleted vars, 0 deleted constraints, 0 added constraints, 0 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients
0 implications, 0 cliques
presolved problem has 27 variables (27 bin, 0 int, 0 impl, 0 cont) and 118 constraints
1 constraints of type <knapsack>
117 constraints of type <logicor>
transformed objective value is always integral (scale: 1)
Presolving Time: 0.00
transformed 1/1 original solutions to the transformed problem space
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
i 0.0s| 1 | 0 | 0 | - | oneopt| 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 27 | - | 7247k | 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.0s| 1 | 0 | 27 | - |randroun| 0 | 27 | 118 | 117 | 0 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 56 | - | 8202k | 0 | 27 | 118 | 120 | 3 | 1 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 97 | - | 8287k | 0 | 27 | 118 | 122 | 5 | 2 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 109 | - | 8723k | 0 | 27 | 118 | 123 | 6 | 3 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 113 | - | 9143k | 0 | 27 | 118 | 125 | 8 | 4 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.0s| 1 | 0 | 113 | - |randroun| 0 | 27 | 118 | 125 | 0 | 4 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 122 | - | 9405k | 0 | 27 | 118 | 126 | 9 | 5 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
0.0s| 1 | 0 | 143 | - | 9877k | 0 | 27 | 118 | 128 | 11 | 6 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%| unknown
r 0.0s| 1 | 0 | 143 | - |rounding| 0 | 27 | 118 | 128 | 11 | 6 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.0s| 1 | 0 | 157 | - | 10M | 0 | 27 | 118 | 130 | 13 | 7 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.0s| 1 | 0 | 166 | - | 11M | 0 | 27 | 118 | 131 | 14 | 8 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.0s| 1 | 0 | 181 | - | 12M | 0 | 27 | 318 | 132 | 15 | 9 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.0s| 1 | 0 | 197 | - | 13M | 0 | 27 | 318 | 133 | 16 | 10 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
0.0s| 1 | 0 | 207 | - | 13M | 0 | 27 | 318 | 134 | 18 | 11 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 214 | - | 13M | 0 | 27 | 318 | 137 | 21 | 12 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 220 | - | 13M | 0 | 27 | 318 | 139 | 23 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
r 0.1s| 1 | 0 | 220 | - |randroun| 0 | 27 | 318 | 139 | 0 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 227 | - | 13M | 0 | 27 | 318 | 140 | 24 | 14 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 238 | - | 13M | 0 | 27 | 318 | 141 | 25 | 15 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 247 | - | 13M | 0 | 27 | 318 | 142 | 26 | 16 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 250 | - | 13M | 0 | 27 | 318 | 142 | 27 | 17 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 0 | 254 | - | 13M | 0 | 27 | 318 | 143 | 28 | 18 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.1s| 1 | 2 | 254 | - | 13M | 0 | 27 | 318 | 143 | 28 | 18 | 0 | 12 | 1.300000e+01 | 1.800000e+01 | 38.46%| unknown
0.2s| 100 | 31 | 1128 | 8.8 | 13M | 13 | 27 | 298 | 133 | 50 | 1 | 1 | 134 | 1.350000e+01 | 1.800000e+01 | 33.33%| 68.01%
r 0.3s| 164 | 43 | 1875 | 9.9 |shifting| 13 | 27 | 298 | 136 | 122 | 2 | 1 | 134 | 1.500000e+01 | 1.800000e+01 | 20.00%| 78.36%
0.4s| 200 | 39 | 2057 | 9.1 | 17M | 14 | 27 | 298 | 136 | 137 | 1 | 2 | 135 | 1.500000e+01 | 1.800000e+01 | 20.00%| 78.85%
SCIP Status : solving was interrupted [node limit reached]
Solving Time (sec) : 0.35
Solving Nodes : 200
Primal Bound : +1.80000000000000e+01 (397 solutions)
Dual Bound : +1.50000000000000e+01
Gap : 20.00 %

Okay, what happened here? First, we reset all parameters to their default values, using "set default". Next, we loaded some meta-parameter settings (also see the FAQ), to apply primal heuristics more aggressively. SCIP shows us, which single parameters it changed therefore. Additionally, for pedagogical purposes, we set the node limit to 200. Now, the optimal solution is already found at the root node, by a heuristic which is deactivated by default. Then, after node 200, the user defined node limit is reached which interrupts the solving process, We see that now in the short status report, primal and dual bound are different, thus, the problem is not solved yet. Nevertheless, we could access statistics, see the current incumbent solution, change parameters and so on. Entering "optimize" we continue the solving process from the point on at which it has been interrupted.

Once you found a non-default parameter setting that you wish to save and use in the future, use either the command

SCIP> set save settingsfile.set
saved parameter file <settingsfile.set>

to save all parameter values to the specified file, or

SCIP> set diffsave settingsfile.set
saved non-default parameter settings to file <settingsfile.set>

in order to save only the nondefault parameters. The latter has several advantages, you can, e.g., combine parameter settings from multiple settings files stored by the latter command, as long as they only affect mutually exclusive parameter values.

For loading a previously stored settings file, use the "load" command:

SCIP> set load settingsfile.set
loaded parameter file <settingsfile.set>

Special attention should be drawn to the reserved settings file name "scip.set"; whenever the SCIP interactive shell is started from a working directory that contains a settings file with the name "scip.set", it will be automatically replace the default settings.

For using special settings for automated tests as described in How to run automated tests with SCIP, save your custom settings in a subdirectory "SCIP_HOME/settings".

We hope this tutorial gave you an overview of what is possible using the SCIP interactive shell. Please also read our Frequently Asked Questions (FAQ), in particular the section "Using SCIP as a standalone MIP/MINLP-Solver".