8.2. 解決して進捗状況を確認する
ユーザーがソリューションを待っている間にソルバーが実行されている場合、ユーザーは結果を受け取るまでに数分または数時間待つ必要がある場合があります。すべてが順調に進んでいることをユーザーに保証するために、これまでに達成された最良の解決策と最良のスコアを表示して進捗状況を示します。
手順
中間の最良のソリューションを処理するには、
solveAndListen(…) を使用します。public class TimeTableService { private SolverManager<TimeTable, Long> solverManager; // Returns immediately public void solveLive(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); } }この実装は、データベースを使用して、データベースをポーリングする UI と通信します。より高度な実装は、最適なソリューションを UI またはメッセージングキューに直接プッシュします。
-
ユーザーが中間の最良の解決策に満足し、より良い解決策をこれ以上待ちたくない場合は、
SolverManager.terminateEarly (problemId)を呼び出します。