我在 OptaPlanner 的示例中为 VRP 实现了一个不对称距离矩阵,如答案https://stackoverflow.com/a/19420978/3743175的选项 B 中所建议
然而,软约束的值与测试中计算的路线距离的总值不一致。
任何人都知道这件事的原因吗?我检查了几次,我的矩阵是正确的,对称实例不会出现问题。
欢迎任何帮助。
谢谢。
找到的解决方案:
我在示例的 softScore 计算中发现了问题:softscore 是用反向弧计算的。
我在 VehicleRoutingIncrementalScoreCalculator 类中替换了这一行:
...
softScore -= vehicle.getLocation().getDistance(customer.getLocation());
...
softScore += vehicle.getLocation().getDistance(customer.getLocation());
和:
...
softScore -= customer.getLocation().getDistance(vehicle.getLocation());
...
softScore += customer.getLocation().getDistance(vehicle.getLocation());
我用以下方法修复了 Customer 类:
public int getDistanceToPreviousStandstill() {
if (previousStandstill == null) {
return 0;
}
return previousStandstill.getLocation().getDistance(location);
}