我怎样才能从评分主管那里得到当前的动作?

How can I get the current move from the score director?

我们正在使用文档中的“自动延迟到最后”模式,https://www.optaplanner.org/docs/optaplanner/latest/design-patterns/design-patterns.html

环路检测计算量非常大,我们希望尽量减少调用次数。现在,它正在到达时间影子变量侦听器的@AfterVariableChanged方法中被调用。

我在该方法中可用的唯一信息是获得新的前一停靠点的停靠点和得分主管。一个动作可能会改变几个计划变量,所以我将为每个改变的计划变量做一次循环检测,而我每次动作只需要做一次(并且可能撤消移动,除非我真的很聪明并缓存跨移动的循环检测结果)。

我有没有办法从评分主管那里弄清楚现在正在执行什么动作?我不需要确切地知道正在执行什么动作或什么样的动作,只需要知道我是否仍处于与之前相同的动作中。

我尝试使用 scoreDirector.toString(),其中有一个递增的数字,但是对于移动和相应的撤消移动,该数字似乎相同。

不,无法从计分代码访问动作。这是设计使然——计分需要独立于执行的动作。任何解决方案都有一个分数,如果两个解决方案代表问题的相同状态,则它们的分数必须相等 - 因此对于评分而言唯一重要的是解决方案的状态,而不是求解器或任何其他状态外部因素。