You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OctaPy中建模带时间窗的时变车辆路径问题及相关约束

OctaPy建模带时间窗的多巡查VRP(道路交通执法场景)

针对你提出的三个建模疑问,以下是具体的实现思路:

1. 时变性行驶时长的建模

OctaPy中可以通过两种核心方式处理时段化的边权重:

  • 节点时段拆分法:将每个物理节点按时间区间拆分为多个逻辑节点,比如把停车场节点P拆分为P_0(0:00-6:00)、P_1(6:00-12:00)、P_2(12:00-18:00)、P_3(18:00-24:00)。不同时段的行驶边仅连接对应时段的逻辑节点,边的权重直接设为该时段的实际行驶时长。例如,从P_0到Q_0的边权重设为早高峰的行驶时间,P_1到Q_1设为平峰时间。
  • 时间驱动的权重回调:保留原物理节点,给每条边添加一个包含各时段时长的字典属性(如edge['time_costs'] = {0:10, 1:8, 2:12, 3:9},对应四个时段的分钟数)。在建模时,定义车辆的到达时间变量t_arrive,通过条件判断选择对应时段的权重计算路径成本,示例伪代码如下:
    # 假设edge是节点u到v的边,t_u是到达u的时间
    period = (t_u // 3600) // 6  # 按6小时划分时段
    travel_time = edge['time_costs'][period]
    

2. 需求点多次访问的建模

实现需求点被访问X次的需求,推荐两种直观方案:

  • 节点复制法:将每个需要重复访问的需求点复制X份,作为独立的虚拟节点(比如P_1、P_2...P_X),并将这些虚拟节点全部加入待访问节点集合。建模时约束所有虚拟节点必须被访问一次,本质上把多访问需求转化为多节点的单次访问需求,适配OctaPy原生的VRP约束逻辑。
  • 访问次数约束法:保留原节点,定义整数变量visit_count[v]表示节点v的访问次数,直接设置约束visit_count[v] = X。同时调整路径流约束,允许车辆多次进入/离开该节点(默认VRP约束通常限制单次访问,需修改为允许流的多次经过)。

3. 两次访问间隔的强制约束

结合上述多访问建模方案,可通过时间变量约束实现间隔要求:

  • 若采用节点复制法:为每个虚拟节点定义访问时间变量t[P_i],添加顺序约束保证后续访问的时间晚于前一次加固定间隔:
    for i in range(1, X):
        add_constraint(t[P_{i}] >= t[P_{i-1}] + 3600)  # 3600秒=1小时
    
    同时可约束虚拟节点的时间窗范围,确保所有访问落在24小时周期内。
  • 若采用访问次数约束法:为节点v定义X个时间戳变量t_v_1、t_v_2...t_v_X(分别对应第1到X次访问的时间),添加约束:
    for k in range(1, X):
        add_constraint(t_v_{k+1} >= t_v_{k} + 3600)
    
    并约束这些时间戳按递增顺序排列,且均在24小时的时间范围内。

内容的提问来源于stack exchange,提问作者kangsoon93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:10:35