每隔一段时间,我的构建时间就会从 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();
}
但是使用的限制仍然是一分钟,并且在找到第一个解决方案后不会增加到三分钟。
有没有办法做到这一点?以及如何重新启动求解器?
一个相关问题:如果我确实得到了一个解决方案,恢复了那个解决方案,但我认为再多一点时间我就会得到一个更好的解决方案,我可以以这个解决方案作为起点来启动一个求解器吗?