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
First of all, we need a SCIP binary and an example problem file to work with. 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 (version 4.0.0 as of this writing), 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.
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.
Now start your binary, without any arguments. This opens the interactive shell, which should look somehow like this:
SCIP version 4.0.0 [precision: 8 byte] [memory: block] [mode: optimized] [LP solver: SoPlex 3.0.0] [GitHash: b30c4e9]
Copyright (C) 2002-2017 Konrad-Zuse-Zentrum fuer Informationstechnik Berlin (ZIB)
External codes:
Readline 6.3 GNU library for command line editing (gnu.org/s/readline)
SoPlex 3.0.0 Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: b0cccbd]
CppAD 20160000.1 Algorithmic Differentiation of C++ algorithms developed by B. Bell (www.coin-or.org/CppAD)
ZLIB 1.2.8 General purpose compression library by J. Gailly and M. Adler (zlib.net)
GMP 6.1.0 GNU Multiple Precision Arithmetic Library developed by T. Granlund (gmplib.org)
ZIMPL 3.3.2 Zuse Institute Mathematical Programming Language developed by T. Koch (zimpl.zib.de)
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
Okay, let's solve the example instance... use "read check/instances/MIP/stein27.fzn" 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
(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
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 |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
b 0.0s| 1 | 0 | 0 | - |1058k| 0 | - | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
0.0s| 1 | 0 | 27 | - |1058k| 0 | 27 | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
G 0.0s| 1 | 0 | 27 | - |1060k| 0 | - | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
0.0s| 1 | 0 | 43 | - |1065k| 0 | 27 | 27 | 118 | 27 | 118 | 1 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
G 0.0s| 1 | 0 | 43 | - |1065k| 0 | - | 27 | 118 | 27 | 118 | 1 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 68 | - |1147k| 0 | 27 | 27 | 118 | 27 | 120 | 3 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 97 | - |1241k| 0 | 27 | 27 | 118 | 27 | 124 | 7 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 122 | - |1414k| 0 | 27 | 27 | 118 | 27 | 130 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 151 | - |1570k| 0 | 27 | 27 | 118 | 27 | 136 | 19 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 171 | - |1651k| 0 | 27 | 27 | 118 | 27 | 140 | 23 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 187 | - |2029k| 0 | 26 | 27 | 118 | 27 | 141 | 24 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 195 | - |2467k| 0 | 26 | 27 | 118 | 27 | 142 | 25 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 204 | - |2467k| 0 | 27 | 27 | 118 | 27 | 143 | 26 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 215 | - |2897k| 0 | 27 | 27 | 118 | 27 | 146 | 29 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 224 | - |3164k| 0 | 27 | 27 | 118 | 27 | 148 | 31 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.0s| 1 | 0 | 234 | - |3164k| 0 | 27 | 27 | 118 | 27 | 149 | 32 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 2 | 234 | - |3166k| 0 | 27 | 27 | 118 | 27 | 149 | 32 | 0 | 27 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 100 | 39 | 940 | 7.1 |3442k| 9 | 14 | 27 | 130 | 27 | 127 | 32 | 12 | 158 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 200 | 107 | 2289 | 10.3 |3532k| 10 | - | 27 | 133 | 27 | 127 | 32 | 15 | 191 | 1.385714e+01 | 1.800000e+01 | 29.90%
0.1s| 300 | 187 | 3394 | 10.6 |3605k| 10 | 12 | 27 | 133 | 27 | 127 | 32 | 15 | 196 | 1.416667e+01 | 1.800000e+01 | 27.06%
0.1s| 400 | 249 | 4264 | 10.1 |3703k| 11 | 15 | 27 | 135 | 27 | 127 | 32 | 17 | 203 | 1.451515e+01 | 1.800000e+01 | 24.01%
0.1s| 500 | 313 | 5034 | 9.6 |3703k| 11 | 11 | 27 | 135 | 27 | 127 | 32 | 17 | 211 | 1.461111e+01 | 1.800000e+01 | 23.19%
0.1s| 600 | 357 | 5652 | 9.0 |3719k| 14 | 11 | 27 | 136 | 27 | 127 | 32 | 18 | 211 | 1.469620e+01 | 1.800000e+01 | 22.48%
0.2s| 700 | 397 | 6269 | 8.6 |3784k| 14 | 10 | 27 | 135 | 27 | 127 | 32 | 18 | 211 | 1.483333e+01 | 1.800000e+01 | 21.35%
0.2s| 800 | 415 | 6806 | 8.2 |3849k| 14 | 12 | 27 | 135 | 27 | 127 | 32 | 18 | 211 | 1.486667e+01 | 1.800000e+01 | 21.08%
0.2s| 900 | 419 | 7256 | 7.8 |3849k| 14 | - | 27 | 133 | 27 | 127 | 32 | 18 | 215 | 1.496552e+01 | 1.800000e+01 | 20.28%
0.2s| 1000 | 443 | 7826 | 7.6 |3857k| 14 | 11 | 27 | 129 | 27 | 127 | 32 | 18 | 217 | 1.506667e+01 | 1.800000e+01 | 19.47%
0.2s| 1100 | 465 | 8371 | 7.4 |3857k| 15 | - | 27 | 126 | 27 | 127 | 32 | 18 | 217 | 1.513333e+01 | 1.800000e+01 | 18.94%
0.2s| 1200 | 465 | 8759 | 7.1 |3857k| 15 | - | 27 | 126 | 27 | 127 | 32 | 18 | 219 | 1.516667e+01 | 1.800000e+01 | 18.68%
0.2s| 1300 | 469 | 9156 | 6.9 |3857k| 15 | - | 27 | 124 | 27 | 127 | 32 | 18 | 221 | 1.525000e+01 | 1.800000e+01 | 18.03%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.2s| 1400 | 483 | 9587 | 6.7 |3857k| 15 | - | 27 | 123 | 27 | 127 | 32 | 18 | 221 | 1.530556e+01 | 1.800000e+01 | 17.60%
0.2s| 1500 | 485 | 9974 | 6.5 |3857k| 15 | - | 27 | 123 | 27 | 127 | 32 | 18 | 221 | 1.533333e+01 | 1.800000e+01 | 17.39%
0.3s| 1600 | 477 | 10371 | 6.3 |3857k| 15 | - | 27 | 122 | 27 | 127 | 32 | 18 | 223 | 1.538095e+01 | 1.800000e+01 | 17.03%
0.3s| 1700 | 481 | 10733 | 6.2 |3857k| 15 | - | 27 | 122 | 27 | 127 | 32 | 18 | 223 | 1.544444e+01 | 1.800000e+01 | 16.55%
0.3s| 1800 | 469 | 11053 | 6.0 |3857k| 15 | 9 | 27 | 122 | 27 | 127 | 32 | 18 | 224 | 1.550000e+01 | 1.800000e+01 | 16.13%
0.3s| 1900 | 451 | 11362 | 5.9 |3857k| 15 | - | 27 | 122 | 27 | 127 | 32 | 18 | 224 | 1.550000e+01 | 1.800000e+01 | 16.13%
0.3s| 2000 | 451 | 11772 | 5.8 |3857k| 15 | 12 | 27 | 121 | 27 | 127 | 32 | 18 | 231 | 1.560000e+01 | 1.800000e+01 | 15.38%
0.3s| 2100 | 435 | 12095 | 5.7 |3857k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 239 | 1.566667e+01 | 1.800000e+01 | 14.89%
0.3s| 2200 | 417 | 12401 | 5.5 |3857k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 242 | 1.566667e+01 | 1.800000e+01 | 14.89%
0.3s| 2300 | 403 | 12744 | 5.4 |3857k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 253 | 1.566667e+01 | 1.800000e+01 | 14.89%
0.3s| 2400 | 381 | 13059 | 5.3 |3857k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 255 | 1.571429e+01 | 1.800000e+01 | 14.55%
0.3s| 2500 | 371 | 13361 | 5.3 |3857k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 258 | 1.575000e+01 | 1.800000e+01 | 14.29%
0.3s| 2600 | 351 | 13628 | 5.2 |3857k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 261 | 1.583333e+01 | 1.800000e+01 | 13.68%
0.3s| 2700 | 335 | 13940 | 5.1 |3857k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 263 | 1.583333e+01 | 1.800000e+01 | 13.68%
0.4s| 2800 | 311 | 14269 | 5.0 |3857k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 270 | 1.583333e+01 | 1.800000e+01 | 13.68%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.4s| 2900 | 285 | 14583 | 4.9 |3857k| 15 | 12 | 27 | 120 | 27 | 127 | 32 | 18 | 276 | 1.583333e+01 | 1.800000e+01 | 13.68%
0.4s| 3000 | 255 | 14917 | 4.9 |3857k| 15 | 8 | 27 | 120 | 27 | 127 | 32 | 18 | 284 | 1.588235e+01 | 1.800000e+01 | 13.33%
0.4s| 3100 | 245 | 15226 | 4.8 |3857k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 290 | 1.594444e+01 | 1.800000e+01 | 12.89%
0.4s| 3200 | 219 | 15537 | 4.8 |3857k| 15 | 10 | 27 | 120 | 27 | 127 | 32 | 18 | 298 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3300 | 191 | 15846 | 4.7 |3857k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 306 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3400 | 151 | 16156 | 4.7 |3857k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 323 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3500 | 121 | 16477 | 4.6 |3857k| 15 | - | 27 | 119 | 27 | 127 | 32 | 18 | 335 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3600 | 75 | 16758 | 4.6 |3857k| 15 | 13 | 27 | 119 | 27 | 127 | 32 | 18 | 345 | 1.628571e+01 | 1.800000e+01 | 10.53%
0.4s| 3700 | 29 | 17062 | 4.5 |3857k| 15 | - | 27 | 119 | 27 | 127 | 32 | 18 | 362 | 1.650000e+01 | 1.800000e+01 | 9.09%
SCIP Status : problem is solved [optimal solution found]
Solving Time (sec) : 0.43
Solving Nodes : 3755
Primal Bound : +1.80000000000000e+01 (359 solutions)
Dual Bound : +1.80000000000000e+01
Gap : 0.00 %
SCIP> display solution
objective value: 18
true 1 (obj:0)
x0001 1 (obj:1)
x0002 1 (obj:1)
x0003 1 (obj:1)
x0004 1 (obj:1)
x0005 1 (obj:1)
x0008 1 (obj:1)
x0010 1 (obj:1)
x0012 1 (obj:1)
x0013 1 (obj:1)
x0014 1 (obj:1)
x0015 1 (obj:1)
x0016 1 (obj:1)
x0019 1 (obj:1)
x0020 1 (obj:1)
x0021 1 (obj:1)
x0022 1 (obj:1)
x0025 1 (obj:1)
x0027 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
---------------- - -------- ---- --- -----------
ofins A 60000 0 0 primal heuristic for reoptimization, objective function induced neighborhood search
gins K -1103000 20 8 gins works on k-neighborhood in a variable-constraint graph
oneopt b -20000 1 0 1-opt heuristic which tries to improve setting of single integer variables
fracdiving f -1003000 10 3 LP diving heuristic that chooses fixings w.r.t. the fractionalities
distributiondiving e -1003300 10 3 Diving heuristic that chooses fixings w.r.t. changes in the solution density
veclendiving v -1003100 10 4 LP diving heuristic that rounds variables with long column vectors
pscostdiving p -1002000 10 2 LP diving heuristic that chooses fixings w.r.t. the pseudo cost values
coefdiving c -1001000 10 1 LP diving heuristic that chooses fixings w.r.t. the matrix coefficients
guideddiving g -1007000 10 7 LP diving heuristic that chooses fixings in direction of incumbent solutions
trivialnegation j 40000 0 0 negate solution entries if an objective coefficient changes the sign, enters or leaves the objective.
reoptsols J 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
locks k 2000 0 0 heuristic that fixes variables based on their rounding locks
shiftandpropagate T 1000 0 0 Pre-root heuristic to expand an auxiliary branch-and-bound tree and apply propagation techniques
zeroobj Z 100 -1 0 heuristic trying to solve the problem without objective
completesol h 0 1 0 primal heuristic trying to complete given partial solutions
simplerounding r 0 1 0 simple and fast LP rounding heuristic
repair ! 0 -1 0 tries to repair a primal infeasible solution
dualval Y 0 -1 0 primal heuristic using dual values
randrounding G -200 20 0 fast LP rounding heuristic
zirounding z -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 s -5000 10 0 LP rounding heuristic with infeasibility recovering also using continuous variables
intshifting i -10000 10 0 LP rounding heuristic with infeasibility recovering and final LP solving
twoopt B -20100 -1 0 primal heuristic to improve incumbent solution by flipping pairs of variables
indicator A -20200 1 0 indicator heuristic to create feasible solutions from values for indicator variables
fixandinfer I -500000 -1 0 iteratively fixes variables and propagates inferences
feaspump F -1000000 20 0 objective feasibility pump 2.0
clique Q -1000500 -1 0 LNS heuristic using a clique partition to restrict the search neighborhood
nlpdiving d -1003000 10 3 NLP diving heuristic that chooses fixings w.r.t. the fractionalities
intdiving n -1003500 -1 9 LP diving heuristic that fixes binary variables with large LP value to one
actconsdiving a -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 S -1005000 20 5 LP diving heuristic that changes variable's objective values using root LP solution as guide
linesearchdiving l -1006000 10 6 LP diving heuristic that chooses fixings following the line from root solution to current solution
octane O -1008000 -1 0 octane primal heuristic for pure {0;1}-problems based on Balas et al.
rens E -1100000 0 0 LNS exploring fractional neighborhood of relaxation's optimum
rins N -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
mutation M -1103000 -1 8 mutation heuristic randomly fixing variables
lpface _ -1104000 15 0 LNS heuristic that searches the optimal LP face inside a sub-MIP
crossover C -1104000 30 0 LNS heuristic that fixes all variables that are identic in a couple of solutions
dins D -1105000 -1 0 distance induced neighborhood search by Ghosh
vbounds V -1106000 -1 0 LNS heuristic uses the variable lower and upper bounds to determine the search neighborhood
bound H -1107000 -1 0 heuristic which fixes all integer variables to a bound and solves the remaining LP
undercover U -1110000 0 0 solves a sub-CIP determined by a set covering approach
proximity P -2000000 -1 0 heuristic trying to improve the incumbent by an auxiliary proximity objective function
subnlp q -2000000 1 0 primal heuristic that performs a local search in an NLP after fixing integer variables and presolving
multistart m -2100000 0 0 multistart heuristic for convex and nonconvex MINLPs
trysol y -3000000 1 0 try solution heuristic
SCIP> display statistics
SCIP Status : problem is solved [optimal solution found]
Total Time : 0.43
solving : 0.43
presolving : 0.00 (included in solving)
reading : 0.00
copying : 0.00 (0 times copied the problem)
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 sense : minimize
Presolved Problem :
Problem name : t_check/instances/MIP/stein27.fzn
Variables : 27 (27 binary, 0 integer, 0 implicit integer, 0 continuous)
Constraints : 118 initial, 136 maximal
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
gateextraction : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
implfree : 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
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
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
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
components : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
root node : - - - 1 - - 1 - - - - -
Constraints : Number MaxNumber #Separate #Propagate #EnfoLP #EnfoRelax #EnfoPS #Check #ResProp Cutoffs DomReds Cuts Applied Conss Children
integral : 0 0 0 0 2015 0 0 365 0 0 289 0 0 0 3754
knapsack : 1 1 0 7661 0 0 0 360 0 0 0 0 0 0 0
logicor : 117+ 135 12 5753 0 0 0 359 194 16 3882 0 0 0 0
countsols : 0 0 0 0 0 0 0 363 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
integral : 0.06 0.00 0.00 0.00 0.06 0.00 0.00 0.00 0.00 0.00
knapsack : 0.01 0.00 0.00 0.01 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
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 : 7725 34 0 76
redcost : 14 0 0 0
rootredcost : 0 0 0 0
vbounds : 10689 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.01 0.00 0.00 0.01 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
vbounds : 0.00 0.00 0.00 0.00 0.00 0.00
Conflict Analysis : Time Calls Success DomReds Conflicts Literals Reconvs ReconvLits Dualrays Nonzeros LP Iters (pool size: [10000,10000])
propagation : 0.00 16 11 - 12 18.0 0 0.0 - - -
infeasible LP : 0.00 0 0 - 0 0.0 0 0.0 0 0.0 0
bound exceed. LP : 0.00 0 0 - 0 0.0 0 0.0 - - 0
strong branching : 0.00 0 0 - 0 0.0 0 0.0 - - 0
pseudo solution : 0.00 4 4 - 6 18.3 0 0.0 - - -
applied globally : 0.00 - - 0 18 18.1 - - 0 - -
applied locally : - - - 0 0 0.0 - - 0 - -
Separators : ExecTime SetupTime Calls Cutoffs DomReds Cuts Applied Conss
cut pool : 0.00 11 - - 437 - - (maximal pool size: 774)
cgmip : 0.00 0.00 0 0 0 0 0 0
clique : 0.00 0.00 1 0 0 0 0 0
closecuts : 0.00 0.00 0 0 0 0 0 0
cmir : 0.00 0.00 10 0 0 17 11 0
convexproj : 0.00 0.00 0 0 0 0 0 0
disjunctive : 0.00 0.00 0 0 0 0 0 0
eccuts : 0.00 0.00 0 0 0 0 0 0
flowcover : 0.00 0.00 12 0 0 25 1 0
gauge : 0.00 0.00 0 0 0 0 0 0
gomory : 0.00 0.00 10 0 0 0 0 0
impliedbounds : 0.00 0.00 12 0 0 0 0 0
intobj : 0.00 0.00 0 0 0 0 0 0
mcf : 0.00 0.00 1 0 0 0 0 0
oddcycle : 0.00 0.00 0 0 0 0 0 0
rapidlearning : 0.00 0.00 0 0 0 0 0 0
strongcg : 0.00 0.00 12 0 0 1245 20 0
zerohalf : 0.00 0.00 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
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
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.06 0.00 2015 0 0 0 289 0 0 3754
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 - - 81 0
actconsdiving : 0.00 0.00 0 0 0
bound : 0.00 0.00 0 0 0
clique : 0.00 0.00 0 0 0
coefdiving : 0.01 0.00 36 0 0
completesol : 0.00 0.00 0 0 0
crossover : 0.00 0.00 0 0 0
dins : 0.00 0.00 0 0 0
distributiondivin: 0.00 0.00 33 0 0
dualval : 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 33 0 0
gins : 0.00 0.00 0 0 0
guideddiving : 0.01 0.00 65 0 0
indicator : 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.02 0.00 27 0 0
localbranching : 0.00 0.00 0 0 0
locks : 0.00 0.00 1 0 0
lpface : 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 2 3 0
octane : 0.00 0.00 0 0 0
ofins : 0.00 0.00 0 0 0
oneopt : 0.00 0.00 3 1 1
proximity : 0.00 0.00 0 0 0
pscostdiving : 0.00 0.00 34 0 0
randrounding : 0.01 0.00 13 13 2
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 7 6 0
rounding : 0.00 0.00 572 0 0
shiftandpropagate: 0.00 0.00 0 0 0
shifting : 0.00 0.00 402 17 0
simplerounding : 0.01 0.00 2027 34 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
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 33 0 0
zeroobj : 0.00 0.00 0 0 0
zirounding : 0.01 0.00 1877 203 0
other solutions : - - - 0 -
Diving Statistics : Calls Nodes LP Iters Backtracks MinDepth MaxDepth AvgDepth NLeafSols MinSolDpt MaxSolDpt AvgSolDpt
actconsdiving : 0 - - - - - - - - - -
coefdiving : 36 188 437 69 11 17 13.8 - - - -
distributiondivin: 33 129 265 37 11 18 14.1 - - - -
fracdiving : 33 171 413 64 12 18 14.5 - - - -
guideddiving : 65 382 883 96 9 18 13.5 - - - -
linesearchdiving : 27 188 402 33 10 18 13.9 - - - -
pscostdiving : 34 130 275 40 11 17 13.9 - - - -
veclendiving : 33 219 298 34 14 22 16.5 - - - -
LP : Time Calls Iterations Iter/call Iter/sec Time-0-It Calls-0-It ItLimit
primal LP : 0.00 1 0 0.00 - 0.00 1
dual LP : 0.17 3885 14016 3.61 82447.06 0.00 0
lex dual LP : 0.00 0 0 0.00 -
barrier LP : 0.00 0 0 0.00 - 0.00 0
diving/probing LP: 0.03 711 3199 4.50 106633.33
strong branching : 0.02 367 2952 8.04 147600.00 - - 0
(at root node) : - 27 1236 45.78 -
conflict analysis: 0.00 0 0 0.00 -
B&B Tree :
number of runs : 1
nodes : 3755 (1877 internal, 1878 leaves)
feasible leaves : 0
infeas. leaves : 20
objective leaves : 1858
nodes (total) : 3755 (1877 internal, 1878 leaves)
nodes left : 0
max depth : 15
max depth (total): 15
backtracks : 1590 (42.3%)
early backtracks : 0 (0.0%)
nodes exc. ref. : 0 (0.0%)
delayed cutoffs : 0
repropagations : 2 (2 domain reductions, 0 cutoffs)
avg switch length: 7.88
switching time : 0.01
Root Node :
First LP value : +9.00000000000000e+00
First LP Iters : 27
First LP Time : 0.00
Final Dual Bound : +1.30000000000000e+01
Final Root Iters : 234
Root LP Estimate : +1.95712151018944e+01
Solution :
Solutions found : 359 (4 improvements)
First Solution : +2.70000000000000e+01 (in run 1, after 0 nodes, 0.00 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.00 seconds, depth 13, found by <randrounding>)
Dual Bound : +1.80000000000000e+01
Gap : 0.00 %
Avg. Gap : 17.33 % (7.45 primal-dual integral)
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
<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
<display> change parameters for display columns
<emphasis> predefined parameter settings
<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
<nlp> change parameters for nonlinear programming relaxations
<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>
<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
<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
<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
<dualval> primal heuristic using dual values
<emphasis> predefined parameter settings
<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
<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
<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
<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
<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.
<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,65534]: -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
(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
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 |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
b 0.0s| 1 | 0 | 0 | - |3351k| 0 | - | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
0.0s| 1 | 0 | 27 | - |3351k| 0 | 27 | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
G 0.0s| 1 | 0 | 27 | - |3382k| 0 | - | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
0.0s| 1 | 0 | 43 | - |3382k| 0 | 27 | 27 | 118 | 27 | 118 | 1 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
G 0.0s| 1 | 0 | 43 | - |3382k| 0 | - | 27 | 118 | 27 | 118 | 1 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 68 | - |3441k| 0 | 27 | 27 | 118 | 27 | 120 | 3 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 97 | - |3441k| 0 | 27 | 27 | 118 | 27 | 124 | 7 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 122 | - |3449k| 0 | 27 | 27 | 118 | 27 | 130 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 151 | - |3574k| 0 | 27 | 27 | 118 | 27 | 136 | 19 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 171 | - |3574k| 0 | 27 | 27 | 118 | 27 | 140 | 23 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 187 | - |3574k| 0 | 26 | 27 | 118 | 27 | 141 | 24 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 195 | - |3807k| 0 | 26 | 27 | 118 | 27 | 142 | 25 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 204 | - |3807k| 0 | 27 | 27 | 118 | 27 | 143 | 26 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 215 | - |3807k| 0 | 27 | 27 | 118 | 27 | 146 | 29 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 224 | - |3807k| 0 | 27 | 27 | 118 | 27 | 148 | 31 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.0s| 1 | 0 | 234 | - |3807k| 0 | 27 | 27 | 118 | 27 | 149 | 32 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 2 | 234 | - |3807k| 0 | 27 | 27 | 118 | 27 | 149 | 32 | 0 | 27 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 100 | 39 | 940 | 7.1 |4073k| 9 | 14 | 27 | 130 | 27 | 127 | 32 | 12 | 158 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 200 | 107 | 2289 | 10.3 |4076k| 10 | - | 27 | 133 | 27 | 127 | 32 | 15 | 191 | 1.385714e+01 | 1.800000e+01 | 29.90%
0.1s| 300 | 187 | 3394 | 10.6 |4076k| 10 | 12 | 27 | 133 | 27 | 127 | 32 | 15 | 196 | 1.416667e+01 | 1.800000e+01 | 27.06%
0.1s| 400 | 249 | 4264 | 10.1 |4076k| 11 | 15 | 27 | 135 | 27 | 127 | 32 | 17 | 203 | 1.451515e+01 | 1.800000e+01 | 24.01%
0.1s| 500 | 313 | 5034 | 9.6 |4076k| 11 | 11 | 27 | 135 | 27 | 127 | 32 | 17 | 211 | 1.461111e+01 | 1.800000e+01 | 23.19%
0.2s| 600 | 357 | 5652 | 9.0 |4076k| 14 | 11 | 27 | 136 | 27 | 127 | 32 | 18 | 211 | 1.469620e+01 | 1.800000e+01 | 22.48%
0.2s| 700 | 397 | 6269 | 8.6 |4076k| 14 | 10 | 27 | 135 | 27 | 127 | 32 | 18 | 211 | 1.483333e+01 | 1.800000e+01 | 21.35%
0.2s| 800 | 415 | 6806 | 8.2 |4076k| 14 | 12 | 27 | 135 | 27 | 127 | 32 | 18 | 211 | 1.486667e+01 | 1.800000e+01 | 21.08%
0.2s| 900 | 419 | 7256 | 7.8 |4076k| 14 | - | 27 | 133 | 27 | 127 | 32 | 18 | 215 | 1.496552e+01 | 1.800000e+01 | 20.28%
0.2s| 1000 | 443 | 7826 | 7.6 |4076k| 14 | 11 | 27 | 129 | 27 | 127 | 32 | 18 | 217 | 1.506667e+01 | 1.800000e+01 | 19.47%
0.2s| 1100 | 465 | 8371 | 7.4 |4076k| 15 | - | 27 | 126 | 27 | 127 | 32 | 18 | 217 | 1.513333e+01 | 1.800000e+01 | 18.94%
0.2s| 1200 | 465 | 8759 | 7.1 |4076k| 15 | - | 27 | 126 | 27 | 127 | 32 | 18 | 219 | 1.516667e+01 | 1.800000e+01 | 18.68%
0.2s| 1300 | 469 | 9156 | 6.9 |4076k| 15 | - | 27 | 124 | 27 | 127 | 32 | 18 | 221 | 1.525000e+01 | 1.800000e+01 | 18.03%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.2s| 1400 | 483 | 9587 | 6.7 |4076k| 15 | - | 27 | 123 | 27 | 127 | 32 | 18 | 221 | 1.530556e+01 | 1.800000e+01 | 17.60%
0.3s| 1500 | 485 | 9974 | 6.5 |4076k| 15 | - | 27 | 123 | 27 | 127 | 32 | 18 | 221 | 1.533333e+01 | 1.800000e+01 | 17.39%
0.3s| 1600 | 477 | 10371 | 6.3 |4076k| 15 | - | 27 | 122 | 27 | 127 | 32 | 18 | 223 | 1.538095e+01 | 1.800000e+01 | 17.03%
0.3s| 1700 | 481 | 10733 | 6.2 |4076k| 15 | - | 27 | 122 | 27 | 127 | 32 | 18 | 223 | 1.544444e+01 | 1.800000e+01 | 16.55%
0.3s| 1800 | 469 | 11053 | 6.0 |4076k| 15 | 9 | 27 | 122 | 27 | 127 | 32 | 18 | 224 | 1.550000e+01 | 1.800000e+01 | 16.13%
0.3s| 1900 | 451 | 11362 | 5.9 |4076k| 15 | - | 27 | 122 | 27 | 127 | 32 | 18 | 224 | 1.550000e+01 | 1.800000e+01 | 16.13%
0.3s| 2000 | 451 | 11772 | 5.8 |4076k| 15 | 12 | 27 | 121 | 27 | 127 | 32 | 18 | 231 | 1.560000e+01 | 1.800000e+01 | 15.38%
0.3s| 2100 | 435 | 12095 | 5.7 |4076k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 239 | 1.566667e+01 | 1.800000e+01 | 14.89%
0.3s| 2200 | 417 | 12401 | 5.5 |4076k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 242 | 1.566667e+01 | 1.800000e+01 | 14.89%
0.3s| 2300 | 403 | 12744 | 5.4 |4076k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 253 | 1.566667e+01 | 1.800000e+01 | 14.89%
0.3s| 2400 | 381 | 13059 | 5.3 |4076k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 255 | 1.571429e+01 | 1.800000e+01 | 14.55%
0.3s| 2500 | 371 | 13361 | 5.3 |4076k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 258 | 1.575000e+01 | 1.800000e+01 | 14.29%
0.4s| 2600 | 351 | 13628 | 5.2 |4076k| 15 | - | 27 | 121 | 27 | 127 | 32 | 18 | 261 | 1.583333e+01 | 1.800000e+01 | 13.68%
0.4s| 2700 | 335 | 13940 | 5.1 |4076k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 263 | 1.583333e+01 | 1.800000e+01 | 13.68%
0.4s| 2800 | 311 | 14269 | 5.0 |4076k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 270 | 1.583333e+01 | 1.800000e+01 | 13.68%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.4s| 2900 | 285 | 14583 | 4.9 |4076k| 15 | 12 | 27 | 120 | 27 | 127 | 32 | 18 | 276 | 1.583333e+01 | 1.800000e+01 | 13.68%
0.4s| 3000 | 255 | 14917 | 4.9 |4076k| 15 | 8 | 27 | 120 | 27 | 127 | 32 | 18 | 284 | 1.588235e+01 | 1.800000e+01 | 13.33%
0.4s| 3100 | 245 | 15226 | 4.8 |4076k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 290 | 1.594444e+01 | 1.800000e+01 | 12.89%
0.4s| 3200 | 219 | 15537 | 4.8 |4076k| 15 | 10 | 27 | 120 | 27 | 127 | 32 | 18 | 298 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3300 | 191 | 15846 | 4.7 |4076k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 306 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3400 | 151 | 16156 | 4.7 |4076k| 15 | - | 27 | 120 | 27 | 127 | 32 | 18 | 323 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.4s| 3500 | 121 | 16477 | 4.6 |4076k| 15 | - | 27 | 119 | 27 | 127 | 32 | 18 | 335 | 1.600000e+01 | 1.800000e+01 | 12.50%
0.5s| 3600 | 75 | 16758 | 4.6 |4076k| 15 | 13 | 27 | 119 | 27 | 127 | 32 | 18 | 345 | 1.628571e+01 | 1.800000e+01 | 10.53%
0.5s| 3700 | 29 | 17062 | 4.5 |4076k| 15 | - | 27 | 119 | 27 | 127 | 32 | 18 | 362 | 1.650000e+01 | 1.800000e+01 | 9.09%
SCIP Status : problem is solved [optimal solution found]
Solving Time (sec) : 0.46
Solving Nodes : 3755
Primal Bound : +1.80000000000000e+01 (343 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/gins/freq = 10
heuristics/fracdiving/freq = 5
heuristics/fracdiving/maxlpiterofs = 1500
heuristics/fracdiving/maxlpiterquot = 0.075
heuristics/distributiondiving/freq = 5
heuristics/distributiondiving/maxlpiterofs = 1500
heuristics/distributiondiving/maxlpiterquot = 0.075
heuristics/veclendiving/freq = 5
heuristics/veclendiving/maxlpiterofs = 1500
heuristics/veclendiving/maxlpiterquot = 0.075
heuristics/pscostdiving/freq = 5
heuristics/pscostdiving/maxlpiterofs = 1500
heuristics/pscostdiving/maxlpiterquot = 0.075
heuristics/coefdiving/freq = 5
heuristics/coefdiving/maxlpiterofs = 1500
heuristics/coefdiving/maxlpiterquot = 0.075
heuristics/guideddiving/freq = 5
heuristics/guideddiving/maxlpiterofs = 1500
heuristics/guideddiving/maxlpiterquot = 0.075
heuristics/reoptsols/freq = 20
heuristics/trivialnegation/freq = 20
heuristics/trivial/freq = 20
heuristics/locks/freq = 20
heuristics/shiftandpropagate/freq = 20
heuristics/zeroobj/freq = 20
heuristics/repair/freq = 20
heuristics/randrounding/freq = 10
heuristics/shifting/freq = 5
heuristics/intshifting/freq = 5
heuristics/twoopt/freq = 20
heuristics/fixandinfer/freq = 20
heuristics/feaspump/freq = 10
heuristics/feaspump/maxlpiterofs = 1500
heuristics/feaspump/maxlpiterquot = 0.015
heuristics/clique/freq = 20
heuristics/nlpdiving/freq = 5
heuristics/intdiving/freq = 20
heuristics/actconsdiving/freq = 20
heuristics/objpscostdiving/freq = 10
heuristics/objpscostdiving/maxlpiterofs = 1500
heuristics/objpscostdiving/maxlpiterquot = 0.015
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/octane/freq = 20
heuristics/rens/freq = 20
heuristics/rins/freq = 13
heuristics/localbranching/freq = 20
heuristics/mutation/freq = 20
heuristics/lpface/freq = 8
heuristics/crossover/freq = 15
heuristics/dins/freq = 20
heuristics/vbounds/freq = 20
heuristics/bound/freq = 20
heuristics/undercover/freq = 20
heuristics/proximity/freq = 20
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
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
(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
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 |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
b 0.0s| 1 | 0 | 0 | - |5363k| 0 | - | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
0.0s| 1 | 0 | 27 | - |5363k| 0 | 27 | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
G 0.0s| 1 | 0 | 27 | - |5425k| 0 | - | 27 | 118 | 27 | 117 | 0 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
0.0s| 1 | 0 | 43 | - |5425k| 0 | 27 | 27 | 118 | 27 | 118 | 1 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
G 0.0s| 1 | 0 | 43 | - |5425k| 0 | - | 27 | 118 | 27 | 118 | 1 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 68 | - |5483k| 0 | 27 | 27 | 118 | 27 | 120 | 3 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 97 | - |5500k| 0 | 27 | 27 | 118 | 27 | 124 | 7 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 122 | - |5500k| 0 | 27 | 27 | 118 | 27 | 130 | 13 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 151 | - |5633k| 0 | 27 | 27 | 118 | 27 | 136 | 19 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 171 | - |5633k| 0 | 27 | 27 | 118 | 27 | 140 | 23 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 187 | - |5633k| 0 | 26 | 27 | 118 | 27 | 141 | 24 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 195 | - |5866k| 0 | 26 | 27 | 118 | 27 | 142 | 25 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 204 | - |5866k| 0 | 27 | 27 | 118 | 27 | 143 | 26 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 215 | - |5866k| 0 | 27 | 27 | 118 | 27 | 146 | 29 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.0s| 1 | 0 | 224 | - |5866k| 0 | 27 | 27 | 118 | 27 | 148 | 31 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
0.0s| 1 | 0 | 234 | - |5866k| 0 | 27 | 27 | 118 | 27 | 149 | 32 | 0 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 1 | 2 | 234 | - |5932k| 0 | 27 | 27 | 118 | 27 | 149 | 32 | 0 | 27 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 100 | 39 | 940 | 7.1 |6222k| 9 | 14 | 27 | 130 | 27 | 127 | 32 | 12 | 158 | 1.300000e+01 | 1.800000e+01 | 38.46%
0.1s| 200 | 109 | 2254 | 10.2 |6224k| 10 | 11 | 27 | 133 | 27 | 127 | 32 | 15 | 193 | 1.385714e+01 | 1.800000e+01 | 29.90%
SCIP Status : solving was interrupted [node limit reached]
Solving Time (sec) : 0.12
Solving Nodes : 200
Primal Bound : +1.80000000000000e+01 (310 solutions)
Dual Bound : +1.38571428571429e+01
Gap : 29.90 %
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.