每位司机(车辆)工作8小时后需要休息30分钟。参考上一期,这是我的代码:
# 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 代码来看,它似乎考虑了某种形式的加载时间(基于加载需求),所以我在这里对其进行了加载/卸载时间的调整。FixedDurationIntervalVar
正确吗?我希望司机在值班 BREAK_DURATION
小时后能有 MAX_TIME_BETWEEN_BREAKS
休息,无论开始时间如何。我担心这会迫使他们在绝对时间 MAX_TIME_BETWEEN_BREAKS
休息,即如果 MAX_TIME_BETWEEN_BREAKS = 8
那么他们都会在 08:00 休息。似乎有人已经解决了这个问题here,但没有解决方案示例。
我找到了 C++ 示例代码,并将其转换为 Python,如本博客中所写。 https://medium.com/me/stats/post/480d74c82dfc 不确定这个回复对你来说是否太晚了。