Google ИЛИ инструменты для принудительного разъединения / предотвращения подключения определенных местоположений?

#python #or-tools #vehicle-routing

#python #или-инструменты #маршрутизация транспортного средства

Вопрос:

Я успешно воссоздаю проблему маршрутизации транспортных средств доставки и доставки, но я хочу добавить дополнительное ограничение, которое я нигде не могу найти, как его реализовать: я хочу, чтобы мои транспортные средства всегда возвращались на склад после доставки. Как я могу применить это ограничение? Кажется, что если я добавлю дизъюнкцию, то решатель может в конечном итоге не доставить в определенное место доставки.

Комментарии:

1. Просто измените матрицу расстояний таким образом, чтобы единственный выход из доставки был в хранилище. Или добавьте измерение с емкостью 1, увеличенное на единицу при доставке.

2. @LaurentPerron Спасибо за быстрый ответ. Не могли бы вы привести пример в обоих случаях, чтобы точно понять, что вы имеете в виду, и принять решение в отдельном ответе?

3. @LaurentPerron Я думаю, что ответ — это то, что вы имели в виду?

Ответ №1:

Отвечая на мой собственный вопрос:

 def counter_callback(from_index):
    """Returns 1 for any locations except depot."""
    # Convert from routing variable Index to user NodeIndex.
    from_node = manager.IndexToNode(from_index)
    return 1 if (from_node != 0) else 0;

counter_callback_index = routing.RegisterUnaryTransitCallback(counter_callback)

routing.AddDimensionWithVehicleCapacity(
    counter_callback_index,
    0,  # null slack
    [4,5,4,6],  # maximum locations per vehicle
    True,  # start cumul to zero
    'Counter')
 

Ответ №2:

Вы можете определить склады транспортных средств (начало и / или конец) непосредственно при инициализации:

 # Create the routing index manager.
self.manager = pywrapcp.RoutingIndexManager(len(locations), len(vehicles), start_depots, end_depots)
self.routing = pywrapcp.RoutingModel(self.manager)
 

start_depots и end_depots — это оба списка, размер транспортных средств. Одни и те же хранилища могут быть в обоих списках