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

OR-Tools中使用SWEEP/BEST_INSERTION策略时如何定义扫掠编排器?

解决OR-Tools中SWEEP策略的"sweep arranger未定义"问题

这个错误的核心原因是:SWEEP(以及依赖它的BEST_INSERTION)策略需要一个扫掠排列器(sweep arranger)来确定节点的初始排序逻辑,而默认情况下OR-Tools不会自动为你的问题生成这个组件,必须手动定义并绑定。

下面是具体的解决步骤:

1. 确认问题适配性

SWEEP策略主要针对带地理位置坐标的车辆路径问题(VRP),因为它需要基于节点的坐标计算角度/距离来完成扫掠排序。如果你的问题还没有为节点添加坐标信息,第一步要先补充这部分数据。

2. 定义并绑定Sweep Arranger

假设你已经有了节点的坐标列表(索引对应节点ID),可以按以下步骤配置:

from ortools.constraint_solver import routing_enums_pb2
from ortools.constraint_solver import pywrapcp

# 示例:节点坐标列表,索引对应节点ID(比如0是仓库,1、2...是需求点)
location_coords = [(0, 0), (1, 3), (4, 2), (2, 5)]

# 初始化你的routing模型(这里省略模型创建的前置代码,比如添加车辆、成本矩阵等)
# routing = pywrapcp.RoutingModel(...)

# 创建Sweep Arranger实例
# 选择扫掠类型:POLAR_SWEEP(极坐标扫掠)是最常用的选项
sweep_arranger = pywrapcp.SweepArranger(
    routing,
    location_coords,
    routing_enums_pb2.SweepArrangerType.POLAR_SWEEP
)

# 将arranger绑定到routing模型
routing.SetSweepArranger(sweep_arranger)

# 配置搜索参数并求解
search_params = pywrapcp.RoutingModel.DefaultSearchParameters()
search_params.first_solution_strategy = routing_enums_pb2.FirstSolutionStrategy.SWEEP
# 可选:如果需要后续优化,可以添加局部搜索策略
search_params.local_search_metaheuristic = routing_enums_pb2.LocalSearchMetaheuristic.GUIDED_LOCAL_SEARCH

assignment = routing.SolveWithParameters(search_params)

3. 可选:调整扫掠参数

你可以根据问题场景自定义扫掠的行为:

  • 修改扫掠原点:默认以第一个节点为原点,你可以手动指定:
    sweep_arranger.SetOrigin(location_coords[0])  # 显式设置原点为节点0的坐标
    
  • 切换扫掠类型:除了POLAR_SWEEP,还有RADIAL_SWEEP(径向扫掠)等选项,可根据你的路径需求选择。

为什么会出现这个错误?

和PATH_CHEAPEST_ARC这类可以直接基于成本矩阵生成初始路径的策略不同,SWEEP策略依赖外部的空间排序逻辑来生成初始解——它需要先按坐标对节点进行扫掠排序,再基于这个排序构建路径。如果没有绑定sweep arranger,OR-Tools就不知道该如何完成这个排序步骤,因此抛出"Undefined sweep arranger"错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:25:28