我有以下问题:
我有:
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
我正在寻找一些指针和建议。请让我知道,如果我需要添加更多细节或提供一个具体的例子。
发布于 2019-05-14 03:29:49
我需要做的是:
设置
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});
}
https://stackoverflow.com/questions/56082923
复制相似问题