【发布时间】:2021-08-09 15:42:36
【问题描述】:
我们正在尝试使用 Optaplanner 解决 VRP。 分数计算通过约束流运行。
现在我有两辆车(A 和 B),想安排两个工作(J1 和 J2)。 构造启发式 (FIRST_FIT_DECREASING) 将 J1 调度到 A 并将 J2 调度到 B,到目前为止是正确的。
现在这两个工作也有一个属性“客户”,如果两个工作的客户相同但车辆不同,我想分配一个惩罚。
为此,我在 ConstraintProvider 中创建了一个约束,通过 groupBy 过滤所有具有相同客户但不同车辆的作业。
如果我现在打开 FULL_ASSERT_MODE,在调度 J2 后会发生 IllegalStateException,因为增量计算的分数与完整计算的分数不同。 我怀疑这是因为重新计算作业时间的 VariableListener 只告诉 ScoreDirector 我的影子变量对 Job J2 的更改,因此只更改与其相关的分数部分。
我如何告诉 Optaplanner J1 的分数也必须重新计算?我无法通过 VariableListener 到达 Job J1 告诉 ScoreDirector 必须在此处更改分数。
或者这个问题需要不同的方法吗?
【问题讨论】:
标签: optaplanner vehicle-routing