我基于OptaPlanner的任务分配示例创建了一个解决方案,并观察了原始示例和我自己的解决方案中的一个特定行为:
解决100tasks-5employees问题在半分钟左右后几乎不会产生新的更好的分数,但终止解算器并再次重新启动它会立即带来更好的解决方案。
为什么会这样?根据我的理解,重复构造启发式不会改变任何规划实体,因为它们都已经初始化。然后再次启动本地搜索。为什么它会立即找到新的更好的解决方案,而只是在没有中断的情况下继续第一次执行不会或者至少慢得多?
通过终止并重新启动求解器,您实际上会导致延迟接受再进行重新加热。一旦this jira is prioritized and implemented,OptaPlanner将自动重新加热。
这种情况发生在少数用例上。但如果它发生在用例上,它往往会出现在所有数据集上。
我有一些情况通过使用<localSearch>
终止配置多个<unimprovedSecondsSpentLimit>
阶段来解决它,但我不喜欢这样。修复jira是唯一真正的解决方案。