如何为OptaPlanner更新最佳解决方案时如何获得选定的移动?

时间:2014-09-08 01:15:45

标签: optaplanner

我们知道OptaPlanner会在选择一个生成最高分数的步骤之前执行多个步骤的计算,以更新最佳解决方案,因为调试日志显示例如 [主要] DEBUG o.o.c.i.c.DefaultConstructionHeuristicSolverPhase - 步骤索引(1147),时间花费(4381),得分(0hard / 80504soft),选择移动计数(15)用于构建步骤......

我试图获取被选中的动作(或者至少获得通知),以便我可以捕获一些中间计算结果。显然,为每个步骤打印出所有计算结果是不可行的,因为很多都没有被选中。

我正在查看BestSolutionChangedEvent方法,但似乎它可能不符合我的目的: How to know Optaplanner solving has ended?

有没有想过如何实现这一目标?提前谢谢。

1 个答案:

答案 0 :(得分:1)

在回答实际问题之前,这真的有用吗?假设以下场景:

  • 步骤0,移动0后获得新的最佳分数
  • 第1步,移动1后获得新的最佳分数
  • 第2步,移动2后的最佳得分相同
  • 第3步,移动3后的最佳得分相同
  • 第4步,做完4后的最佳得分

现在,如果您采取导致新的最佳解决方案的举措,您会得到什么?

  • 新的最佳解决方案事件A在步骤0之后,给出移动0
  • 在步骤1之后的新的最佳解决方案事件B,给出移动1
  • 在步骤4之后的新的最佳解决方案事件C,给予移动4 //但不进行移动2移动3我们将不会首先在此解决方案中。

所以这不是很有用,除非你当然想要了解哪些动作是好的。但在这种情况下,请查看基准测试人员Picked move type best score diff over time statistic,6.2中的新内容。

enter image description here

现在回答你的问题:)没有公共API可以做,但你可以使用内部(非向后兼容)实现类,如this class中所做。