OptaPlanner 的实体得分计算器回调

OptaPlanner's score calculator callbacks for entities

我的模型支持通过Solver#addProblemFactChangeProblemFactChange界面进行实时更改。实现此接口的doChange方法,我通过beforeEntityRemovedbeforeProblemFactRemovedbeforeProblemFactChanged等方法主动使用scoreDirector的通知。此外,模型的增量分数计算器实现了回调方法beforeEntityAddedbeforeEntityRemoved及其after版本。

调查求解器行为,我从 optaplanner 看到了这样的分数计算器调用图:

也就是说,optaplanner 不会调用实体相关的计算器方法,尽管模型发生了变化。为什么会这样,为什么需要通知 scoreDirector?

ProblemFactChange api 被设计为允许对问题进行增量更改,因此您需要调用 before|afterProblemFactAdded|Changed|Removed(),否则不可能实现增量问题更改(不更改API).

ScoreDirector 负责处理这些事件:

  • DroolsScoreDirector 也对问题事实进行增量处理(不仅仅是规划变量)。
  • IncrementalScoreDirector 还没有针对问题事实进行增量处理(但它针对规划变量进行了处理)。在 6.2 中只有 some stopgap code 有一个 TODO,它可以工作,但没有达到应有的速度。

I created a jira issue to track this issue.