7

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?

etov
  • 2,972
  • 2
  • 22
  • 36
Andrew
  • 539
  • 5
  • 20

1 Answers1

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 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.
Stradivari
  • 2,626
  • 1
  • 9
  • 21