首页 > 解决方案 > OptaPlanner,在 VariableListener 中设置另一个影子变量

问题描述

在示例任务分配(以及其他示例)中,在 VariableListener() 中,仅更新传入的 PlanningEntity 对象的影子变量。像

@Override
public void afterVariableChanged(ScoreDirector<TaskAssigningSolution> scoreDirector, Task task) {
    updateStartTime(scoreDirector, task);
}

参数任务对象的影子变量被更新。我认为解决方案对象将不断更新,直到其所有 PlanningEntity/PlanningVariable 都被填满。并且每当一个 PlanningVariable 改变 afterVariableChanged() 将被调用,然后将计算规则以更新分数。我的问题是,如果我在 afterVariableChanged() 中更新另一个实体的影子变量,会有什么问题吗?不仅是传入对象的影子变量。我可以通过调用 scoreDirector.getWorkingSolution() 来获取另一个实体。

标签: optaplanner

解决方案


一个影子变量可以更新另一个影子变量。

例如,当实例影子变量 C(源自 A)发生更改时,它也可能更改影子变量 E(源自 C 和 B)的 1 个或多个实例:

在此处输入图像描述

根据需要调用 before/after 方法。


推荐阅读