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

Python带容量约束VRP:addVariableMinimizedFinalizer()最小化总距离用法

OR-Tools VRP中addVariableMinimizedFinalizer()使用指南

方法核心逻辑

很多人容易误解这个方法的入参要求——它不是让你传自己定义的Python普通变量,而是要传OR-Tools路由框架内部的求解变量句柄,作用是告诉求解器“我要把这个变量的值尽可能压到最小”。做带容量约束的VRP时,我们需要传入的变量,就是从距离维度里提取的、代表所有车辆路径总行驶距离的全局累计变量。

代码插入位置

需要把该方法的调用逻辑放在距离维度创建完成、成功获取distance_dimension实例之后,调用求解器执行求解之前,不能提前插到维度创建流程的前面,否则会触发维度不存在的报错。

具体代码实现

# 你已经写好的距离维度创建逻辑
dimension_name = 'Distance'
routing.AddDimension(
    transit_callback_index,
    0,
    3000,
    True,
    dimension_name)
distance_dimension = routing.GetDimensionOrDie(dimension_name)

# 新增的目标绑定逻辑
# 从距离维度获取全局总距离变量
total_distance_var = distance_dimension.GetGlobalCumulVar(
    routing.GetEndIndex(routing.Start(0))
)
# 注册为需要最小化的优化目标
routing.AddVariableMinimizedFinalizer(total_distance_var)

实现细节说明

  • 调用GetGlobalCumulVar()时,只需要传入任意一辆车的终点索引,框架会自动把所有车辆的路径累计距离做求和,绑定为全局总距离变量,完全不需要你手动遍历所有车辆做距离累加
  • 绑定完成后,求解器会自动把最小化全车队总距离作为优化目标,和你设置的容量约束、车辆最大行驶里程约束等规则互不冲突

常见踩坑提示

  • 不要把其他维度(比如容量维度)的变量传入这个方法,否则会出现优化目标和预期不匹配的问题
  • 这个方法的调用不需要在容量维度创建之后,只要距离维度已经初始化完成就可以调用,顺序没有强制要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 09:36:03