基于大语言模型的组合优化
摘要:组合优化(Combinatorial Optimization, CO)对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化,找到最优解变得极具挑战性。在处理现实世界的工程问题时,基于纯数学推理的算法存在局限性,无法捕捉到优化所需的上下文细微差别。本研究探索了大型语言模型(Large Language Models, LLMs)在解决工程组合优化问题中的潜力,利用其推理能力和上下文知识。我们提出了一种基于LLM的新框架,该框架结合了网络拓扑和领域知识,以优化设计结构矩阵(Design Structure Matrix, DSM)的排序——这是一个常见的组合优化问题。我们在多个DSM案例上的实验表明,所提出的方法比基准方法具有更快的收敛速度和更高的解质量。此外,结果表明,尽管LLM的选择不同,融入上下文领域知识显著提高了性能。这些发现凸显了LLMs通过结合语义和数学推理来解决复杂现实世界组合优化问题的潜力。这一方法为现实世界中的组合优化开辟了新的范式。
组合优化现行解决方案
传统上,工程中的组合优化问题通常通过以下过程来解决:首先将问题建模为数学模型,然后使用特定的算法或启发式方法进行求解,最后在实际工程背景下进行解释[4]。这种问题求解和解释阶段的分离存在局限性,无法捕捉到现实世界问题优化所需的上下文细微差别。
LLM决策理论支持
1、近年来,大型语言模型(Large Language Models, LLMs)在自然语言生成、语义理解、指令跟随(instruction following)和复杂推理方面展示了强大的能力
2、研究表明,LLMs可以用于连续和具体的优化问题[7, 8, 9]。例如,DeepMind的研究人员利用LLMs作为优化器,并在经典的组合优化问题(如旅行商问题,TSP)上评估了其有效性
3、融入上下文领域知识可以通过语义洞察支持数学推理,从而提升LLMs的性能。先前的研究还强调,LLMs通过预训练获得了广泛的工程相关领域的知识,这增强了它们在工程领域的适用性。
创新点
在此基础上,我们提出了一种基于LLM的新框架,将网络拓扑和领域上下文整合到优化过程中。该框架首先从整个解空间中随机采样一个初始解。每个解都会根据预定义的标准由评估器进行评估,评估器量化了解的质量。基于这一评估,框架通过少样本学习(few-shot learning)和生成新的候选解来迭代更新解库,整个过程由精心设计的提示(prompts)引导,这些提示包括数学形式的网络信息和自然语言描述的领域知识。新生成的解及其评估结果会被添加到解库中。当达到迭代次数时,解库会返回最佳解作为最终输出。接下来,我们以DSM排序这一常见的组合优化问题为例,说明该框架的工作流程。框架的示意图如图2所示。
1、Initialization and solution sampling。初始化过程涉及从整个解空间中随机采样生成一个初始解。在DSM排序任务中,一个解表示一个完整且不重复的节点序列(见图2)。这个初始解随后会被评估并添加到解库中以供后续使用。在后续的迭代中,我们设计了一个采样规则,该规则从解库中选择 Kp 个表现最优的解,并从剩余的 Kn - Kp 个解中随机采样 Kq 个解,形成一个解集,其中 Kn 是解库中解的总数。Kp 和 Kq 是可调整的参数。获得的解集会被进一步优化并转化为提示(prompts)。
解库(Solution Base) 是一个核心模块,其功能包括:
(1) 存储已探索的解及其评估结果,
(2) 为后端LLM提供历史解以进行少样本学习(few-shot learning),
(3) 在迭代结束时返回表现最优的解。
2、LLM-driven optimization using network information and domain knowledge。在优化过程的每次迭代中,我们向后端LLM提供以下信息:
- (i) 拓扑信息:这两个元素完成了DSM的数学描述。值得注意的是,描述网络的数学表示有多种等价形式,例如边列表(edge list)、根据节点序列的依赖关系列表或邻接矩阵。在本研究中,我们选择边列表作为网络拓扑的表示形式,并对所有边进行随机打乱以避免可能的偏差。
- (ii) 上下文领域知识:这包括每个节点的名称和网络的整体描述,这些信息将DSM数学结构背后的领域知识传递给LLM。例如,在活动DSM中,每个节点代表整个设计过程中的一个活动名称。
- (iii) 元指令:我们采用了一些常用的提示工程策略[20],包括角色扮演、任务规范和输出格式规范。这些策略使LLM能够根据指导进行推理,并以特定格式生成解。
- (iv) 选定的历史解:如上一节所述,我们通过从解库中采样获得最多 Kp + Kq 个解,供LLM在少样本学习中使用。
一旦接收到上述输入,后端LLM会结合网络拓扑信息和领域知识进行推理,并提出新的解。生成的解必须通过检查器(checker)的验证,检查器会确保序列中的所有节点都恰好出现一次。一旦验证通过,该解会被评估并添加到解库中。详细的输入提示(prompts)见附录1。
3、Evaluation of DSM sequencing solutions。评估器(evaluator)用于量化每个新生成的解。对于DSM排序任务,目标是通过重新排列DSM的行和列来最小化反馈循环。为了实现这一目标,评估器会计算对应序列中的反向依赖数量。
数值试验
以设计结构矩阵(Design Structure Matrix, DSM)排序任务为例,作为组合优化问题的一个实例。DSM是工程设计中的一种建模工具,用于表示系统中任务或组件之间的依赖关系[14]。重新排序DSM的节点序列可以显著减少反馈循环并提高模块化[15, 16]。DSM排序问题也是一个NP难问题,传统方法通常使用基于启发式的算法来解决[17, 18]。图1展示了一个设计活动DSM在排序前和排序后的对比[19]。在本文中,我们在多个DSM案例上进行了广泛的实验,以证明我们基于LLM的方法在收敛速度和解质量上优于基准方法。
相关文章:

