Код: Выделить всё
# Add breaks
node_visit_transit = {}
for n in range(routing.Size()):
if n >= len(data['node_name']):
node_visit_transit[n] = 0
else:
if n in data['pickups']:
node_visit_transit[n] = int(data['load_time'][n])
else:
node_visit_transit[n] = int(data['unload_time'][n])
break_intervals = {}
for v in range(data['num_vehicles']):
break_intervals[v] = [
routing.solver().FixedDurationIntervalVar(
MAX_TIME_BETWEEN_BREAKS, MAX_TIME_BETWEEN_BREAKS, BREAK_DURATION, False, 'Break for vehicle {}'.format(v))
]
time_dimension.SetBreakIntervalsOfVehicle(
break_intervals[v], v, node_visit_transit)
- Для чего используется node_visit_transit? Судя по коду Github, он учитывает некоторую форму времени загрузки (в зависимости от потребности загрузки), поэтому я адаптировал его для времени загрузки/выгрузки здесь.
- Использую ли я FixDurationIntervalVar правильно? Я бы хотел, чтобы у водителей был перерыв BREAK_DURATION после того, как они проработали на дежурстве MAX_TIME_BETWEEN_BREAKS часов, независимо от времени начала. Меня беспокоит, что это вынуждает их делать перерыв в абсолютное время MAX_TIME_BETWEEN_BREAKS, т. е. если MAX_TIME_BETWEEN_BREAKS = 8, то все они делают перерыв в 08:00.
Подробнее здесь: https://stackoverflow.com/questions/638 ... egulations