我有以下问题:
我有:
data["time_matrix"] # 2D list
data["pickups_deliveries"] # list of tuples, containing (start_node_index, end_node_indes)
data["vehicle_costs"] # list of 2D list of cost of route per vehicle
我的目标是以最小的成本按时完成所有交货(假设有可能)。
我知道我需要创建一个time_dimension
,因为我需要跟踪累积时间以确保可以在给定的时间范围内交付商品。
但是,我不知道如何最小化成本?
设置后:
routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
我通过的transit_callback_index
将基于data["time_matrix"]
如何指定data["vehicle_costs"]
?并告诉求解器将其最小化?
我查看了以下问题:https://github.com/google/or-tools/issues/1045,但在我看来,在这种情况下,使用cost_matrix
代替distance_matrix
(或time_matrix
)不与
我主要处理以下示例:Time Window Constraints
我正在寻找一些建议和建议。如果需要添加更多详细信息或提供具体示例,请告诉我。
答案 0 :(得分:0)
我需要做的是:
设置
routing.SetArcCostEvaluatorOfAllVehicles(..)
基于成本矩阵,然后通过创建时间维度来处理取货和交货。
阅读这些源代码会把我推向正确的方向。
for (int vehicle = 0; vehicle < vehicles(); ++vehicle) {
CostClass cost_class(vehicle_to_transit_cost_[vehicle]);
// Insert the dimension data in a canonical way.
for (const RoutingDimension* const dimension : dimensions_) {
const int64 coeff = dimension->vehicle_span_cost_coefficients()[vehicle];
if (coeff == 0) continue;
cost_class.dimension_transit_evaluator_class_and_cost_coefficient
.push_back({dimension->vehicle_to_class(vehicle), coeff, dimension});
}