Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can the CP solver be initialised at a specific point?

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?

like image 275
Andrew Avatar asked Jul 25 '19 13:07

Andrew


1 Answers

Take a look at this solution hinting example:

  • https://github.com/google/or-tools/blob/stable/ortools/sat/docs/model.md#solution-hinting
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 usingsolver.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.
like image 107
Stradivari Avatar answered Sep 30 '22 03:09

Stradivari