OptaPlanner的分数计算器回调实体

时间:2015-04-21 10:09:16

标签: java optimization optaplanner

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

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

Callbacks call diagram

即使模型发生变化,optaplanner也不会调用与实体相关的计算器方法。为什么会这样,为什么需要通知scoreDirector

1 个答案:

答案 0 :(得分:1)

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.

相关问题