该问题似乎类似于邮件列表中的帖子: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;
....
}