Google ortools CVRP - различная дистанционная матрица по транспортному средству - PullRequest
1 голос
/ 21 апреля 2020

В ortools я знаю, что вы можете запускать CVRP с разными мощностями на транспортное средство. Однако можете ли вы пройти другую матрицу расстояний в зависимости от транспортного средства? Например, два города могут находиться на расстоянии 1000 миль друг от друга, но добраться на самолете может быть гораздо быстрее, чем на автомобиле, поэтому, выполняя работу CVRP, я могу пропустить временную матрицу, а не фактическую матрицу расстояний. Эта временная матрица будет отличаться в зависимости от типа транспортного средства.

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Должно быть близко к этому:

callback_indices = []
for vehicle_idx in range(data['n_vehicles']):
    def vehicle_callback(from_index, to_index, i=vehicle_idx):
        from_node = manager.IndexToNode(from_index)
        to_node = manager.IndexToNode(to_index)
        return data['vehicle_costs'][i] * data['time_matrices'][i][from_node][to_node]
    callback_index = routing.RegisterTransitCallback(vehicle_callback)
    callback_indices.append(callback_index)


routing.AddDimensionWithVehicleTransits(
    callback_indices,
    0,
    max,
    False,
    'DimensionName')
1 голос
/ 21 апреля 2020

Вы можете передать вектор / список оценщиков.

Вот API C ++ /

...