我的模型支持Solver#addProblemFactChange
和ProblemFactChange
界面的实时更改。实施此界面的doChange
方法后,我会通过scoreDirector
,beforeEntityRemoved
,beforeProblemFactRemoved
等方法主动使用beforeProblemFactChanged
的通知。此外,模型的增量分数计算器实现了回调方法beforeEntityAdded
,beforeEntityRemoved
及其after
版本。
调查求解器的行为,我看到了optaplanner的得分计算器调用图:
即使模型发生变化,optaplanner也不会调用与实体相关的计算器方法。为什么会这样,为什么需要通知scoreDirector
?
答案 0 :(得分:1)
ProblemFactChange
api旨在允许对问题进行渐进式更改,因此您需要调用before|afterProblemFactAdded|Changed|Removed()
,否则无法实现增量问题更改(无需更改API)。
处理这些事件是ScoreDirector
的责任:
DroolsScoreDirector
也会逐步处理问题事实(不只是计划变量)。IncrementalScoreDirector
不会逐步增加(但它确实用于规划变量)。在6.2中只有some stopgap code有一个TODO,它可以正常运行但不能正常工作。