# Running solver

To run the solver, simply use:

```
vrp-cli solve pragmatic problem.json -o solution.json -g solution.geojson --log
```

If you specify `--log`

option, it will produce some log output which contains various information regarding refinement
process such as costs, amount of routes, time, etc.:

```
provided 0 initial solutions to start with
configured to use default max-generations (3000) and max-time (300secs)
problem has total jobs: 1000, actors: 250
[0s] created 1 of 1 initial solutions in 471ms
[0s] generation 0 took 472ms, rank: 0, cost: 70928.74(0.000%), tours: 104, unassigned: 0, fitness: (0.000, 104.000, 70928.735)
[0s] population state (phase: initial, speed: 0.00 gen/sec, improvement ratio: 1.000:1.000):
rank: 0, cost: 70928.74(0.000%), tours: 104, unassigned: 0, fitness: (0.000, 104.000, 70928.735)
[3s] generation 100 took 23ms, rank: 0, cost: 65448.21(0.000%), tours: 101, unassigned: 0, fitness: (0.000, 101.000, 65448.214)
[5s] generation 200 took 22ms, rank: 0, cost: 63573.34(0.000%), tours: 101, unassigned: 0, fitness: (0.000, 101.000, 63573.343)
...
[24s] generation 900 took 21ms, rank: 0, cost: 58896.38(0.000%), tours: 98, unassigned: 0, fitness: (0.000, 98.000, 58896.376)
[27s] generation 1000 took 25ms, rank: 0, cost: 58698.43(0.000%), tours: 98, unassigned: 0, fitness: (0.000, 98.000, 58698.427)
[27s] population state (phase: exploration, speed: 36.57 gen/sec, improvement ratio: 0.244:0.243):
rank: 0, cost: 58698.43(0.000%), tours: 98, unassigned: 0, fitness: (0.000, 98.000, 58698.427)
rank: 1, cost: 58698.76(0.001%), tours: 98, unassigned: 0, fitness: (0.000, 98.000, 58698.755)
[30s] generation 1100 took 27ms, rank: 0, cost: 58118.80(0.000%), tours: 98, unassigned: 0, fitness: (0.000, 98.000, 58118.802)
...
[82s] population state (phase: exploitation, speed: 36.48 gen/sec, improvement ratio: 0.178:0.173):
rank: 0, cost: 55847.51(0.000%), tours: 94, unassigned: 0, fitness: (0.000, 94.000, 55847.507)
rank: 1, cost: 55848.46(0.002%), tours: 94, unassigned: 0, fitness: (0.000, 94.000, 55848.457)
[82s] total generations: 3000, speed: 36.48 gen/sec
```

Once the problem is solved, it will save solution in `pragmatic`

and `geojson`

(optional) format.

## Extra options

The `vrp-cli`

supports extra command line arguments which affects behavior of the algorithm.

### Search mode

By default, search is mostly performed in exploration mode (`broad`

) which allows the algorithm to perform better
exploration of a solution space. However, it has slower overall convergence in better local optimum.
You can switch to exploitation mode with `deep`

setting:

```
vrp-cli solve pragmatic problem.json --search-mode=deep
```

In this mode, the algorithm memorizes only the last discovered best known solutions, so it can jump quicker to relatively good local optimum, but suffers more from premature convergence.

A general recommendation is to use `deep`

on relatively simple dataset and/or when strict time limits should be applied.

### Termination criteria

Termination criteria defines when refinement algorithm should stop and return best known solution. At the moment, there are three types which can be used simultaneously:

#### Max time

Max time specifies duration of solving in seconds:

```
vrp-cli solve pragmatic problem.json --max-time=600
```

#### Max generations

Generation is one refinement step and it can be limited via *max-generations* parameter:

```
vrp-cli solve pragmatic problem.json --max-generations=1000
```

#### Cost variation

Cost variation stops refinement process when cost does not significantly change:

```
vrp-cli solve pragmatic problem.json --cost-variation=200,0.1
```

It calculates coefficient of variation of cost change over
specific amount of generations specified by `sample`

and stops algorithm when it is below specified `threshold`

.

#### Default behavior

Default termination criteria is max 3000 generations and 300 seconds at max.

### Initial solution

You can supply initial solution to start with using `-i`

option.

### Writing solution to file

Writing solution into file is controlled by `-o`

or `--out-result`

setting. When it is omitted, then solution is written
in std out.

Pragmatic format supports option `-g`

or `--geo-json`

which writes solution in separate file in geojson format.