当线性规划与算法相遇:揭秘单纯形法(Simplex)的独特魅力

news2024/12/28 6:30:51

传统的解决线性规划问题的方法是图形法、代数法求解,但是图形法解题有极大的局限性,因为一旦变量超过3个,基本上就无法通过图形解决,而代数法虽然可以解题,但对于复杂的问题可能效果较差甚至无法求解!
相比图形法和代数法,单纯形法解决线性规划问题具有以下优势:

  1. 理论基础强:单纯形法是基于线性规划的基本理论,通过系统的迭代过程逐步逼近最优解。它是一种可行的、确定性的算法,能够找到问题的最优解或者确定问题是无界或无解的。
  2. 高效性:在实践中,单纯形法通常能够在合理的时间内找到线性规划问题的最优解。尤其对于具有稀疏性质的问题,单纯形法的性能更为出色。此外,单纯形法的计算复杂度与问题规模的增长呈多项式关系。
  3. 灵活性:单纯形法适用于各种类型的线性规划问题,包括有约束的和无约束的问题。它可以处理多目标函数、等式约束、不等式约束、非线性约束等多种情况。
  4. 可以进行优化:单纯形法可以通过一些优化策略来提高算法的效率,例如早期停止条件、对偶单纯形法等。这些优化措施可以在实际应用中进一步加速算法的执行。
  5. 可解释性强:单纯形法的迭代过程很容易理解和解释。每个迭代步骤都代表着一种改进,可以直观地解释为什么选择某个变量作为进基变量或出基变量,从而得到更优解。

尽管单纯形法具有以上优势,但对于大规模问题或非常稀疏的问题,单纯形法可能会遇到性能瓶颈。在这种情况下,可以考虑使用其他更高效的线性规划算法,例如内点法、启发式算法或者列生成法等。
具体使用单纯形法解题的步骤如下所示:

  1. 化一般型为标准型,求初始基本可信解,建立初始单纯形表;
  2. 求检验数并判断,若已得到最优解,结束计算;否则转入下一步;
  3. 进行基变换,构建新的单纯形表进行迭代;
  4. 重复步骤二、三,直到得出最优解、重复解或无最优解等。

1.化标准型

