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

  • 本文关键字:类型 自己的 JSprit jsprit
  • 更新时间 :
  • 英文 :


是否可以在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;
        ....
    }

相关内容

  • 没有找到相关文章

最新更新