Optaplanner:可重现的解决方案

Optaplanner: Reproducible solution

我正在尝试解决类似于员工排班的问题。我面临的问题是每次我 运行 解算器时,它都会生成不同的分配。这使得调试为什么选择一个特定案例而不是另一个案例变得更加困难。为什么会这样?

P.S。我的作业有很多硬约束,并且可能无法满足所有约束(大多数情况下我仍然会看到一些负硬分)。所以我的终止策略是基于unimprovedSecondsSpentLimit。会不会是这个原因?

是的,很可能是终止。 OptaPlanner 的默认 environmentMode 保证完全相同的解决方案在完全相同的步骤 (*)。但是 CPU 周期与 运行 运行 有很大不同,因此这意味着您每个 运行 得到或多或少的步数。使用 DEBUG 日志记录来查看。

使用stepCountLimitunimprovedStepCountLimit终止。

(*) 除非文档中另有说明。例如,如果与时间限制终止一起使用,即使在完全相同的步骤中,模拟退火也会有所不同。