I am using the CP-Sat solver to optimise a timetable I am making. However, this now takes a long time to solve. Is it possible to seed the solver with an old result, to act as a starting point, with the goal of reducing the time required to find the optimal result?
Asked
Active
Viewed 1,754 times
1 Answers
9
Take a look at this solution hinting example:
num_vals = 3
x = model.NewIntVar(0, num_vals - 1, 'x')
y = model.NewIntVar(0, num_vals - 1, 'y')
z = model.NewIntVar(0, num_vals - 1, 'z')
model.Add(x != y)
model.Maximize(x + 2 * y + 3 * z)
# Solution hinting: x <- 1, y <- 2
model.AddHint(x, 1)
model.AddHint(y, 2)
Edit: you should also try to
- Reduce the amount of variables.
- Reduce the domain of the integer variables.
- Run the solver with multiples threads using
solver.parameters.num_search_workers = 8
. - Prefer boolean over integer variables/contraints.
- Set redundant constraints and/or symmetry breaking constraints.
- Segregate your problem and merge the results.

Stradivari
- 2,626
- 1
- 9
- 21
-
Can you explain what you mean by 'redundant constraints and/or symmetry breaking constraints'? – julaine Aug 22 '23 at 12:52