基于大语言模型的组合优化
摘要:组合优化(Combinatorial Optimization, CO)对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化,找到最优解变得极具挑战性。在处理现实世界的工程问题时,基于纯数学推理的算法存在局限…...

#CSS混合模式:解决渐变背景下的文字可见性问题
在现代网页设计中,渐变背景的使用越来越普遍。然而,当我们在渐变背景上放置文字时,常常会遇到一个问题:文字在某些背景颜色下可能变得难以阅读。今天,我们将探讨一个优雅的解决方案:使用CSS混合模式。 问题…...

Vue2+OpenLayers给标点Feature添加信息窗体(提供Gitee源码)
目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、信息窗体DOM元素 3.2、创建Overlay 3.3、创建一个点 3.4、给点初始化点击事件 3.5、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 初始化变量: d…...

实战threeJS数字孪生开源 数字工厂
threeJS数字孪生 数字工厂 设备定位 基于three.js的数字工厂开源项目介绍 一、项目概述 本项目是一款基于three.js的数字工厂项目,旨在通过3D可视化技术,为工业制造领域提供一个直观、高效、智能的生产监控与管理平台。该项目结合了现代前端技术栈&…...

【Python基础篇】——第3篇:从入门到精通:掌握Python数据类型与数据结构
第3篇:数据类型与数据结构 目录 Python中的数据类型概述列表(List) 创建列表列表的基本操作列表方法列表推导式 元组(Tuple) 创建元组元组的基本操作元组的不可变性 字典(Dictionary) 创建字典…...

