是否可以在Jsprit中为每种车辆类型定义单独的成本矩阵?我有许多不同的车辆类型(卡车,自行车,汽车,电动皮卡等),每种类型都有自己的成本矩阵。矩阵不是线性依赖的,因此不能选择使用不同的距离和时间成本因素。VRP拥有无限的舰队规模。
我使用 JSprit 1.6.2 并实现了 AbstractForwardVehicleRoutingTransportCost-Interface。它的两种方法都有一个车辆参数,我用它来选择正确的矩阵,但传递的值始终为 null,随后抛出 NullPointerException。任何想法为什么这种方法不起作用以及如何让它工作?
提前感谢!
这个问题似乎类似于邮件列表中的帖子:Jsprit 中的车辆相关速度。以下是Stefan在那篇帖子中的回答:
您需要实现自己的车辆路线运输成本。在这里,您需要区分车辆类型。例如,如果有两个行驶时间矩阵 motorbikeMatrix 和 truckMatrix,则在实现中指定如果车辆类型为摩托车,则应使用 motorbikeMatrix。
我想您已经有了这些车辆类型相关的成本矩阵,您的问题是在车辆路由运输成本类中调用相应的成本矩阵。
像这样:
vrpBuilder.setRoutingCost(new MultiVehTypeCosts(vrpBuilder.getLocations(), motorbikeMatrix, truckMatrix, ...));
然后在 MultiVehTypeCost 类中,在
getTransportCost(Location from, Location to, double time, Driver driver, Vehicle vehicle) {}
和
getTransportTime(Location from, Location to, double time, Driver driver, Vehicle vehicle) {}
你有这样的东西:
if (vehicle.getType().getTypeId().equals("motorbike")) {
double time = motorbikeMatrix[from.getIndex()][to.getIndex()][1];
double distance = motorbikeMatrix[from.getIndex()][to.getIndex()][0];
VehicleTypeImpl.VehicleCostParams costParams = vehicle.getType().getVehicleCostParams();
double cost = costParams.perDistanceUnit * distance + costParams.perTimeUnit * time;
....
}