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. 贡献

  1. 提出ARS框架:是一种基于问题描述自动创建约束感知的启发式算法框架,增强了用于路径优化的主干启发式算法,提供了一个适应性框架,以解决用自然语言表达的多种路由问题。
  2. 构建RoutBench数据集:包含1000个VRP变体,涵盖24种约束类型,用于标准化的VRP求解器评估。
  3. 实验验证:ARS在RoutBench和其他基准数据集(如CVRPLib)上表现出色,优于其他基于LLM的方法和传统求解器。

2. 研究方法 ARS

在这里插入图片描述

2.1. ARS框架概述

ARS框架的目标是根据用户提供的自然语言问题描述和实例数据,自动生成针对VRP变体的约束检查和评分程序,并结合启发式搜索求解问题。框架结构如图1所示,包含以下组件:

  • 输入:用户提供自然语言格式的问题描述(如“每条路径的总负载不得超过车辆容量,节点[7,8]不得在同一路径上”)和实例数据(如节点需求、距离矩阵、时间窗等)。
  • 输出:一个启发式求解器,包含约束检查程序(验证解的合法性)和约束评分程序(量化约束违反程度),用于优化VRP解。
  • 核心组件
    • 数据库:存储六种代表性约束类型(车辆容量、距离限制、时间窗、取送货、相同车辆、优先级)及其代码模板。
    • 生成模块:根据输入利用LLM选择相关约束并生成代码。
    • VRP求解器:基于生成的约束检查和评分程序,采用启发式搜索框架(包括破坏与修复和局部搜索)求解VRP。

工作流程分为三个主要步骤:约束选择、约束检查程序生成、约束评分程序生成,以及一个骨干启发式求解。

