ограничение длины сдвига в задаче OR-TOOLS RL VRPTW?

Я пытаюсь установить ограничение длины сдвига в OR-TOOLS RL VRPTW. Продолжительность смены - это общее время, в течение которого транспортное средство находилось в эксплуатации (транзит + ожидание + обслуживание), от прибытия в первое место до выезда из последнего места.

Похоже, что Time dimension - идеальный выбор, но он накапливает начало окна первого местоположения, что нехорошо.

Итак, чтобы повторить итерацию - мне нужно измерение, которое накапливает время прохождения, время обслуживания и время ожидания (для временного окна в каждом месте), но я НЕ хочу, чтобы он накапливал время начала окна первого местоположения в маршруте (поскольку именно здесь начинается смена этого драйвера. Если драйвер запускается на узле i и заканчивается на узле j, я бы хотел, чтобы ограничение было: time_dimension.CumulVar(j) - time_dimension.CumulVar(i) < shift_length

Есть ли какой-нибудь очевидный трюк с моделированием, который мне не хватает?


person ihadanny    schedule 05.06.2019    source источник
comment
ой. есть функция, которая делает именно это. SetSpanUpperBoundForVehicle, RTFM.   -  person ihadanny    schedule 06.06.2019
comment
Если вы нашли решение, вы можете опубликовать его как ответ, чтобы другим было легче его увидеть. Комментарии могут быть удалены в любой момент по любой причине, ответы имеют историю изменений.   -  person Secespitus    schedule 10.09.2019


Ответы (1)


Спасибо @ihadanny за ответ. Чтобы дать более конкретную помощь другим, я публикую этот ответ: Чтобы установить максимальную длину маршрута для транспортного средства, например, 600 вы можете:

for vehicle_id in range(data['num_vehicles']):
        time_dimension.SetSpanUpperBoundForVehicle(600, vehicle_id) 
person Peter Dieter    schedule 17.05.2020