0

ときどき、ビルド時間が 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 に増やされません。

それを行う方法はありますか?また、ソルバーを再起動するにはどうすればよいですか?

関連する質問: 解決策が得られた場合、その解決策を復元しましたが、もう少し時間があればより良い解決策が得られると思います。この解決策を出発点としてソルバーを開始できますか?

4

0 に答える 0