ARS: Automatic Routing Solver with Large Language Models
https://github.com/Ahalikai/ARS-Routbench/
ARS:基于大语言模型的自动路由求解器
1. 概述
1.1. 研究背景
车辆路径问题(VRP)是一类经典的组合优化问题,广泛应用于物流、运输和医疗等领域。VRP的复杂性源于其多样化的约束条件(如车辆容量、时间窗、优先级等)以及问题规模的增长。传统方法通常依赖专家设计特定算法或使用通用求解器(如CPLEX、Gurobi),但这些方法需要深入的问题建模和手动算法设计,难以适应多样化的VRP变体。
大型语言模型(LLMs)因其强大的推理和代码生成能力,为自动化算法设计提供了新的可能性。然而,现有研究主要集中于标准VRP的少量变体,难以应对复杂VRP场景。
ARS框架旨在利用LLMs的自然语言处理和代码生成能力,自动生成针对不同VRP变体的约束感知启发式算法,从而提高求解的通用性和效率。
1.2. 贡献
- 提出ARS框架:是一种基于问题描述自动创建约束感知的启发式算法框架,增强了用于路径优化的主干启发式算法,提供了一个适应性框架,以解决用自然语言表达的多种路由问题。
- 构建RoutBench数据集:包含1000个VRP变体,涵盖24种约束类型,用于标准化的VRP求解器评估。
- 实验验证:ARS在RoutBench和其他基准数据集(如CVRPLib)上表现出色,优于其他基于LLM的方法和传统求解器。
2. 研究方法 ARS
2.1. ARS框架概述
ARS框架的目标是根据用户提供的自然语言问题描述和实例数据,自动生成针对VRP变体的约束检查和评分程序,并结合启发式搜索求解问题。框架结构如图1所示,包含以下组件:
- 输入:用户提供自然语言格式的问题描述(如“每条路径的总负载不得超过车辆容量,节点[7,8]不得在同一路径上”)和实例数据(如节点需求、距离矩阵、时间窗等)。
- 输出:一个启发式求解器,包含约束检查程序(验证解的合法性)和约束评分程序(量化约束违反程度),用于优化VRP解。
- 核心组件:
- 数据库:存储六种代表性约束类型(车辆容量、距离限制、时间窗、取送货、相同车辆、优先级)及其代码模板。
- 生成模块:根据输入利用LLM选择相关约束并生成代码。
- VRP求解器:基于生成的约束检查和评分程序,采用启发式搜索框架(包括破坏与修复和局部搜索)求解VRP。
工作流程分为三个主要步骤:约束选择、约束检查程序生成、约束评分程序生成,以及一个骨干启发式求解。
2.1.1. 约束选择(Constraint Selection)
- 目标:从用户输入的自然语言描述中识别与VRP变体相关的约束类型。
- 实现:
- 用户输入的自然语言问题描述 I I I(如:“每条路径的总负载不得超过车辆容量,节点[7,8]不得在同一路径上”)被送入LLM。
- LLM根据数据库 D D D 中存储的约束类型进行匹配,输出与输入最相关的约束类型 S S S。(这一过程类似于RAG,虽然作者没有明说)
- 如果没有匹配的约束,LLM返回“No Relevant Constraint”。
- 提示工程:分析用户输入,输出匹配的约束类型(明确要求LLM仅基于用户输入和数据库中的约束示例进行选择,不添加额外解释)。
- 提示词
For the description in the VRP problem, identify and provide the relevant constraint types from the following list: {constraint_description} According to the user input: {user_input} If no constraint types match the user input, respond with: "No Relevant Constraint". Do not give additional explanations.
- 结果示例:
According to the user input: The total load of each route must not exceed the vehicle capacity. Nodes [7, 8] must not be on the same route. First Call Output: 1. Constraint type: Vehicle Capacity Constraint 2. Constraint type: Same Vehicle Constraint
- 提示词
2.1.2. 约束检查程序(Checker)生成(Constraint Checking Program Generation)
- 目标:生成一个Python函数,用于检查VRP解是否满足用户描述 I I I指定的约束。
- 实现:
- 输入包括用户的问题描述 I I I、选定的约束类型 S S S及其代码模板(上一步从数据库中获取的)。
- 让LLM修改原有模板生成新约束 C_new,构成自定义检查函数。
- 提示工程:要求LLM严格遵循提供的函数模板和约束描述,生成简洁的代码。
- 提示词:
As a Python algorithm expert, please implement a function to check the constraints for the vehicle routing problem (VRP) based on the provided description and relevant code. User input: {user_input} Relevant Examples: {related_constraints_and_codes} Do not give additional explanations.
- 代码示例:
def check_constraints(solution: VrpState) -> bool: # Check vehicle capacity constraint for route in solution.routes: total_demand = sum(solution.problem_data["demand"][node] for node in route) if total_demand > solution.problem_data["capacity"]: return False # Check nodes [7, 8] not on same route constraint for route in solution.routes: if 7 in route and 8 in route: return False return True
- 提示词:
2.1.3. 约束评分程序(Scorer)生成(Constraint Scoring Program Generation)
- 目标:生成一个Python函数,用于量化VRP解违反约束的程度,便于启发式算法在搜索中做“软约束惩罚”,逐步朝向可行解收敛。
- 实现:
- 输入包括用户的问题描述 I I I、约束检查程序(从上一步生成)和约束描述。
- 用LLM生成一个约束评分函数(违约评分函数,分数越小越好)
- 评分程序通过基于约束检查结果分配定量分数,来评估约束条件被满足的程度。(支持软约束建模,使启发式搜索在早期探索阶段可以容忍部分违约解,并通过惩罚机制逐步逼近可行解)
- 提示工程:要求LLM基于约束检查代码生成评分逻辑,确保评分函数与检查函数一致。
- 提示词:
As a Python algorithm expert, please implement a function to calculate the constraint violation score for the Vehicle Routing Problem (VRP) based on the given constraints. Function Template: {function_template} Constraints Description: {constraints_description} Check Constraints Code: {related_constraints_and_codes} Do not give additional explanations.
- 代码示例:
def calculate_violation_score(solution: VrpState) -> float: violation_score = 0.0 # Check vehicle capacity constraint for route in solution.routes: total_demand = sum(solution.problem_data["demand"][node] for node in route) if total_demand > solution.problem_data["capacity "]: violation_score += (total_demand - solution.problem_data[" capacity"]) # Check nodes [7, 8] not on same route constraint for route in solution.routes: if 7 in route and 8 in route: violation_score += 1.0 return violation_score ...
- 提示词:
2.1.4. 约束感知启发式(CAH)生成(Constraint-Aware Heuristic Generation)
由前面的约束检查(Checker)和评分程序(Scorer)生成最终判断逻辑:约束感知启发式(CAH)
这个启发式逻辑允许从不可行区域逐步爬升到可行区域,并不断提升目标值(如路径总长度),该启发式评价逻辑也使得搜索过程具有‘目标函数-约束可行性’双重导向。
2.2. 启发式求解器(Augmented Heuristic Solver)
- 目标:利用生成的约束检查和评分程序,结合启发式搜索框架求解VRP。
- 实现:
- 搜索框架:采用基于单点搜索的骨干启发式框架,包含两个主要阶段:
- 破坏与修复(Destroy & Repair):
- 使用多种破坏算子(如随机移除、字符串移除)从当前解中移除部分客户或路径。
- 破坏算子的选择通过轮盘赌机制(Roulette Wheel Selection)实现,优先选择历史表现较好的算子。
- 修复阶段使用贪心策略将删除的客户重新插入解决方案,目标是路径更短且逐渐满足约束。
- 局部搜索(Local Search):
- 在破坏与修复后,进一步使用局部搜索(如2-opt)对解进行优化,调整节点顺序以减少路径成本。
- 2-opt算子通过移除两条非邻近边并重新连接,改变节点顺序以寻找更优解。
- 破坏与修复(Destroy & Repair):
- 约束感知:生成的约束检查和评分程序嵌入到搜索框架中,确保解满足约束或最小化违反程度。
- 搜索框架:采用基于单点搜索的骨干启发式框架,包含两个主要阶段:
3. RoutBench数据集构建
- RoutBench 的构建基于 6 类现实中常见且结构性强的约束类型(车辆容量C、距离限制L、时间窗TW、取送货PD、相同车辆S、优先级P),每类选取 4 个子变体,总共构成 24 个具体约束种类。
- 从中均匀采样 1000 组变体,组成 RoutBench 数据集。
数据子集名 | 条件 | 数量 | 用途 |
---|---|---|---|
RoutBench-S | ≤ 3 个约束 | 500 | 中等复杂度任务 |
RoutBench-H | ≥ 4 个约束 | 500 | 高复杂度测试集 |
- 所有实例由 Solomon C103 数据集生成基础坐标,并加入不同约束
- 每个实例包含三部分内容:
- 自然语言问题描述(problem description):如“每条路径的长度不能超过100,节点 [5,8] 需由同一车辆服务”等;
- 实例数据(instance data):包括节点位置、需求、时间窗、车队设置等;
- 验证代码(validation code):Python 函数格式,用于判定 LLM生成的代码是否满足所有约束。
4. 实验
4.1. 实验设置
模块 | 内容说明 |
---|---|
数据集 | RoutBench(1000个复杂VRP实例),Common Problems(48个经典变体) |
评测指标 | - SR (Success Rate):程序是否能正确完成建模与求解并通过验证 - RER (Runtime Error Rate):程序运行时报错的比例 |
对比方法 | 与 7种LLM-based baseline 方法 对比,包括: ① Standard Prompting ② CoT(Chain-of-Thought) ③ Reflexion ④ PHP(Progressive Hint Prompting) ⑤ CoE(Chain-of-Experts) ⑥ Self-debug ⑦ Self-verification |
主模型 | GPT-4o 为主要生成模型,其他实验也涉及 DeepSeek-V3、LLaMA-3.1-70B 等 |
环境 | Intel Xeon Gold 6248R处理器(3.0 GHz,128 GB内存,Windows 10) |
4.2. 结果分析
4.2.1. 主要结果
- 在常规VRP任务上(Common Problems),ARS 的成功率高达 91.67%,远超其他方法的 40%左右;
- 在复杂多约束场景(RoutBench-H)上,ARS 仍能保持近 50% 成功率,其他方法普遍不到 15%;
- 运行错误率RER也极低,表明 ARS 程序质量稳定。
4.2.2. 与求解器比较
- ARS 生成程序不仅可行,还能产生性能优异的解;
- 在运行效率上,时间显著优于CPLEX和Gurobi;
- 在复杂问题上甚至优于 OR-Tools
- ARS在常见问题上取得了最高的成功率(SR),并且与其他求解器相比,需要的代码行数(LOC)最少。因为ARS框架中,LLM只需要使用简单的Python语法编写约束代码,而其他求解器则受到其特定实现的限制,需要高度标准化的建模
4.2.3. 不同LLM模型的比较
- 解决VRP变体的成功率在不同的LLM之间有所不同
- DeepSeek-V3是这些LLM中处理VRP变体最有效的LLM
4.2.4. 消融实验
- 移除约束选择步骤会导致ARS的SR下降。没有这个步骤,ARS会获取所有六个代表约束,这些约束可能与当前的VRP无关,并可能误导LLM
- 移除数据库对ARS生成正确程序的性能影响更大。如果没有数据库来参考相关约束,LLM必须独立生成所有约束,对LLM提出了更高的要求
5. 总结
- 提出了一种利用 LLM 自动设计约束感知启发式算法的框架ARS,以增强启发式路由优化框架,用于具有复杂和实际约束的VRP变体。此外,我们
- 构造了RoutBench,这是一个由24个VRP约束衍生的1,000个VRP变体组成的综合基准。每个变体包括问题描述、实例数据和验证代码
- ARS的实验评估特别有前途,证明了其相对于现有基于LLM的方法和常用求解器的优越性能。
5.1. 局限性与未来工作
- 局限性:
- ARS依赖通用启发式框架,可能在某些特定VRP变体上不如专用算法高效。
- LLM生成的代码可能因模型能力或提示设计而存在误差。
- 未来工作:
- 优化提示设计以提高代码生成质量。
- 集成更先进的搜索算法(如分支定价)以提升求解效率。
- 扩展RoutBench以覆盖更多VRP变体。