2.5.2. SolverManager
1 つまたは複数のソルバーインスタンスのラッパーとして SolverManager を使用し、REST API や他のエンタープライズサービスのプランニングを簡素化できます。solve(…) メソッドは、通常の Solver.solve(…) メソッドとは異なります。
-
SolverManager.solve(…)は、呼び出し元のスレッドをブロックすることなく、非同期解決のために問題をスケジュールします。これにより、HTTP およびその他のテクノロジーのタイムアウトの問題が回避されます。即座に返します。 -
SolverManager.solve (…)は、同じドメインの複数の計画問題を並行して解決します。
SolverManager は、一括解決と、エンドユーザーに進捗を表示する解決をサポートします。
public class TimeTableService {
private SolverManager<TimeTable, Long> solverManager;
// Returns immediately, ok to expose as a REST service
public void solve(Long timeTableId) {
solverManager.solveAndListen(timeTableId,
// Called once, when solving starts
this::findById,
// Called multiple times, for every best solution change
this::save);
}
public TimeTable findById(Long timeTableId) {...}
public void save(TimeTable timeTable) {...}
public void stopSolving(Long timeTableId) {
solverManager.terminateEarly(timeTableId);
}
}