Я использую 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]
, и это должно работать.
Заранее спасибо!