如何在 JSprit 中使用具有自身成本矩阵的车辆类型

How to use vehicle types with own cost matrix in JSprit

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

我使用 JSprit 1.6.2 并实现了 A​​bstractForwardVehicleRoutingTransportCosts 接口。它的两种方法都有一个车辆参数,我用它来 select 正确的矩阵,但传递的值始终为 null,随后抛出 NullPointerException。知道为什么这种方法不起作用以及我如何让它起作用吗?

提前致谢!

问题似乎与邮件列表中的 post 类似:Vehicle dependent velocities in Jsprit。以下是 Stefan 在 post:

中的回答

You need to implement your own VehicleRoutingTransportCosts. Here you need to differentiate between vehicle types. For example, if you have two travel time matrices motorbikeMatrix and truckMatrix, then you specify in your implementation that motorbikeMatrix should be used if vehicle is of type motorbike.

我想你已经有了那些依赖于车辆类型的成本矩阵,你的问题是在 VehicleRoutingTransportCosts class.

中调用相应的成本矩阵

类似于:

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

然后在 MultiVehTypeCosts class,在

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;
        ....
    }