CHAIN-OF-EXPERTS: WHEN LLMS MEET COMPLEX OPERATIONS RESEARCH PROBLEMS
题目
专家链:当LLMS遇到复杂的运筹学问题时
论文地址:https://openreview.net/forum?id=HobyL1B9CZ
项目地址:https://github.com/xzymustbexzy/Chain-of-Experts
摘要
大型语言模型(LLM)已经成为各种NLP任务的强大技术,例如数学推理和计划生成。在本文中,我们研究复杂运筹学问题的自动建模和编程,以减轻对领域专家的严重依赖,并使一系列工业部门受益。我们提出了第一个基于LLM的解决方案,即专家链(CoE),这是一个新颖的多智能体协作框架,用于增强推理能力。具体来说,每个代理都被分配一个特定的角色,并被赋予与OR相关的领域知识。我们还引入了一个指挥者,通过向前的思想构建和向后的反射机制来协调这些代理。此外,我们建立了一个复杂或问题的基准数据集(ComplexOR ),以促进或研究和社区发展。实验结果表明,CoE在LPWP和ComplexOR上都明显优于基于LLM的方法。
简介
运筹学(OR)的目标是用数学方法建立复杂决策问题的模型,这些问题产生于广泛的工业领域。为了使过程自动化并减少对特定领域建模专家的依赖,NL4Opt(优化的自然语言)(Ramamonjison等人,2022a)最近成为一项有吸引力但具有挑战性的NLP任务。它的目标是将OR问题的文本描述翻译成数学公式,供优化求解者使用。
为了便于理解这个任务,图1给出了当前NL4Opt基准数据集的一个例子。流行的NL4Opt模型采用两阶段框架。最初,他们执行NER以从输入文本中识别变量、参数和约束,这些随后被转换成数学优化模型。尽管这些方法在基本问题上有效,但在处理复杂的现实世界挑战时却失败了。
本文研究了现实工业需求中复杂问题的自动建模和编程。如图1所示,它们的文本描述通常包含隐式约束,这对现有的NL4Opt求解器提出了实质性的解释挑战。例如,用绿色突出显示的短语“零提前期”表示生产订单之间没有任何时间延迟。此外,必须具备特定领域的知识,以理解诸如“积压”、“结转”和“批量”等术语。最后,与简单示例中的显式输入数字相反,复杂或问题展示了大量的隐式变量,需要领域建模专家的规范。在这些复杂的问题中,大量的变量和约束带来了巨大的障碍,并导致了更长的推理链。
图1:初等和复杂NL4Opt问题的比较。在复杂或示例中,绿色短语表示隐含的约束,特定于领域的术语用黄色突出显示。模型输出见附录A.1。
为了解决上述问题,我们利用LLM的能力,提出了第一个基于LLM的解决方案。我们提出了一个多智能体推理框架,即专家链(CoE ),以协调多个LLM智能体来解决复杂问题。在协作努力的掌舵下,有一个中心实体,被指定为“指挥”,负责编排代理之间的交互序列。每个代理都被分配了一个特定的角色,并配备了特定领域的专业知识。我们实现了具有不同技能的多样化代理,包括但不限于术语解释器、数学模型的构建和编程。此外,我们引入了向后反射机制。通过对结果的系统分析,该框架有能力发现解决问题过程中的潜在错误。
与其他基于LLM的推理的比较。近年来,大量的研究致力于增强大型语言模型(LLM)的推理能力。值得注意的例子包括思维链(魏等,2022)、自我一致性(王等,2023a)、思维树(姚等,2023a)、思维图(Besta等,2023)、递进提示(郑等,2023)、反应(姚等,2023b)。这些作品为思维转换制定了明确的提示方案和途径。下一节将进一步阐述这些方法。不幸的是,这些单智能体LLM以及多智能体方案(如单人表演提示(Wang et al,2023b))在面对复杂OR问题时表现出明显的局限性,因为它们不能同时处理隐式约束、外部知识先决条件和长推理链的挑战。在我们的CoE中,我们通过多专家协作来解决这些挑战,实验结果表明CoE可以显著优于基于LLM的方法。
- 我们在更具挑战性的层次上研究NL4Opt,这要求模型具有隐式约束发现、领域特定知识和复杂推理能力。
- 这是第一个基于LLM的复杂或问题的解决方案。
- 提出了一种新的多智能体框架,称为专家链(CoE ),基于前向思维构建和后向反射机制实现协同问题求解和迭代建模优化。
- 我们还建立了一个新的数据集(ComplexOR ),在其上的实验结果证实了CoE比其他8个基于LLM的推理基线具有更好的性能。
相关工作
NL4Opt问题。NL4Opt旨在将问题的描述转化为数学公式。Ramamonjison等人(2022a)策划了基准数据集1。弥合差距在自然语言输入p和上下文无关公式r之间,他们提出了一个两阶段映射p → r → f,首先采用具有复制机制的BART-base模型(Lewis等人,2020)来生成中间表示r,然后将其解析为规范公式。
基于编辑的模型(Malmi等人,2022年)可作为误差校正的后处理步骤。随后的研究遵循了两阶段框架。何等人(2022)介绍了一种集成文本生成器,利用多任务学习技术来提高生成公式的质量。类似地,Ning等人(2023)提出了一个提示引导的生成框架,辅以基于规则的预处理和后处理技术,以提高准确性。在一项相关的研究中,Prasath & Karande (2023)调查了数学程序的合成。GPT-3和反向翻译被用来合成标准形式以及Python代码。
基于LLMs的推理。语言模型在解决特定领域的复杂推理任务方面显示出巨大的潜力,如TSP(张等,2023)、数据库(周宣和,2023)和知识系统(朱等,2023)。思维链(CoT)(魏等,2022)将复杂的推理任务分解为一系列中间推理步骤。自我一致性(Wang等,2023a)通过对一组不同的推理路径进行采样并选择最一致的答案,取代了CoT中的贪婪解码。思维树(ToT)(姚等,2023a)和思维图(GoT) (Besta等,2023)通过允许逻辑思维模型以结构化的方式探索和组合思维,进一步增强了推理能力。渐进式提示(PHP)(郑等,2023)通过利用先前生成的答案作为提示来逐步完善答案。随后的工作,如ReAct (Yao等人,2023年b)和Reflexion (Shinn等人,2023年),使LLM能够与外部来源的附加信息或反馈进行交互。最近,还探索了多个代理之间的合作。CAMEL(李等,2023)提出了一个新颖的用于自主协作的通信代理框架。单人表演提示(SPP) (Wang et al,2023b)通过模拟多个角色将单个LLM转化为认知协同器,并展示了多智能体系统潜在的问题解决能力。
建议的方法
专家设计
在我们的推理框架中,“专家”指的是基于大型语言模型(LLM)的专门代理,该语言模型用特定领域的知识和推理技能来增强。每个专家被分配一个特定的角色,并经历四个步骤:
- 第一步:在环境中学习。每个代理都可以访问外部知识库,并根据知识库执行top-k检索。然后将检索到的信息提供给LLM,以便于上下文学习。例如,负责生成Gurobi程序的专家可以访问Gurobi官方API文档。这一步是可选的,取决于知识库的可用性。
- 第二步:推理。基于LLM的专家利用现有的提示技术,如思维链或自我一致性,根据他们的特定角色执行推理任务。我们的推理过程由前瞻思维和反思模式组成,其细节将在下一节介绍。
- 第三步:总结。由于在与LLM的单次交互中的令牌限制约束,专家可以选择总结他们的推理输出。由于该步骤可能导致大量信息丢失,因此对于某些专家(例如,建模专家)来说,该步骤是可选的。
- 第四步:评论。这一步骤受个人表演提示的启发(王等,2023b),其中允许参与者给出批评性的评论和详细的建议。目标是使代理之间的交流更有建设性。
专家链的工作流程
我们提出的专家链(CoE)的框架如图2所示。我们初始化了11个专家的集合,例如术语解释器、建模专家、编程专家和代码审查专家。附录A.2.1中提供了详细的设计规范。
图2:说明专家链工作流程的例子。在这个例子中,指挥收到输入问题,并开始协调专家。范例工作流包括输入问题的➀:术语解释;➁:问题建模;➂:程序生成;➃:评估正确性并确定问题;➄:反思程序,确认正确性;➅:反思建模,发现错误;➆:再次进行程序生成;➇:最终评估,确认正确性。
有一个指挥来有效地协调这些专家。它反复地、动态地选择一个专家来构建一个前瞻性的思维链。正向推理链生成的候选答案将被传递到外部程序执行环境,其反馈信号触发反向反射过程。这两个关键组成部分的细节阐述如下:前瞻性思想建设。在前瞻性构建阶段,专家由指挥按顺序选择。我们可以将前瞻性思维构建表述为一个连续的决策过程,其中我们将专家集合视为行动空间。我们把输入的问题描述定义为p,一组预定义的专家为ϵ = {Eϕ1,Eϕ2,…,Eϕn },其中n是专家总数,ϕi代表第I个专家的配置。每个专家都与可选的知识库和提示模板相关联。我们将第t个推理步骤的注释集表示为Ct,并在等式1中定义状态。
与需要大量训练数据的传统强化学习不同,我们通过利用大型语言模型的提示技术来利用免训练方法。这使得我们无需任何培训就能实现与决策代理相同的功能。因此,我们在等式2中对指挥者的策略进行建模,其中指挥者充当选择专家的策略函数,F表示大型语言模型,θ’表示LLM的参数,PTt表示第t步的提示模板。
基于上述公式,专家选择策略可以转化为提示模板PTt的设计,这需要提示工程来实现最优策略。提示模板的详细设计在附录A.2.2中给出,设计完Conductor后,我们可以如下更新每个推理步骤中的注释集。
其中,Eϕit表示在步骤t中所选择的第I位专家,c表示所选择的专家的评论。我们将前面的注释Ct和c连接起来,得到Ct+1作为新的状态。在固定数量的步骤T之后,专家链框架中的前进过程终止。至此,所有评论汇总形成最终答案a。
向后反射。专家链中的反向反射机制使系统能够利用外部反馈,并根据解决问题结果的评估。我们来定义一下按顺序选出的专家的轨迹为τ = {Eϕi1,Eϕi2,…EϕiT },其中它表示在步骤t选择的专家的索引。后向反射过程从外部反馈rraw开始,这通常由程序执行环境提供。这个过程可以表示为rraw ← execution(A)。然后,从原始外部反馈的评估中导出初始信号:(r0,sr0) ← evaluate(rraw),其中r0是指示向后过程是否需要继续的布尔值,sr0表示反馈的自然语言摘要,用于在向后反射过程中定位错误。如果答案A被认为是正确的,r0被设置为假,并且整个推理过程终止。否则,专家链启动反向自我反思过程来更新答案。该过程从最后一个专家EϕiT开始,并以相反的顺序反向传播,以迭代地更新反馈信号。在第t个向后步骤,状态的更新由等式6和7描述,其中反射表示专家设计中的推理能力之一。reflect函数还产生一个rt和srt的元组,它与evaluate函数的输出一致。在这种情况下,当专家确认其先前评论的正确性时,rt被设置为true。
反向反射过程继续进行,直到反馈信号rt指示专家EϕiT−t+1是出错的那个人,或者直到所有专家都被反射。随后,将再次执行前进过程。值得注意的是,我们的反射方法不同于Reflexion (Shinn等人,2023年),在Reflexion中,反射是在系统级别上通过多个专家之间的交互来执行的,反馈是递归反向传播的。相比之下,反射只涉及单个LLM。
实现细节
算法1提供了专家链框架的实现伪代码,它由四个主要阶段组成:初始化(第1 - 2行):该过程从初始化注释集c开始,此外,使用堆栈S来存储所选择的专家,确保了前向思想构建和后向反思的先入后出顺序。正向思想构建(第4 - 9行):指挥按顺序选择专家,每个专家将他们的意见贡献给全局意见集c。正向构建过程持续固定数量的步骤n。如第10行所示,一旦完成正向构建,就使用缩减器来总结所有意见并生成最终答案。由于注释集在正向构造后包含了大量的注释,所以Reducer在总结和协调这些注释中起着至关重要的作用。更详细的减速器提示模板设计请参考附录A.2.3
向后反射(第11 - 20行):在第11行中,一旦获得解决方案,评估者收集反馈并将其转换为自然语言反馈以评估其正确性。如果解决方案被认为是不正确的,则系统进入反思阶段。在这个阶段,通过从堆栈中删除专家,以相反的顺序反复咨询专家。系统会提示他们思考自己的解决方案,并在必要时提供其他意见。如第16行所示,反向过程继续进行,直到通过自我反思发现错误或者到达第一个专家。
迭代改进(第3行中的循环):向前思考构建和向后反思的步骤被迭代重复,直到获得满意的解决方案或达到最大尝试次数T。
实验
数据集LPWP
LPWP数据集(Ramamonjison等人,2022b)是从NuerIPS 2022的NL4Opt竞赛中收集的。它包括1101个初级线性规划(LP)问题。每个问题由一个带有IR注释的文本描述组成,包括参数、变量、线性约束和目标函数。数据集分为713个训练样本、99个验证样本和289个测试样本,用于性能评估。
络合剂。在三位运筹学专家的帮助下,我们构建并发布了第一个复杂or问题数据集。我们从不同的来源选择了37个问题,包括学术论文、教科书和现实世界的行业场景。这些问题涵盖了广泛的主题,从供应链优化和调度问题到仓储物流。专家们花了近一个月的时间用模型公式注释每个问题,并至少用五个测试用例来验证生成代码的正确性。
模型设置和性能指标
在我们的实验设置中,我们使用GPT-3.5-turbo作为默认的大型语言模型。我们将参数temperature的值设置为0.7,并进行五次运行来计算指标的平均值。迭代次数设置为3,默认情况下,每次迭代由5个前进步骤组成。
因为领域专家手工评估基于LLM的解决方案的输出是不可行的,所以我们采用了自动化的代码评估过程。具体来说,我们要求每个解决方案为每个问题生成编程代码。如果代码能够通过由专家注释的相关测试用例,我们就认为问题已经成功解决了。我们用准确度来表示成功率。除了这种严格的度量,我们还采用编译错误率(CE rate)来捕获未能编译的生成程序的百分比,这可能是由自动建模过程中的问题引起的;或者,运行时出错率(RE rate)衡量生成的程序在执行期间遇到错误的百分比,这些错误是由内部逻辑错误(如不可解的模型或非线性约束)引起的。实验代码在https://github.com/xzymustbexzy/Chain-of-Experts.
基准
我们将CoE与9个基准进行比较。对于NL4Opt的传统方法,我们认为tag-BART (Neeraj Gangwar,2022)是一个SOTA模型,它在NeurIPS竞赛中获得了第一名(Ramamonjison等人,2022b)。我们还将CoE与流行的基于LLM的方法进行了比较,包括思维链、渐进提示、思维树、思维图、反应、反思和个人表现提示。默认GPT在推理上没有任何优化chain命名为Standard,预计将实现较低的性能。我们还实现了一个使用相同模型的基线,它使用统一的系统提示,“你是一个有用的助手”,跨所有角色,没有任何额外的知识库。附录A.3中描述了这些算法的详细实现。
在LPWP和COMPLEXOR上的总体性能
在两个基准数据集中的准确度、CE率和RE率方面的结果如表1所示。由于传统的tag-BART方法不能生成代码,我们通过要求数学模型中的约束和目标是正确的来衡量它的准确性。请注意,生成有效的线性编程模型是正确生成代码的先决条件。即使在这样宽松的评估度量下,tag-BART仍然不如某些基于LLM的基线,验证了应用LLM解决or问题的可行性。我们还观察到,在ComplexOR的所有问题实例中,tag-BART都失败了。在基于LLM的基线中,Reflexion脱颖而出,成为最有前途的问题解决者。由于其自反射机制,它在两个数据集中实现了最低的CE率和RE率。
当遇到复杂或问题时,它的整体准确性略逊于反应。原因是在复杂或问题中,访问外部知识库的能力变得更加关键,这是ReAct的一个优势。即使Solo Performance也采用了多智能体推理框架,但其性能并不令人满意。与我们的协作推理框架不同,它的代理只是由一个领导者LLM初始化,缺乏有效的合作来解决挑战或问题。我们提出的CoE在两个数据集的所有性能指标中确立了明显的优势。
在LPWP中,准确率为58.9%,超过最先进的代理反射8.2%。在其最佳性能中,CoE还设法解决了ComplexOR中37个复杂问题实例中的10个。出色的性能归功于专家链推理框架的有效设计,包括专家设计方法、指挥者和缩减者的角色以及反射机制。我们还发现,删除专家的特征会导致准确性的下降,这表明CoE从使用专门的专家中受益。在下一个实验中,我们将通过消融研究来调查这些成分的效果。
关于单个专家设计的消融研究
表2强调了知识库和推理能力发挥的积极作用。移除这些元件会导致精度略有下降。有趣的是,我们发现总结是最重要的设计方面。原因是双重的。首先,注释的长度可能超过GPT-turbo-3.5的令牌限制,溢出的令牌将被丢弃。第二,一个紧凑而有意义的总结更有利于下游专家的决策。
对于专家之间的合作,我们评估的效果向后反射,前瞻性思维建设的指挥,和减速器。如表2所示,去除后向反射成分后,精度从58.9%显著下降到55.6%,RE率从7.7%显著增加到12.2%。这些结果意味着,如果没有反射机制,系统在逻辑推理中容易出错,并且缺乏自我校正的能力。为了评估指挥的效果,我们在构建正向思维链的过程中,用随机选择后续专家来代替。性能也会显著下降,因为专家不再很好地协调,并且专家的随机选择甚至可能对推理过程有害。令人惊讶的是,减速器组件也有显著贡献。本模块总结了之前多位专家的集体见解。如果我们删除它,答案将从专家的原始评论的串联中提取,这可能导致错误的结论,因为评论可能是支离破碎的,甚至相互冲突。
参数敏感性分析
我们评估与推理能力相关的两个关键参数,包括正向思维构建中的步数和大语言模型中的温度。从图3a所示的结果中,我们可以得出两个结论。首先,温度参数值越低,性能越好。这表明,对于知识密集型问题,专家受益于提供更具确定性和一致性的想法,而不是创造性或多样化的想法。第二,一个更长的推理链,包括更多的专家在前瞻性思维结构中,通常会提高准确性。然而,这是以更高的推理时间成本和更多的API请求为代价的。这就是我们选择温度= 0,前进步长= 5作为默认参数配置的原因。
图LPWP的参数敏感性分析和选择频率分析
其他LLMS
作为基本推理模型我们还对在专家链中使用不同逻辑推理模型的影响进行了调查。我们认为GPT 4号和克劳德2号是两个可供选择的LLM,并选择标准和反射作为两个基线。如表3所示,所有方法都受益于更高级LLM的升级。然而,我们的专家链方法展示了最大的改进。例如,当使用GPT-4时,我们观察到LPWP的准确率提高了8.3%,ComplexOR的准确率提高了5.5%,是三种方法中最高的。
专家选择频率的实验分析
在最后的实验中,我们旨在更深入地了解指挥者的行为,考察其选择专家背后的合理性。
首先,我们在LPWP数据集上进行实验,分析每个专家的选择频率。在图3b中,我们观察到编程专家和建模专家是两个最常被选择的专家。这一发现与建模和编程对解决问题至关重要的预期是一致的。此外,我们注意到参数、变量、约束和目标函数的提取很少被选择。这可以归因于LLM语言理解能力的进步,现在LLM可以直接理解问题陈述,而不需要传统方法中一步一步的NER。
此外,我们研究了涉及多个专家的最频繁采样的合作路径。每一个解决问题的过程都提供了一条代表所涉及的专家顺序的路径。在表4中,我们观察到当参数forward steps设置为2时,只有两个专家合作解决一个问题,最常见的路径是从建模到编程专家。这一发现与这两种角色在解决问题中的重要性相一致。此外,当“步骤”设置为6时,协作路径变得更加复杂,类似于真实世界的工作流。
表4:不同前进步骤设置下专家最常用的合作途径。
结论
在本文中,我们提出了第一个基于LLM的复杂OR问题的解决方案。为了增强推理能力,我们设计了专家链(CoE),一种新的多智能体合作框架。CoE的核心是一个指挥者,通过向前的思想构建和向后的反思机制,指挥一群基于LLM的专家。我们建立了一个新的数据集,ComplexOR来促进研究和社区发展。实验结果表明,我们的CoE在LPWP和ComplexOR上都明显优于当前最先进的推理方法。
附录
A.1一个COMPLEXOR数据集的例子图4所示的例子展示了一个复杂运筹学问题的典型实例。
具体来说,它说明了一个更具挑战性的有能力限制的批量问题。这个问题涉及广泛的约束条件,如求和、方程和不等式。与更简单的问题不同,这种情况下的目标函数不是简单的线性表达式,而是多个集合变量的总和。这些综合特征将这个问题归类为复杂的优化挑战。
在制造计划的背景下,我们处理有能力限制的多级批量问题。
在定义和阐述这个问题时,我们做了以下假设。首先,我们假设准备时间和成本是非序列相关的,不允许在期间之间进行准备结转,并且所有初始库存为零。第二,所有生产成本都被假定为产量的线性,不随时间变化;因此,为了简单起见,可以将它们从模型中删除。设置和持有成本也假定不随时间变化。
此外,假设最终产品没有后继产品,只有最终产品有外部需求和延期交货成本。最后,我们假设交货时间为零,没有销售损失。重要的是要注意,所有这些假设(除了设置结转)只是为了便于说明,并不失一般性,即理论结果仍然有效,即使当他们被删除。参见厄兹图尔克和奥内克(2010)关于设置结转以及组件项目外部需求的批量问题。
图ComplexOR数据集的一个例子。
A.2专家链的更多实施细节A.2.1专家设计在本节中,我们将深入概述参与专家链框架的各个专家。表5提供了这些专家的综合列表,每个专家都被分配了一个特定的角色和与解决问题相关的领域知识。
表5:专家链中的所有专家
下面,我们为每个专家提供详细的描述和提示模板实现。
请注意,花括号中的文本表示占位符,这些占位符将在运行时根据特定的问题描述、专家提供的意见和检索到的知识动态填充。
- 术语解释器:角色描述:提供额外的特定领域知识,以增强对问题的理解和表述。提示模板:作为领域知识术语解释者,您的角色是提供与问题领域相关的附加信息和见解。下面是一些关于这个问题的相关背景知识:{knowledge}。你可以通过分享你的专业知识,解释相关概念,提供建议来提高对问题的理解和表述。请根据给定的问题描述提供您的输入:{problem}。
- 参数提取专家:角色描述:提供额外的领域特定知识,以增强对问题的理解和表述。提示模板:作为变量提取专家,你的角色是从问题陈述中识别并提取相关变量。变量代表优化问题中的未知数或决策变量。您在问题领域的专业知识将有助于准确识别和描述这些变量。请检查问题描述,并提供提取的变量及其定义:{problem}。
- 变量提取专家:角色描述:精通从问题陈述中识别和提取相关变量。提示模板:作为变量提取专家,你的角色是从问题陈述中识别并提取相关变量。变量代表优化问题中的未知数或决策变量。您在问题领域的专业知识将有助于准确识别和描述这些变量。请检查问题描述,并提供提取的变量及其定义:{problem}。
- 约束提取专家:角色描述:擅长从问题描述中提取约束。提示模板:作为约束提取专家,您的角色是从问题描述中识别和提取约束。约束表示优化问题中需要满足的限制或条件。您在问题领域的专业知识将有助于准确地识别和制定这些约束。请检查问题描述并提供提取的约束:{problem}。各位同事给出的评论如下:{评论},请仔细参考。
- 目标函数提取专家:角色描述:能够从问题陈述中识别并提取目标函数。提示模板:你是运筹学和优化方面的专家,负责目标函数提取。你的任务是从问题陈述中识别和提取目标函数。目标函数代表优化问题的目标。现在,问题描述如下:{问题}。
- 建模知识补充专家:角色描述:提供与建模技术和最佳实践相关的补充知识。提示模板:作为建模知识补充专家,您的角色是提供与运筹学和优化领域的建模技术和最佳实践相关的额外知识和见解。下面是一些关于建模技术的相关背景知识:{knowledge}。您可以通过解释不同的建模方法、提出改进建议或分享相关的提示和技巧来做出贡献。请根据给定的问题描述和迄今为止的建模工作提供您的输入:{problem}。
- 建模专家:角色描述:精通根据提取的信息构建数学优化模型。提示模板:你是运筹学和最优化领域的建模专家。您的专长在于混合整数规划(MIP)模型,并且您对运筹学领域的各种建模技术有着深入的理解。目前,你有一个运筹学问题,以及其他专家提供的额外见解。目标是全面整合这些输入,并设计一个全面的模型来解决给定的生产挑战。现在起源问题如下:{问题}。而建模如下:{评论}给你这个问题的模型。
- LP文件生成专家:角色描述:生成LP(线性规划)文件的专业知识,这些文件可由优化求解器使用。提示模板:作为LP文件生成专家,你的角色是根据公式化的优化问题生成LP(线性规划)文件。优化求解器通常使用LP文件来寻找最优解。以下是LP文件格式文档的重要部分来源:{knowledge}。您在生成这些文件方面的专业知识将有助于确保兼容性和效率。请检查问题描述和提取的信息,并提供生成的LP文件:{problem}。各位同事给出的评论如下:{评论},请仔细参考。
- 编程示例提供者:角色描述:提供编程示例和模板来帮助实现优化解决方案。提示模板:作为运筹学和最优化领域的编程专家,你根据背景知识提供编程实例和模板:{knowledge}。现在根据问题描述:{problem}。请你理解背景知识中的摘录代码片段,并理解它们的功能,然后给出你的代码示例来帮助解决这个问题。各位同事给出的评论如下:{评论},请仔细参考。
- 编程专家:角色描述:擅长编程和编码,能够用编程语言实现优化方案。提示模板:你是运筹学和优化领域的Python程序员。熟练使用Gurobi等第三方库是必不可少的。除了你在Gurobi方面的专业知识,如果你还能提供一些相关库或工具的背景知识,比如NumPy、SciPy或PuLP,那就更好了。其他专家给你一个特定的问题和评论。您的目标是开发一个高效的Python程序来解决给定的问题。现在起源问题如下:{问题}和专家连同他们的评论如下:{评论}直接给你的Python代码。
- 代码评审员:角色描述:对实现的代码进行彻底的评审,以识别任何错误、低效或需要改进的地方。提示模板:作为代码审查者,你的责任是对与优化问题相关的已实现代码进行彻底的审查。您将确定代码中可能的错误、低效或需要改进的地方,确保它遵循最佳实践并交付最佳结果。现在,问题来了:{problem}。你应该参考你的同事从其他方面给出的评论:{comments}
A.2.2指挥指挥的角色非常专业和重要,与其他专家相比,这需要更复杂的即时设计。以下是一个指挥的提示模板:
你是运筹学领域的一个专家团队的领导者。现在,您需要协调您管理的所有专家,以便他们能够一起解决一个问题。
接下来会给你一个具体的或问题,你的目标是选出你认为最适合征求见解和建议的专家。
一般来说,一个复杂或问题的解决需要分析、信息提取、建模和编程来解决问题。问题的描述呈现如下:{问题}记住,基于不同专家的能力和问题解决过程的当前状态,你需要决定下一步咨询哪个专家。专家的能力描述如下:{专家信息}已经被评论的专家包括:{被评论的专家}请记住,专家必须从上面的现有列表中选择。
请注意,您需要在剩余的{剩余步骤}步骤中完成整个工作流程。
现在,仔细考虑你的选择,并给出你的理由。
A.2.3缩减者缩减者的作用是汇总选定专家提供的所有意见。
他们必须仔细分析评论并生成最终答案,最终答案可以采取多种形式,如建模或程序。根据所需最终答案的具体类型,缩减者的提示模板可能会有所不同。当目标是获得一个程序时,这里有一个Reducer提示模板的例子:
你被分配了一个关键任务,生成一个程序来解决所提出的复杂运筹学问题。该计划应包含选定专家提供的见解和建议。你的任务是有效地综合信息,创建一个功能程序。
程序描述如下:{问题}其他专家的评论如下:{评论}能否请您根据评论写Python GUROBI代码。
A.3基线的实施为了确保公平的比较,我们按照原始论文的指导方针实施了基线算法。
传统模式tag-BART通常需要一个培训过程。如果我们直接使用来自LPWP数据集的预训练tag-BART模型在ComplexOR数据集上进行测试,很可能会出现域转移。为了缓解这个问题,我们可以采取两步走的方法。首先,我们在LPWP数据集上预训练了tag-BART模型。这种初始预训练使模型能够获得基本的NER能力。接下来,我们在另外一组30个类似于ComplexOR问题的问题上微调预训练模型。这些问题具有与LPWP数据集相同的注释格式。通过对这个特定问题集的模型进行微调,我们的目标是最大化性能,并使模型适应ComplexOR领域的需求。
对于标准的提示技术,我们利用语言模型的上下文学习能力。遵循OpenAI官方文档中概述的推荐方法,我们设计了以下提示模板:
你是运筹学和优化领域的Python程序员。
熟练使用Gurobi等第三方库是必不可少的。在…里除了您在Gurobi方面的专业知识,如果您还能提供一些相关库或工具的背景知识,比如NumPy、SciPy或PuLP,那就更好了。给你一个特定的问题。您的目标是开发一个高效的Python程序来解决给定的问题。现在起源问题如下:{问题}。
直接给你Python代码。
思维链是一种类似于标准提示的技巧,但是有一些额外的步骤。它以“让我们一步一步地思考”这句话开始,引导模型的思考过程。在此之后,添加了进一步的总结步骤,因为由思维链生成的输出可能是冗长且零碎的。
对于思维树和思维图,我们根据各自论文中进行的实验来设置参数。探测宽度设置为3,最大探测步长设置为5。我们采用了思维树提示(Hulbert,2023)工作中提出的提示范式。提示的设计如下,
其中{探索步骤提示}代表每个探索步骤中使用的原始提示:假设运筹学和最优化领域的三位不同的专家正在为一个难题建模和编写程序员。
所有专家将写下他们思考的1个步骤,然后与小组成员分享。
然后所有专家再进行下一步等等。
如果任何专家意识到他们在任何一点上都错了,那么他们就会离开。
问题描述为:{ problem } { exploration step prompt }
对于渐进式提示提示,原实现可能不适合复杂或问题。在原始论文中,答案是一个立即数,这使得确定多个交互之间的一致性变得很容易。但是,在复杂或问题中,答案可以是一个模型,也可以是一个程序,两者并没有直接的可比性。为了解决这个问题,我们遵循渐进式提示的基本思想,并做了一些修改。我们生成一个初始答案,然后使用与语言模型的附加交互来询问当前答案是否与之前的答案相同。这样,PHP算法以更合适的方式实现。
在ReAct方法中,有两个主要步骤:推理和行动。在推理步骤中,我们使用与CoT中相同的提示来引导模型的思维过程。在操作步骤中,我们将操作限制为从知识库中检索知识。这是因为,在复杂或问题中,获取和利用外部知识对于做出明智的决策至关重要。为了确保公平的比较,我们允许ReAct代理访问专家链中提到的所有知识库。
Reflexion的设计与专家链中描述的反向反射过程一致。在Reflexion中,从建模程序的编译和运行时获得反馈,允许对前面的步骤进行迭代改进,直到代理对答案满意为止。值得注意的是,在我们的实验设置中,我们不生成测试单元。
A.4更多实验结果
a . 4.1 COMPLEXOR上的详细实验结果表6给出了应用于complex or数据集的基线算法和专家链方法的性能的详细概述。为了简洁起见,我们使用缩写,将传统算法的主要内容称为“BART”。此外,我们对各种算法使用简写标签。结果强调了传统算法(如BART)和提示技术(如CoT)面临的挑战,因为它们无法成功解决数据集中的所有问题。值得注意的是,get在解决相对简单的“混合”问题上取得了成功。在使用大型语言模型代理(包括反应和反射)的方法中,几个不太复杂的问题是可解决的,但总体表现仍不理想。专家链(CoE)方法的成功率最高,解决了20个问题中的7个,是最有效的算法。
我们还发现,某些算法,尤其是PHP和SPP,在面对复杂问题时会受到令牌限制的困扰。这个令牌限制问题不仅阻碍了它们的性能,还导致了计算成本的增加和执行效率的降低。相比之下,专家链方法结合了三个关键策略来减少与令牌限制相关的错误。首先,专家总结的使用显著降低了近50%的记忆压力。其次,与循环方法相反,导体的采用进一步减少了最大上下文,有效地将令牌的使用减半。最后,可视地图的引入使得代币消耗大幅减少了约70%。
表ComplexOR上不同方法的详细实验结果
A.4.2单个专家的消融实验
图5:从CoE中删除单个专家时对准确性的影响
图5显示了在专家链框架中对每个专家进行的消融实验的结果。x轴标签表示从CoE中删除特定专家,而y轴表示删除每个专家后达到的准确度。蓝色水平线代表所有专家被整合时的准确度。基于这些结果,我们可以观察到关于每个专家对两个数据集的重要性的以下见解。
在子图5a中,对应于由简单问题组成的LPWP数据集,移除单个专家不会导致显著的性能下降。然而,最关键的专家是编程专家。这一发现与LPWP数据集的性质一致,其中最终的评估是基于程序的正确性。因此,有一个能够提供编程见解的专家是必不可少的。第二个重要的专家是建模专家,因为数学建模在解决问题中起着至关重要的作用。
在制造计划的背景下,我们处理有能力限制的多级批量问题。在定义和阐述这个问题时,我们做了以下假设。首先,我们假设准备时间和成本是非序列相关的,不允许在期间之间进行准备结转,并且所有初始库存为零。第二,所有生产成本都被假定为产量的线性,不随时间变化;因此,为了简单起见,可以将它们从模型中删除。设置和持有成本也假定不随时间变化。此外,假设最终产品没有后继产品,只有最终产品有外部需求和延期交货成本。最后,我们假设交货时间为零,没有销售损失。重要的是要注意,所有这些假设(除了设置结转)只是为了便于说明,并不失一般性,即理论结果仍然有效,即使当他们被删除。参见厄兹图尔克和奥内克(2010)关于设置结转以及组件项目外部需求的批量问题。
子图5b显示,个别专家对更具挑战性的问题有更大的影响。除了编程专家和建模专家之外,术语解释器的移除导致了大约20%的准确度的显著下降。这一结果突出了ComplexOR数据集的知识密集型本质,它严重依赖于外部知识的补充。有趣的是,LP文件生成器专家也被证明是重要的。
这一发现表明,对于较难的问题,利用LP文件作为建模的有效中间结构文件是一种好方法,因为与编写Python Gurobi程序文件相比,它会产生更好的结果。
A.4.3案例研究在本实验中,我们进行了详细的案例研究,以深入了解我们方法的有效性,如图6所示。为了减少采样结果的不确定性,我们将每种方法运行五次,并根据大多数响应得出我们的结果。在这个结果中,由于对多级批量问题的认识不足,标准提示方法未能正确地将变量bc识别为积压成本。并且缺少关于初始和结束状态的约束,而这在实际制造过程约束的上下文中是必不可少的。此外,由于缺少关键项目,目标函数被认为是不可解的。
SSP通过leader persona创建的制造计划员提供了一些基本的背景知识。然而,这种方法有局限性:四分之三的人物角色在解决问题时提供的帮助可以忽略不计,这在特定领域的问题中是一个关键问题,比如OR。
在CoE中,指挥有效地为问题解决过程的不同阶段选择了合适的专家。最初,选择一名术语翻译来提供必要的背景知识。虽然建模专家最初重复了关于目标函数的相同错误,但是这个错误在向后反射过程中被纠正。
原文地址:https://blog.csdn.net/weixin_43961909/article/details/145180992
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!