ときどき、ビルド時間が 5 秒から約 200 秒に跳ね上がります。また、同じデータで同時に約 17 を取得した場合でも、解決策が得られないことがあります。
ソルバーを停止し、解決策があったかどうかを確認し、解決策がある場合は続行し、そうでない場合は制約を変更して再起動することはできますか?
これは私がこれまでに得たものです:
SMF.limitTime(solver, 60000);
solver.set(new ObjectiveManager<IntVar, Integer>(score, ResolutionPolicy.MINIMIZE, false));
solver.findSolution();
if(solver.isFeasible() == ESat.TRUE){
System.out.println("first solution found");
SMF.limitTime(solver, 180000);
solver.nextSolution();
} else {
//restart
}
do{
if(solver.isFeasible() == ESat.TRUE){
System.out.println(score.getValue());
}
}while(solver.nextSolution());
try {
solver.restoreLastSolution();
} catch (ContradictionException e) {
throw new UnsupportedOperationException("restoring the last solution ended in a failure");
} finally {
solver.getEngine().flush();
}
ただし、使用される制限は依然として 1 分であり、最初のソリューションが見つかった後も 3 に増やされません。
それを行う方法はありますか?また、ソルバーを再起動するにはどうすればよいですか?
関連する質問: 解決策が得られた場合、その解決策を復元しましたが、もう少し時間があればより良い解決策が得られると思います。この解決策を出発点としてソルバーを開始できますか?