Statistics
Resolution data are available in the Solver
object, whose default output is System.out
.
It centralises widely used methods to have comprehensive feedback about the resolution process.
There are two types of methods: those who need to be called before the resolution, with a prefix show, and those who need to called after the resolution, with a prefix print.
For instance, one can indicate to print the solutions all resolution long:
solver.showSolutions();
solver.findAllSolutions();
Or to print the search statistics once the search ends:
solver.solve();
solver.printStatistics();
On a call to solver.printVersion()
, the following message will be printed:
** Choco 4.10.2 (2019-10) : Constraint Programming Solver, Copyright (c) 2010-2019
Resolution measures
On a call to solver.printStatistics()
, the following message will be printed:
- [ Search complete - [ No solution | {0} solution(s) found ]
| Incomplete search - [ Limit reached | Unexpected interruption ] ].
Solutions: {0}
[ Maximize = {1} ]
[ Minimize = {2} ]
Building time : {3}s
Resolution : {6}s
Nodes: {7} ({7}/{6} n/s)
Backtracks: {8}
Fails: {9}
Restarts: {10}
Max depth: {11}
Variables: {12}
Constraints: {13}
Curly brackets {instruction | } indicate alternative instructions
Brackets [instruction] indicate an optional instruction.
If the search terminates, the message “Search complete” appears on the first line, followed with either the number of solutions found or the message “No solution”.
Maximize
–resp. Minimize
– indicates the best known value for the objective variable before exiting when an (single) objective has been defined.
Curly braces {value} indicate search statistics:
- number of solutions found
- objective value in maximization
- objective value in minimization
- building time in second (from
new Model()
tosolve()
or equivalent) - initialisation time in second (before initial propagation)
- initial propagation time in second
- resolution time in second (from
new Model()
till now) - number of nodes in the binary tree search : one for the root node and between one and two for each decision (two when the decision has been refuted)
- number of backtracks achieved
- number of failures that occurred (conflict number)
- number of restarts operated
- maximum depth reached in the binary tree search
- number of variables in the model
- number of constraints in the model
If the resolution process reached a limit before ending naturally, the title of the message is set to:
- Incomplete search - Limit reached.
The body of the message remains the same. The message is formatted thanks to the IMeasureRecorder
.
Showing solutions
On a call to solver.showSolutions()
, on each solution the following message will be printed:
{0} Solutions, [Maximize = {1}][Minimize = {2}], Resolution {6}s, {7} Nodes, \\
{8} Backtracks, {9} Fails, {10} Restarts
followed by one line exposing the value of each decision variables (those involved in the search strategy).
Showing decisions
On a call to solver.showDecisions()
, on each node of the search tree a message will be printed indicating which decision is applied.
The message is prefixed by as many “.” as nodes in the current branch of the search tree.
A decision is prefixed with [R]
and a refutation is prefixed by [L]
.
..[L]x == 1 (0) //X = [0,5] Y = [0,6] ...
Warning
A call tosolver.showDecisions()
prints the tree search during the resolution.
Printing the decisions slows down the search process.