使用解决方案的数量而不是最长时间来结束解决尝试

use number of solutions rather than maximum time to end solve attempts

我在 JSP 上使用 CP-SAT 求解器。

我正在迭代求解器 运行s 很多次(基本上每天都模拟一年),我不需要找到最优解,只是一个相当好的解法,所以我想在结束求解器时比每次只允许它 运行 X 秒要聪明一些。例如,我想每次都采用第 5 个解决方案,甚至在当前解决方案的 makespan 仅比前一个解决方案短 5%(例如)时停止。

这可能吗?我只知道 solver.parameters.max_time_in_seconds 作为限制计算时间的一种方式。中间解决方案由 SolutionPrinter 打印,但我认为这只是输出,在 运行?

期间无法破坏求解器

错了,你可以在回调中停止搜索,看这个秘诀:

https://github.com/google/or-tools/blob/stable/ortools/sat/docs/solver.md#stopping-search-early