使用OR工具进行取货和交货,将成本降到最低

时间:2019-05-10 18:17:54

标签: python or-tools

我有以下问题:

我有:

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

我正在寻找一些建议和建议。如果需要添加更多详细信息或提供具体示例,请告诉我。

1 个答案:

答案 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});
    }

source code for routing.cc