Минимизируйте затраты, полученные при получении и доставке с помощью инструментов ИЛИ - PullRequest
0 голосов
/ 10 мая 2019

У меня следующая проблема:

У меня есть:

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,, но мне кажется, что в этом случае вместо distance_matrix (или time_matrix используется cost_matrix)) не в сочетании с.

В основном я работал с этим примером: Ограничения временного окна

Я ищу некоторые подсказки и предложения.Пожалуйста, дайте мне знать, если мне нужно добавить больше деталей или привести конкретный пример.

1 Ответ

1 голос
/ 13 мая 2019

Что мне нужно было сделать:

набор

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

исходный код для routing.cc

...