算法3(力扣83)-删除链表中的重复元素
1、题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 2、实现( 因为已排序,所以元素若重复,必然在其下一位)(这里为在vscod…...

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部
HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…...

.NET8.0多线程编码结合异步编码示例
1、创建一个.NET8.0控制台项目来演示多线程的应用 2、快速创建一个线程 3、多次运行程序,可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时,它们的具体执行顺序是不确定的,除非我们使用同步机制(如 lock、信号量等&am…...

SpringBoot项目中解决CORS跨域资源共享问题
在Spring Boot项目中解决CORS(跨域资源共享)问题,可以通过以下几种方法: 1. 使用CrossOrigin注解 这是最简单的方法,适用于单个控制器或控制器方法级别的跨域配置。你可以在控制器类或具体的方法上使用CrossOrigin注…...

Android string.xml中特殊字符转义
项目中要在string.xml 中显示特殊符号 空格: (普通的英文半角空格但不换行) 窄空格: (中文全角空格 (一个中文宽度)) (半个中文宽度,但两个空格比一个中文…...

解析传统Workflow、AI Workflow与AI Agent概念,并通过Coze案例探讨利用AI工作流构建应用的实践流程
传统工作流 工作流入门这篇就够了 BPMN.JS中文教程 BPMN 工作流引擎解析 定义:工作流是在计算机支持下业务流程的自动或半自动化,其通过对流程进行描述以及按一定规则执行以完成相应工作。 应用:随着计算机技术的发展以及工业生产、办公自动…...

光谱相机的光谱分辨率可以达到多少?
多光谱相机 多光谱相机的光谱分辨率相对较低,波段数一般在 10 到 20 个左右,光谱分辨率通常在几十纳米到几百纳米之间,如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…...

android Recyclerview viewholder统一封装
Recyclerview holder 统一封装 ViewHolder类 import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.os.Build import android.os.CountDownTimer import…...

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)
本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…...

51单片机入门基础
目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…...

老centos7 升级docker.io为docker-ce 脚本
旧的centos7 之前安装的是docker.io 由于一些原因,像docker compose 等版本变化,以及docker.io源受限等,我们要更新到docker-ce 并使用国内阿里云的源怎么处理?下面直接上脚本,upgrade-docker.sh #!/bin/bashset -e# 创建临时目录 TEMP_DIR"./tmp" mkdir -p "…...

数仓建模(三)建模三步走:需求分析、模型设计与数据加载
本文包含: 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览:需求分析、模型设计与数据加载 目录 第一部分:需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…...

PHP xml 常用函数整理
————————-DOM 函数————————————– 1、DOMDocument->load() 作用:加载xml文件 用法:DOMDocument->load( string filename ) 参数:filename,xml文件; 返回:如果成功则返回 TRUE&a…...

数据结构(Java版)第八期:LinkedList与链表(三)
专栏:数据结构(Java版) 个人主页:手握风云 目录 一、链表中的经典面试题 1.1. 链表分割 1.2. 链表的回文结构 1.3. 相交链表 1.4. 环形链表 一、链表中的经典面试题 1.1. 链表分割 题目中要求不能改变原来的数据顺序,也就是如上图所示。…...

数据结构学习记录-数据结构概念
1 数据结构: 数据结构是计算机存储,管理数据的方式。 数据必须依据某种逻辑联系组织在一起存储在计算机内 数据结构研究的就是这种数据的存储结构和数据的逻辑结构。 1.1 数据的逻辑结构: 逻辑结构指的是数据本身之间的关系 集合&#x…...

【Linux】11.Linux基础开发工具使用(4)
文章目录 3. Linux调试器-gdb使用3.1 背景3.2 下载安装3.3 使用gdb查询3.4 开始使用 3. Linux调试器-gdb使用 3.1 背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须…...

数据结构与算法之栈: LeetCode 1047. 删除字符串中的所有相邻重复项 (Ts版)
删除字符串中的所有相邻重复项 https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/ 描述 给出由小写字母组成的字符串 s,重复项删除操作会选择两个相邻且相同的字母,并删除它们在 s 上反复执行重复项删除操作,直到无…...

C++ 在线编译软件介绍、杭电OJ、北大OJ、力扣OJ
在线编译软件的话,可见下: https://www.jyshare.com/compile/12/ 杭州电子科技大学开发的一个免费的写代码地址 ,杭电OJ https://bestcoder.hdu.edu.cn/ 北大OJ http://poj.org/ 力扣OJ 力扣 (LeetCode) 全球极客挚爱的技术成长平台...

Java学习笔记(二十三)
1 CacheEvict CacheEvict是Spring框架中用于清空缓存的注解。以下是对CacheEvict注解的详细介绍: 1.1 作用 CacheEvict注解的主要作用是删除缓存中的数据。在方法执行后或执行前(根据配置),它可以清空指定的缓存项或整个缓存区…...

《AI赋能鸿蒙Next,开启智能关卡设计新时代》
在游戏开发领域,关卡设计是至关重要的一环,它直接影响着玩家的游戏体验和沉浸感。而随着人工智能技术的飞速发展,结合鸿蒙Next系统的强大功能,为游戏的智能关卡设计带来了全新的思路和方法。 利用AI学习玩家行为模式 在鸿蒙Next…...

js:正则表达式
目录 正则表达式的语法 定义 检测 检索 元字符 边界符 量词 字符类 表单判断案例 修饰符 过滤敏感词 正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本字符组合模式 正则表达式是一…...

linux环境使用docker部署多个war项目
如果你的需求是在一个服务器上部署多个Tomcat项目,并且每个项目需要独立运行,可以通过以下方式实现: 1. 使用不同的端口 每个Tomcat项目可以使用不同的端口号(如9090、9091、9092等),并通过Docker容器分别…...

【react】使用antd Table渲染数据遇到的报错问题
记录自己在开发过程中遇到的报错问题: 目录 原本写法:错误分析:解决方案: 原本写法: render: (text) > {console.log(text, "111111text");console.log(typeof text, "111111text");return t…...

JVM之垃圾回收器G1概述的详细解析
G1(并发) G1 特点 G1(Garbage-First)是一款面向服务端应用的垃圾收集器,应用于新生代和老年代、采用标记-整理算法、软实时、低延迟、可设定目标(最大 STW 停顿时间)的垃圾回收器,用于代替 CMS࿰…...

1.15寒假作业
web:nss靶场ez_ez_php 打开环境,理解代码 使用个体传参的方法,首先代码会检查file参数的前三个字符是不是php,如果是就输出nice,然后用include函数包含file,绕过不是则输出hacker,如果没有file…...