Как построить график решения проблемы с маршрутизацией транспортных средств с помощью инструментов Google OR?

Я использую инструменты Google OR для решения простой задачи маршрутизации транспортных средств на Python. Я хочу изобразить решение, которое возвращает решатель, аналогично руководству Google: Google OR Tools Учебное пособие по решению проблем с маршрутизацией автомобилей

Это код, который я использую из учебника:

def print_solution(data, manager, routing, solution):
"""Prints solution on console."""
max_route_distance = 0
for vehicle_id in range(data['num_vehicles']):
    index = routing.Start(vehicle_id)
    plan_output = 'Route for vehicle {}:\n'.format(vehicle_id)
    route_distance = 0
    while not routing.IsEnd(index):
        plan_output += ' {} -> '.format(manager.IndexToNode(index))
        previous_index = index
        index = solution.Value(routing.NextVar(index))
        route_distance += routing.GetArcCostForVehicle(
            previous_index, index, vehicle_id)
    plan_output += '{}\n'.format(manager.IndexToNode(index))
    plan_output += 'Distance of the route: {}m\n'.format(route_distance)
    print(plan_output)
    max_route_distance = max(route_distance, max_route_distance)
print('Maximum of the route distances: {}m'.format(max_route_distance))

и это решение, которое я получаю:

Маршрут для автомобиля 0: 0 - ›93 -› 92 - ›91 -› 53 - ›56 -› 52 - ›51 -› 61 - ›62 -› 63 - ›64 -› 65 - ›68 -› 67 - › 66 - ›70 -› 69 - ›100 -› 99 - ›98 -› 97 - ›96 -› 94 - ›95 -› 0 Расстояние маршрута: 530м

Маршрут для ТС 1: 0 - ›4 -› 5 - ›10 -› 9 - ›90 -› 89 - ›83 -› 82 - ›81 -› 87 - ›41 -› 44 - ›47 -› 49 - › 50 - ›14 -› 17 - ›19 -› 18 - ›20 -› 22 - ›23 -› 26 - ›31 -› 33 - ›0 Расстояние маршрута: 621м

Маршрут для ТС 2: 0 - ›1 -› 2 - ›7 -› 8 - ›86 -› 88 - ›85 -› 84 - ›59 -› 60 - ›79 -› 76 - ›77 -› 74 - › 71 - ›72 -› 73 - ›75 -› 78 - ›80 -› 58 - ›57 -› 55 - ›54 -› 0 Расстояние маршрута: 614м

Маршрут для ТС 3: 0 - ›3 -› 6 - ›43 -› 42 - ›46 -› 45 - ›48 -› 11 - ›12 -› 15 - ›13 -› 16 - ›25 -› 27 - › 29 - ›28 -› 30 - ›35 -› 36 - ›40 -› 37 - ›39 -› 38 - ›34 -› 32 - ›24 -› 21 - ›0 Расстояние маршрута: 620м

Как я могу построить это решение, подобное изображению?


person JT-12    schedule 12.08.2020    source источник


Ответы (2)


Это изображение является сгенерированным svg с использованием скрипта Python. Вы можете найти источник здесь: https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/doc/routing_svg.py

который вызывается сценарием оболочки: https://github.com/google/or-tools/blob/stable/ortools/constraint_solver/doc/generate_svg.sh

ps: Не стесняйтесь спрашивать в нашем Discord (ссылка в проекте README.md) подробности ...

person Mizux    schedule 12.08.2020
comment
Спасибо! Но моя проблема с vrp не имеет ограничений, кроме количества транспортных средств = 4, должен ли я просто сделать все другие ограничения в модели данных, такие как временные окна и емкость, равными 0? @Mizux - person JT-12; 13.08.2020

Он использует программу здесь:

https://github.com/google/or-tools/blob/stable/examples/python/cvrptw_plot.py

person Laurent Perron    schedule 12.08.2020