# 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()`

to`solve()`

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 to`solver.showDecisions()`

prints the tree search during the resolution.
Printing the decisions slows down the search process.
## Feedback

Was this page helpful?

Glad to hear it! Please tell us how we can improve.

Sorry to hear that. Please tell us how we can improve.