1

是否可以在 Jsprit 中为每种车辆类型定义单独的成本矩阵?我有许多非常不同的车辆类型(卡车、自行车、汽车、电动皮卡等),每种类型都有自己的成本矩阵。这些矩阵不是线性相关的,因此对于距离和时间使用不同的成本因素不是一种选择。VRP 有无限的舰队规模。

我使用 JSprit 1.6.2 并实现了AbstractForwardVehicleRoutingTransportCosts -Interface。它的两个方法都有一个车辆参数,我用它来选择正确的矩阵,但传递的值始终为 null,随后抛出 NullPointerException。有什么想法为什么这种方法不起作用以及如何使它起作用?

提前致谢!

4

1 回答 1

5

该问题似乎类似于邮件列表中的帖子:Vehicledependent velocities in Jsprit。以下是 Stefan 在该帖子中的回答:

您需要实现自己的 VehicleRoutingTransportCosts。在这里,您需要区分车辆类型。例如,如果您有两个行程时间矩阵 motorbikeMatrix 和 truckMatrix,那么您在实现中指定如果车辆是摩托车类型,则应该使用 motorbikeMatrix。

我想你已经有了那些依赖于车辆类型的成本矩阵,你的问题是在 VehicleRoutingTransportCosts 类中调用相应的成本矩阵。

就像是:

vrpBuilder.setRoutingCost(new MultiVehTypeCosts(vrpBuilder.getLocations(), motorbikeMatrix, truckMatrix, ...));

然后在 MultiVehTypeCosts 类中,在

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;
        ....
    }
于 2016-05-03T03:40:40.500 回答