我们常见的线性规划模型的一般型为:
目标函数: m a x ( m i n ) Z = ∑ j = 1 n c j x j 约束条件: { ∑ j = 1 n a i j x j ≥ ( ⩽ ) b i , i = 1 , 2 , ⋯   , m x j ≥ 0 , j = 1 , 2 , ⋯   , n \begin{aligned} 目标函数:& max(min) Z=\sum_{j=1}^{n}c_{j}x_{j} \\ 约束条件:& \left\{\begin{matrix} \sum_{j=1}^{n}a_{ij}x_{j} \geq (\leqslant )b_{i} ,i=1,2,\cdots ,m\\ \\ x_{j}\geq 0,j=1,2,\cdots ,n \end{matrix}\right. \end{aligned} 目标函数:约束条件:max(min)Z=j=1ncjxj j=1naijxj()bi,i=1,2,,mxj0,j=1,2,,n
单纯形法是一种求解线性规划问题的常用方法,其第一步是将线性规划问题转化为标准型,主要是为了方便后续的计算和迭代。
将线性规划问题转化为标准型的目的有以下几个方面:

  1. 约束条件的统一表示:标准型可以将线性规划问题的约束条件统一表示为等式形式,即将不等式约束和非负约束都表示为等式约束。这样可以简化计算过程和算法的设计。
  2. 约束条件的非负性:标准型要求所有变量的取值都非负,这样可以确保问题的可行解存在。通过引入松弛变量或人工变量,将不等式约束转化为等式约束,并引入非负约束,确保问题的可行性。
  3. 目标函数的最大化或最小化:标准型要求将目标函数转化为最小化形式。对于最大化问题,可以通过将目标函数乘以-1来转化为最小化问题,并利用单纯形法求解。
    通过化为标准型,可以将线性规划问题转化为一个更加结构化和规范化的形式,方便应用单纯形法进行迭代计算。标准型的形式更加适合使用单纯形表格来表示和计算,使得单纯形法的步骤更加清晰和易于理解。
    需要注意的是,并非所有的线性规划问题都能够直接转化为标准型,有些问题需要经过一些额外的转化步骤才能达到标准型的形式。但是,一旦将问题转化为标准型,就可以直接应用单纯形法进行求解。
    具体线性规划模型的标准型为:
    目标函数: m a x Z = ∑ j = 1 n c j x j 约束条件: { ∑ j = 1 n a i j x j = b i , i = 1 , 2 , ⋯   , m x j ≥ 0 , j = 1 , 2 , ⋯   , n \begin{aligned} 目标函数:& maxZ=\sum_{j=1}^{n}c_{j}x_{j} \\ 约束条件:& \left\{\begin{matrix} \sum_{j=1}^{n}a_{ij}x_{j} =b_{i} ,i=1,2,\cdots ,m\\ \\ x_{j}\geq 0,j=1,2,\cdots ,n \end{matrix}\right. \end{aligned} 目标函数:约束条件:maxZ=j=1ncjxj j=1naijxj=bi,i=1,2,,mxj0,j=1,2,,n
    标准型的要求主要为:
    (1)目标函数为求最大值
    (2)约束条件均为等式方程
    (3)变量 x j x_{j} xj为非负
    (4)常数 b i b_{i} bi都大于等于零
    下面引入一个简单的例子并将其化为标准型:
    其线性规划问题的一般型为:
    m a x   z = 6 x 1 − 2 x 2 + x 3 { 2 x 1 − x 2 + 2 x 3 ⩽ 2 x 1 + 4 x 3 ⩽ 4 x 1 , x 2 , x 3 ⩾ 0 \begin{aligned} max \ z=6x_{1}-2x_{2}+x_{3} \\ \left\{\begin{matrix} 2x_{1}-x_{2}+2x_{3}\leqslant 2\\ x_{1}+4x_{3}\leqslant 4\\ x_{1},x_{2},x_{3}\geqslant 0 \end{matrix}\right. \end{aligned} max z=6x12x2+x3 2x1x2+2x32x1+4x34x1,x2,x30
    将其转换为标准型为:
    m a x   z = 6 x 1 − 2 x 2 + x 3 + 0 x 4 + 0 x 5 { 2 x 1 − 1 x 2 + 2 x 3 + 1 x 4 + 0 x 5 = 2 1 x 1 + 0 x 2 + 4 x 3 + 0 x 4 + 1 x 5 = 4 x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 \begin{aligned} max \ z=6x_{1}-2x_{2}+x_{3}+0x_{4}+0x_{5}\\ \left\{\begin{matrix} 2x_{1}-1x_{2}+2x_{3}+1x_{4}+0x_{5}=2\\ 1x_{1}+0x_{2}+4x_{3}+0x_{4}+1x_{5}=4\\ x_{1},x_{2},x_{3},x_{4},x_{5}\geq 0 \end{matrix}\right. \end{aligned} max z=6x12x2+x3+0x4+0x5 2x11x2+2x3+1x4+0x5=21x1+0x2+4x3+0x4+1x5=4x1,x2,x3,x4,x50

2.求检验数并判断最优解

在单纯形法中,一旦将线性规划问题转化为标准型,可以通过以下步骤求解检验数,并判断是否达到最优解:

  1. 制作初始单纯形表格:根据标准型的形式,构造初始单纯形表格,包括目标函数的系数、约束条件的系数矩阵、右侧常数项等。
  2. 计算检验数:在初始单纯形表格中,计算每个变量的检验数。检验数表示在目标函数中增加或减少一个单位变量的值时,目标函数值的变化。检验数的计算公式为:检验数 = 目标函数系数 - 系数矩阵中对应列的系数与目标函数系数的乘积。
  3. 判断是否达到最优解:若所有的检验数都为非负数,则当前解为最优解。因为如果存在负的检验数,将会导致目标函数值继续改善,因此需要进行下一步的迭代。
    具体初始单纯形表如下所示:
    在这里插入图片描述
    注意,这里对参数进行解释: c k c_{k} ck表示各个变量的价值系数,这里可以从目标函数 m a x   z = 6 x 1 − 2 x 2 + x 3 + 0 x 4 + 0 x 5 max \ z=6x_{1}-2x_{2}+x_{3}+0x_{4}+0x_{5} max z=6x12x2+x3+0x4+0x5可以看出各个变量( x 1 、 x 2 、 x 3 、 x 4 、 x 5 x_{1}、x_{2}、x_{3}、x_{4}、x_{5} x1x2x3x4x5)下面的数值,我们只需要看约束条件即可。
    { 2 x 1 − 1 x 2 + 2 x 3 + 1 x 4 + 0 x 5 = 2 1 x 1 + 0 x 2 + 4 x 3 + 0 x 4 + 1 x 5 = 4 \begin{aligned} \left\{\begin{matrix} 2x_{1}-1x_{2}+2x_{3}+1x_{4}+0x_{5}=2\\ 1x_{1}+0x_{2}+4x_{3}+0x_{4}+1x_{5}=4\\ \end{matrix}\right. \end{aligned} {2x11x2+2x3+1x4+0x5=21x1+0x2+4x3+0x4+1x5=4
    X B X_{B} XB代表基变量,具体基变量的找法,我们只需要在系数矩阵中找到对应的单位矩阵,单位矩阵所对应的变量即为基变量,因此,从初始单纯形表可以看出, x 4 、 x 5 x_{4}、x_{5} x4x5即为基变量。
    c B c_{B} cB代表右侧基变量所对应的价值系数,初始单纯形表的基变量对应的价值系数分别是0、0
    b b b这一列称之为资源限量,填写的时候,只需要看系数矩阵中右侧的数字即可
    求基本可行解时,只需要设置全部非基变量为0,即令 x 1 、 x 2 、 x 3 = 0 x{1}、x{2}、x_{3}=0 x1x2x3=0,这样可以求出基变量 x 4 = 2 , x 5 = 4 x_{4}=2,x_{5}=4 x4=2,x5=4,所以基本可行解为 ( 0 , 0 , 0 , 2 , 4 ) T (0,0,0,2,4)^T (0,0,0,2,4)T
    接下来,我们需要通过计算检验数来判断该解是否为最优解,即分别计算 ( x 1 、 x 2 、 x 3 、 x 4 、 x 5 ) (x_{1}、x_{2}、x_{3}、x_{4}、x_{5}) (x1x2x3x4x5)所对应的检验数 σ j \sigma_{j} σj,其计算方式为 c j − c B x j c_{j}-c_{B}x_{j} cjcBxj
    若当前计算的所有 σ j \sigma_{j} σj都小于等于0,即表示当前基础可行解为最优解,否则还需要进行基变换来进一步求得最优解!

3.基变换

基变换的作用就会帮我们找到下一个可行解,简单来说就是用当前一个非基变量来替换基变量,也就是让非基变量入基,让基变量出基。
在确定哪个非基变量入基的时候,我们只需要看检验数,当前最大的检验数对应的变量,就是需要入基的非基变量,当前是 x 1 x_{1} x1,它对应的检验数为6,是当前所有检验数的最大值。
接下来就需要确定出基变量,那么首先就需要计算 θ \theta θ,其计算方法就是b这一列和确定入基 x 1 x_{1} x1这一列相除得到,即为 ( 1 , 4 ) T (1,4)^T (1,4)T,计算好 θ \theta θ后,我们只需要找 θ \theta θ值中的最小值,其最小值对应的变量 x 4 x_{4} x4就是所对应的出基变量。
紧接着就需要把入基变量 x 1 x_{1} x1和出基变量 x 4 x_{4} x4中相交的数字经过行列运算变换为1,其对应的同列元素全部变换为0,计算完毕后就对应着下一个单纯形表。
具体下一个单纯形表如下所示:
在这里插入图片描述
这里需要注意,你可能看到 θ \theta θ对对应的第一个数填的是-,那是因为当前入基 x 2 x_{2} x2对应的数字为负数,因此不需要计算。
由此可以看出,并不是所有的检验数都为小于等于零,因此,当前的基础可行解仍然不是最优解,所以还需要进一步进行基变换,下面就不对基变换的过程进行详解,仅仅展示最优求得最优解所对应的单纯形表。
在这里插入图片描述
至此,从图表中可以看出,全部变量对应的检验数都小于等于0,因此,此时多对应的解为最优解,最优解为 ( 4 , 6 , 0 , 0 , 0 ) T (4,6,0,0,0)^T (4,6,0,0,0)T

4.结果判定方法

具体解的判定方法如下所示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式PID算法理论+实践分析

1.1 概述 比例(Proportion)积分(Integral)微分(Differential)控制器(PID控制器或三项控制器)是一种采用反馈的控制回路机制,广泛应用于工业控制系统和需要连续调制控制的…

LangChain+LLM实战---LangChain概述

LangChain介绍 LangChain是个开源的框架,它可以让AI开发人员把像GPT-4这样的大型语言模型(LLM)和外部数据结合起来。可以简单认为LangChain是LLM领域的Spring,以及开源版的ChatGPT插件系统。 LangChain的强大之处不仅能通过API调用语言模型,…

LLMs之ChatGLM3:ChatGLM3/ChatGLM3-6B的简介(多阶段增强+多模态理解+AgentTuning技术)、安装、使用方法之详细攻略

LLMs之ChatGLM3:ChatGLM3/ChatGLM3-6B的简介(多阶段增强多模态理解AgentTuning技术)、安装、使用方法之详细攻略 导读:2023年10月27日,智谱AI在2023中国计算机大会上推出了全自研的第三代基座大模型ChatGLM3及其相关系列产品,这是…

系列二十一、请描述BeanDefinition的加载过程

一、概述 BeanDefinition是用来描述bean的生产信息,决定bean如何生产,是一个定义态的bean。 二、流程 2.1、第一步:启动IOC容器 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(MySpringConfig.cla…

嵌入式系统中C++ 类的设计和实现分析

C代码提供了足够的灵活性,因此对于大部分工程师来说都很难把握。 本文介绍了写好C代码需要遵循的10个最佳实践,并在最后提供了一个工具可以帮助我们分析C代码的健壮度。 原文:10 Best practices to design and implement a C class。 1. 尽…

基于回溯搜索算法的无人机航迹规划-附代码

基于回溯搜索算法的无人机航迹规划 文章目录 基于回溯搜索算法的无人机航迹规划1.回溯搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用回溯搜索算法来优化无人机航迹规划。 …

2023Selenium自动化测试框架入门整理(建议收藏)

本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明。作为开发人员、测试人员入门参考。 本文参考:Selenium框架最新技术规范及相关资料 简介 Selenium也是一款同样使用Apac…

实现分片上传、断点续传、秒传 (JS+NodeJS)(TypeScript)

一、引入及效果 上传文件是一个很常见的操作,但是当文件很大时,上传花费的时间会非常长,上传的操作就会具有不确定性,如果不小心连接断开,那么文件就需要重新上传,导致浪费时间和网络资源。 所以&#xff0…

Wpf 使用 Prism 实战开发Day02

一.设计首页导航条 导航条的样式,主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库,就看自己需要什么,就去拷过来使用,界面布局或其他组件使用,不做介绍。 直接下载源码,编译运行就可…

【鸿蒙软件开发】ArkTS基础组件之TextTimer(文本显示计时)、TimePicker(时间选择)

文章目录 前言一、TextTimer1.1 子组件1.2 接口参数TextTimerController 1.3 属性1.4 事件1.5 示例代码 二、TimePicker2.1 子组件2.2 接口参数 2.3 属性2.4 事件TimePickerResult对象说明 2.5 示例代码 总结 前言 通过文本显示计时信息并控制其计时器状态的组件。 时间选择组…

防火墙的技术(NAT NAT地址池 升级版本 ) 第二一课

防火墙的技术(NAT NAT-Server 策略路由 ) 第二十课 官方文档分享 菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01; 环境的准备工作 1 配置如图所示的所有的IP地址 1 配置IIP地址 2 配置防火墙中的基本配置 防火墙的默认管理口的ip地址 <USG6000-ISP-LOCAL&…

吴恩达《机器学习》2-2->2-4:代价函数

一、代价函数的概念 代价函数是在监督学习中用于评估模型的性能和帮助选择最佳模型参数的重要工具。它表示了模型的预测输出与实际目标值之间的差距&#xff0c;即建模误差。代价函数的目标是找到使建模误差最小化的模型参数。 二、代价函数的理解 训练集数据&#xff1a;假设我…

基于springboot实现校园志愿者管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校园志愿者管理系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;校园志愿者管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff…

论文阅读——InstructGPT

论文&#xff1a;Training_language_models_to_follow_instructions_with_human_feedback.pdf (openai.com) github&#xff1a;GitHub - openai/following-instructions-human-feedback 将语言模型做得更大并不能从本质上使它们更好地遵循用户的意图。例如&#xff0c;大型语…

共享股东模式:规则、优势与亮点

在当今高度信息化的时代&#xff0c;共享经济正在改变人们的生活方式。其中&#xff0c;共享股东模式作为一种新型的商业模式&#xff0c;正在受到越来越多企业的关注。本文将对共享股东模式的规则、优势和亮点进行详细介绍。 一、共享股东模式规则 共享股东模式是一种将闲置资…

接口自动化测试要做什么?一文3个步骤带你成功学会!

先了解下接口测试流程&#xff1a; 1、需求分析 2、Api文档分析与评审 3、测试计划编写 4、用例设计与评审 5、环境搭建&#xff08;工具&#xff09; 6、执行用例 7、缺陷管理 8、测试报告 了解了接口测试的工作流程&#xff0c;那"接口自动化测试"怎么弄&#xff1…

山西电力市场日前价格预测【2023-10-29】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-29&#xff09;山西电力市场全天平均日前电价为318.01元/MWh。其中&#xff0c;最高日前电价为537.50元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

vue项目package.json与package-lock.json作用及区别

package.json文件介绍和使用 运行项目&#xff0c;命令行: npm run dev “dependencies” 运行依赖&#xff0c;需引入页面使用 “devDependencies” 开发依赖(生产环境使用)&#xff0c;只是开发阶段需要 我们每次新建一个项目的时候会发现在项目中会有这么俩个相似的文件&am…

Go语言标准输入

文章目录 Go语言标准输入函数使用 Go语言标准输入 函数 Scan // 使用stdin读取内容&#xff0c;读取的内容以空白&#xff08;换行也属于空白&#xff09;分隔&#xff0c;赋值给函数参数。返回读取的个数和错误 func Scan(a ...interface{}) (n int, err error)Scanf // 和…

《算法通关村—最大小栈问题解析》

《算法通关村—最大小栈问题解析》 最小栈 描述 leetCode 155: 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现最小栈 MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop()…