該問題與郵件列表中的帖子類似:Vehicle dependent velocities in Jsprit。下面是斯特凡在那篇文章中的回答:
你需要實現你自己的VehicleRoutingTransportCosts。在這裏你需要區分車型。例如,如果您有兩個旅行時間矩陣motorbikeMatrix和truckMatrix,則在您的實施中指定如果車輛是摩托車類型,則應使用摩托車矩陣。
我想你已經有了那些與車型相關的成本矩陣,你的問題將是在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;
....
}
我很想知道爲什麼成本矩陣不是線性相關的?這是因爲您的車輛具有某種不同的訪問限制,例如通過柱子的自行車,或不同的最高速度? – roganjosh
這是絕對正確的。不同的交通方式可能在相同的兩個地點之間有完整的不同路線。此外,在很多情況下,例如,卡車由於通道重建而無法提供某種關係(例如最大重量或高度超過某個閾值)。 – Jan