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