pub enum SolveStrategy {
ConstructThenOptimize,
ConstructThenPortfolio,
OptimizeOnly,
}Expand description
How CompiledProblem::solve_with spends its budget.
All of these end at the same guard: a schedule that violates hard constraints is never
returned, whichever strategy produced it (see InternalCompiled::solve_result).
Variants§
ConstructThenOptimize
Construct a feasible schedule, then improve it with Branch & Bound.
Two phases so that finding a schedule and finding a good one stay separate questions: the optimizer starts bounded by a schedule that already exists instead of searching for its first complete assignment on the clock.
ConstructThenPortfolio
Construct a feasible schedule, then hand it to the four-worker portfolio (Backtracking, Local Search, LNS, Branch & Bound over a shared incumbent) for the remaining budget.
The default, because a tree search alone plateaus where a repair-based one does not: on
the reference instances this both reached schedules Self::ConstructThenOptimize never
found in the same budget and roughly tripled the quality of the ones it did find. It
costs four threads and four copies of the model.
Which of several equally good schedules comes back depends on how the workers happen to
be scheduled, so two runs over the same problem can return different arrangements of the
same quality. Pick Self::ConstructThenOptimize where a run has to be repeatable.
OptimizeOnly
One Branch & Bound run over the whole budget, with no construction phase.
The shape the search had before construction was split out, kept so a benchmark can say what the split is worth rather than assuming it.