2.1.1. 约束选择(Constraint Selection)
  • 目标:从用户输入的自然语言描述中识别与VRP变体相关的约束类型。
  • 实现
    • 用户输入的自然语言问题描述 III(如:“每条路径的总负载不得超过车辆容量,节点[7,8]不得在同一路径上”)被送入LLM。
    • LLM根据数据库 DDD 中存储的约束类型进行匹配,输出与输入最相关的约束类型 SSS。(这一过程类似于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解是否满足用户描述III指定的约束。
  • 实现
    • 输入包括用户的问题描述 III、选定的约束类型SSS及其代码模板(上一步从数据库中获取的)。
    • 让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 constraintfor 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 constraintfor route in solution.routes:if 7 in route and 8 in route:return Falsereturn True
      
2.1.3. 约束评分程序(Scorer)生成(Constraint Scoring Program Generation)
  • 目标:生成一个Python函数,用于量化VRP解违反约束的程度,便于启发式算法在搜索中做“软约束惩罚”,逐步朝向可行解收敛。
  • 实现
    • 输入包括用户的问题描述III、约束检查程序(从上一步生成)和约束描述。
    • 用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。
  • 实现
    • 搜索框架:采用基于单点搜索的骨干启发式框架,包含两个主要阶段:
      1. 破坏与修复(Destroy & Repair)
        • 使用多种破坏算子(如随机移除、字符串移除)从当前解中移除部分客户或路径。
        • 破坏算子的选择通过轮盘赌机制(Roulette Wheel Selection)实现,优先选择历史表现较好的算子。
        • 修复阶段使用贪心策略将删除的客户重新插入解决方案,目标是路径更短且逐渐满足约束。
      2. 局部搜索(Local Search)
        • 在破坏与修复后,进一步使用局部搜索(如2-opt)对解进行优化,调整节点顺序以减少路径成本。
        • 2-opt算子通过移除两条非邻近边并重新连接,改变节点顺序以寻找更优解。
    • 约束感知:生成的约束检查和评分程序嵌入到搜索框架中,确保解满足约束或最小化违反程度。

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变体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90181.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90181.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90181.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568笔记九十:基于web显示RTSP流

若该文为原创文章,转载请注明原文出处。 在网上看到个方案,使用web显示RTSP视频流,思路是前端传入RTSP地址,cgi通过FFMPEG接收RTSP流并保存成avi文件,在通过ffmpeg 命令把avi文件保存成mp4文件,前端在播放mp4文件。此方案需要先保存文件,在转换文件,无法实时播放。 所以…

2025年Flutter开发主流技术栈

2025年Flutter开发主流技术栈 Flutter作为一种高效、跨平台的移动应用开发框架,近年来在开发者社区中越来越受欢迎。以下是2025年Flutter开发的主流技术栈,涵盖了从核心框架到开发工具、状态管理、数据存储等多个方面。 1. 核心框架 Flutter:…

Qt 常用控件 - 1

控件概述 编程讲究的是 --- 站在巨人的肩膀上 --- 不是编写一个图形化界面上的内容 --- Qt 已经提供了很多控件了!!!提高图形化界面的开发效率!!!重点变成我们怎么使用这些已有的控件! Widge…

springdoc-openapi-ui的使用教程

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency>springdoc-openapi-ui 是一个用于生成 OpenAPI 文档的库&#xff0c;它与 Swagger 的关…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-3,(运放/三极管)

目录 1、题目 2、解答 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题-3&#xff0c;&#xff08;运放/三极管&#xff09; 这是一道大疆的笔试题 1、题目 2、解答

SQL Server 数据类型的含义、特点及常见使用场景的详细说明

数值类型 bigint 含义:用于存储大范围的整数,是 8 字节(64 位)有符号整数类型。 范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 。 场景:适合存储像订单编号(可能很大)、系统中需要大范围计数的标识等,比如大型系统中大量数据的主键自增列(数据量极…

WPF的一些基础知识学习记录

路由事件 路由事件(Routed Event)是WPF事件系统的核心&#xff0c;它允许事件在元素树中传播&#xff0c;而不仅仅局限于引发事件的对象。包含以下三类&#xff1a;类型方向触发顺序典型用途示例事件​​直接事件(Direct Event)​​不路由只在源元素触发类似传统.NET事件MouseE…

【补题】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two

题意&#xff1a;给一个树&#xff0c;可以从里面删去两个点&#xff0c;使连通块数量最大 思路&#xff1a;题解&#xff1a;CF2063C Remove Exactly Two - 洛谷专栏 这道题很容易想到&#xff0c;直接删去度最多的两个点就行了&#xff0c;但是这并不对&#xff0c;因为相邻…

基于php的校园招聘平台

学生&#xff1a;注册&#xff0c;登录&#xff0c;个人中心&#xff0c;学生应聘管理&#xff0c;面试邀请管理企业&#xff1a;登录&#xff0c;个人中心&#xff0c;招聘信息管理&#xff0c;学生应聘管理&#xff0c;面试邀请管理管理员&#xff1a;登录&#xff0c;个人中…

在 Ubuntu 22.04 上运行 cAdvisor 时遇到 mountpoint for cpu not found 错误

通常是由于 cgroup v2 导致的兼容性问题。Ubuntu 22.04 默认使用 cgroup v2&#xff0c;而旧版本的 cAdvisor 可能不完全支持它。以下是解决方案&#xff1a;方法 1&#xff1a;启用 cgroup v1&#xff08;推荐&#xff09;临时切换回 cgroup v1&#xff08;cAdvisor 兼容性更好…

如何让RAGFLow每次知识检索都是返回知识库中的所有文档?

在使用raglfow过程中,有时候输入的文本检索为空,要么就是只返回几条.如果想要看到所有知识库里文本返回,就得需要去到源码里修改这个参数minimum_should_match(路径:rag/utils/es_conn.py),将其设置为0%,即可返回所有文本!!

「iOS」——KVO

源码学习iOS底层学习&#xff1a;KVO 底层原理KVO注册 KVO 监听 实现 KVO 监听 移除 KVO 监听 处理变更通知 手动KVO(禁用KVO)关闭自动通知手动实现 setter 方法KVO 和线程如果 KVO 是多线程的**单线程的保证**如果没有 prior 选项**prior 选项的作用**KVO 实现原理派生类重写的…

Unreal5从入门到精通之使用 Python 编写虚幻编辑器脚本

文章目录 前言 如何运行Python 1.控制台 2.蓝图调用python python 入门 变量 数据类型 运算符 条件判断 循环 函数 模块引用 类型转换 类 类方法 继承 构造函数 unreal API 创建材质 创建材质实例 获取Content下选中资源 获取关卡中选中Actors 放置Cube 编辑器进度条 展示对话框…

Django3 - Web前端开发基础 HTML、CSS和JavaScript

网站开发可以分为前端开发和后端开发&#xff0c;前端开发是指网页设计&#xff0c;我们在浏览器看到网站的图片、文字、音乐视频等内容排版都是由前端开发人员实现的&#xff1b;后端开发是为前端开发提供实际的数据内容和业务逻辑&#xff0c;比如提供文字内容、图片和音乐视…

Nginx和Apache的区别

一。Nginx和Apache的优缺点和对比Nginx 优点Apache 优点性能与并发采用事件驱动模型&#xff0c;支持 10 万 高并发连接&#xff0c;资源&#xff08;CPU / 内存&#xff09;占用极低生态成熟&#xff0c;内置模块可直接处理动态内容&#xff0c;无需依赖第三方程序配置与部署…

前端实现可编辑脑图的方案

前端实现可编辑脑图的方案 实现可编辑脑图(Mind Map)在前端有多种方案&#xff0c;以下是一些主流的技术方案&#xff1a; 1. 基于现有开源库的方案 JavaScript 库 MindElixir: 轻量级开源脑图库&#xff0c;支持节点增删改、拖拽、导入导出等 GitHub: https://github.com/sssh…

7-大语言模型—指令理解:指令微调训练+模型微调

目录 1、指令微调的训练过程 2、指令微调数据 2.1、“指令输入” 2.2、“答案输出” 3、指令微调数据的构建方法 3.1、手动构建&#xff1a;纯人工 “出题 写答案” 3.1.1、构建流程 3.1.1.1、定义任务类型 3.1.1.2、设计指令模板 3.1.1.3、人工标注响应 3.1.2、工…

服务器版本信息泄露-iis返回包暴露服务器版本信息

漏洞信息描述&#xff1a;服务器版本信息泄露 测试过程&#xff1a;访问http://192.168.23.63&#xff0c;看返回包可以得知服务器版本信息 显示暴露返回server版本信息 修复建议&#xff1a;限制返回包带有服务器版本信息 如何隐藏IIS Web服务响应头中的IIS Server版本信息…

rust嵌入式开发零基础入门教程(二)

本教程的第二部分&#xff0c;我们将深入理解 Rust 语言的核心概念——所有权&#xff08;Ownership&#xff09;、借用&#xff08;Borrowing&#xff09;和生命周期&#xff08;Lifetimes&#xff09;。这些是 Rust 内存安全的基础&#xff0c;也是初学者理解 Rust 最关键的部…

【黑产大数据】2025年上半年互联网黑灰产趋势年度总结

2025年上半年&#xff0c;互联网黑灰产攻击持续演化&#xff0c;呈现出更隐蔽、更智能、更产业化的趋势。黑灰产从业人员数量继续增长&#xff0c;攻击资源、技术与作案场景全面升级。整体来看&#xff0c;2025年上半年黑灰产行业发生的几大事件&#xff0c;也时刻印证了黑灰产…