Google OR-Tools:司机因服务时间规定而休息

问题描述 投票:0回答:1

每位司机(车辆)工作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)

但是,添加此代码片段后没有找到解决方案,而之前已有解决方案。有几个问题:

  1. node_visit_transit
    有什么用?从 Github 代码来看,它似乎考虑了某种形式的加载时间(基于加载需求),所以我在这里对其进行了加载/卸载时间的调整。
  2. 我使用
    FixedDurationIntervalVar
    正确吗?我希望司机在值班
    BREAK_DURATION
    小时后能有
    MAX_TIME_BETWEEN_BREAKS
    休息,无论开始时间如何。我担心这会迫使他们在绝对时间
    MAX_TIME_BETWEEN_BREAKS
    休息,即如果
    MAX_TIME_BETWEEN_BREAKS = 8
    那么他们都会在 08:00 休息。

似乎有人已经解决了这个问题here,但没有解决方案示例。

python or-tools
1个回答
0
投票

我找到了 C++ 示例代码,并将其转换为 Python,如本博客中所写。 https://medium.com/me/stats/post/480d74c82dfc 不确定这个回复对你来说是否太晚了。

© www.soinside.com 2019 - 2024. All rights reserved.