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

Google OR Tools VRPTW设置非0起始时间窗口触发底层错误如何解决?

错误触发原因
  • 核心原因1:时间维度初始化的horizon参数配置过小。调用routing.AddDimension()创建时间维度时,最后一个参数为整个调度任务允许的全局最大时间值,官方默认示例适配单日场景设置为1440,你的3天场景最大时间为4320,超出1440的时间范围设置会触发CumulVar值域越界错误。
  • 核心原因2:时间维度初始化的fix_start_cumul_to_zero参数设置为true。该参数会强制所有车辆的起始时间累计值固定为0,你设置的非0起始时间窗口与该强制规则冲突,直接触发SetRange报错,这也是你全量设置1440-2880窗口时立即报错的主要原因。
  • 次要原因:起止节点的全局时间窗口未同步更新。如果你给每日车辆对应的A/B起止点位配置的全局TimeWindows仍为0-1440,车辆起始窗口与节点本身的时间窗口冲突也会导致报错。
解决方案
  1. 调整时间维度的全局时间上限参数
    将创建时间维度的代码中,最后一位horizon参数修改为你场景的最大时间值4320,示例修改如下:
// 原代码(示例)
routing.AddDimension(timeEvaluator, 30, 1440, true, "Time");
// 修改后
routing.AddDimension(timeEvaluator, 30, 4320, false, "Time");
  1. 关闭强制起始时间为0的配置
    如上代码所示,将第四个参数fix_start_cumul_to_zero从true改为false,允许不同车辆设置不同的起始时间范围。
  2. 同步更新起止节点的时间窗口
    在全局data.TimeWindows数组中,给对应日期的A/B起止点位配置和车辆起始窗口一致的时间范围:
  • Day1对应A/B点位:[0, 1440]
  • Day2对应A/B点位:[1440, 2880]
  • Day3对应A/B点位:[2880, 4320]

修改完成后你原本编写的车辆起始时间窗口设置代码即可正常运行。

内容的提问来源于stack exchange,提问作者Jeff - Software Results

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 14:06:03