问题描述
我正在运行具有容量限制的 VRP。这是我的代码。
List<Order> orders =. getorders()
final DataModel data = new DataModel();
data.distanceMatrix = distanceMatrix.constructdistanceMatrix(orders);
data.vehicleNumber = noOfVehicles;
data.vehicleCapacities = new long[noOfVehicles];
data.depot = 0;
data.demands = new long[orders.size() + 1];
capacityAndDemandMatrix.prefillCapacitiesAndDemands(data.demands,data.getVehicleCapacities(),orders);
// Create Routing Index Manager
RoutingIndexManager manager =
new RoutingIndexManager(data.distanceMatrix.length,data.vehicleNumber,data.depot);
// Create Routing Model.
RoutingModel routing = new RoutingModel(manager);
// Create and register a transit callback.
final int transitCallbackIndex =
routing.registerTransitCallback((long fromIndex,long toIndex) -> {
// Convert from routing variable Index to user NodeIndex.
int fromNode = manager.indexToNode(fromIndex);
int toNode = manager.indexToNode(toIndex);
return data.distanceMatrix[fromNode][toNode];
});
// Define cost of each arc.
routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex);
// Add Capacity constraint.
final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> {
// Convert from routing variable Index to user NodeIndex.
int fromNode = manager.indexToNode(fromIndex);
return data.demands[fromNode];
});
routing.addDimensionWithVehicleCapacity(demandCallbackIndex,// null capacity slack
data.vehicleCapacities,// vehicle maximum capacities
true,// start cumul to zero
"Capacity");
// Setting first solution heuristic.
RoutingSearchParameters searchParameters =
main.defaultRoutingSearchParameters()
.toBuilder()
.setFirstSolutionStrategy(FirstSolutionStrategy.Value.PATH_CHEApest_ARC)
.setLocalSearchMetaheuristic(LocalSearchMetaheuristic.Value.GUIDED_LOCAL_SEARCH)
.setTimeLimit(Duration.newBuilder().setSeconds(25).build())
.build();
// Solve the problem.
Assignment solution = routing.solveWithParameters(searchParameters);
// Print solution on console.
return constructroutes(data,routing,manager,solution,orders);
I have a capacity limit for each vehicle.
I want the short distance for all vehicles.
算法按预期工作,为给定车辆提供整体最短路径。如果我提供更多数量的车辆无法完成的订单。它提供“无解决方案”。
例如,有 40 个订单和 2 辆车。每辆车只能承载10个订单。目前,算法在这种情况下没有给出任何解决方案。但我需要为 40 辆车中的 2 辆车映射 20 个订单的最佳解决方案。
是否可以更改 OR-Tools 代码中的某些内容,以便它可以留下很少的订单,但需要遵守容量限制并始终提供可能的最佳解决方案?
解决方法
您应该查看“处罚和删除访问”文档...
https://developers.google.com/optimization/routing/penalties