Menu Close
Settings Close

Language and Page Formatting Options

9.2. 解決して進捗状況を確認する

ユーザーがソリューションを待っている間にソルバーが実行されている場合、ユーザーは結果を受け取るまでに数分または数時間待つ必要がある場合があります。すべてが順調に進んでいることをユーザーに保証するために、これまでに達成された最良の解決策と最良のスコアを表示して進捗状況を示します。

手順

  1. 中間の最良のソリューションを処理するには、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またはメッセージングキューに直接プッシュします。

  2. ユーザーが中間の最良の解決策に満足し、より良い解決策をこれ以上待ちたくない場合は、 SolverManager.terminateEarly (problemId)を呼び出します。