我在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);
}