Or-Tools - Сервисное время не работает при использовании исходного местоположения - PullRequest
0 голосов
/ 02 мая 2019

Я использую Google OR-Tools (Python), и у меня проблема с маршрутом транспортного средства из-за временных окон. Я устанавливаю время в пути к местоположениям и время обслуживания для каждого местоположения, а также временное окно, в котором каждое местоположение доступно.

Я установил стоимость каждого узла (в обратном вызове) как время в пути + время обслуживания следующим образом:

def create_time_callback(manager, travel_times, service_times):

    def time_callback(from_index, to_index):
        # Convert from routing variable Index to distance matrix NodeIndex.
        from_node = manager.IndexToNode(from_index)
        to_node = manager.IndexToNode(to_index)

        # Travel time needs to be converted to minutes
        travel_time = round(travel_times[from_node][to_node]/60)
        service_time = service_times[to_node]
        return service_time + travel_time
    return time_callback

Это работает просто отлично, но не точно из-за этой строки:

service_time = service_times[to_node]

При этом алгоритм проверяет, доступно ли местоположение в момент завершения обслуживания, а не в момент прибытия транспортного средства в это место. Это неверно, поскольку транспортные средства часто настроены на прибытие до временного окна местоположения.

Очевидным решением было бы сделать следующее изменение:

service_time = service_times[from_node]

Но когда я делаю это изменение, алгоритм просто работает бесконечно.

Список service_times имеет следующую форму:

[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 0, 0, 0, 0, 0, 0, 0, 0]

Может кто-нибудь помочь мне понять, что я делаю неправильно? Кажется, я должен просто иметь возможность переключаться с [to_node] на [from_node], и это должно работать.

Заранее спасибо!

...