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);
    }
}