运筹学基础(一)求解线性规划的单纯形法详解

news2024/9/29 15:21:47

文章目录

  • 前言
  • 线性规划的标准形式
  • 一个例子理解单纯形法
    • 1. 将线性规划转化为标准形式
    • 2. 找到一个初始可行解
    • 3. 旋转操作
    • 4. 重复旋转
  • 一些badcase
    • 退化
    • 初始解不是可行解以及无解的情况
    • 找不到有限制条件的替入变量——无界解
  • 时间复杂度
  • 参考资料

前言

大学的《运筹学》课程中,手算单纯形法是期末的必考题了!(记得期末考试前一周,几个经常逃课的同学来我宿舍楼下,叫了辆车载我去星巴克给他们讲解这个算法,活活讲了一个多小时他们才听懂,不知道最后及格了没哈哈!)当时已经觉得是信手拈来了,但是时间久了+计算过程本身也比较繁琐,慢慢就忘了。后面为了应付面试,又拾起过,但是面完试细节又给忘了,只记得是在可行域的顶点上来回搜索。

这次想完整的梳理一篇文章(本文是跟着某位大佬的博客,在某些地方掺杂了一些自己的思考和补充知识点汇总的),帮助自己再次回顾和更深的理解单纯形法,原因是在看一些更高阶的算法时,常常需要单纯形法的预备知识!不然就很难继续往下看懂了。

废话有点多了,进入正题吧!

线性规划的标准形式

因为单纯形法就是建立在标准形式之上,在解空间沿着边界的顶点(称为单纯形,“单纯形” 用于描述凸多面体中的极端点或顶点),逐步改进目标值。所以先快速过一下如何将一个线性规划问题转为标准形式!

标准形式三要素:

  1. 目标函数 m i n i m i z e minimize minimize 或者 m a x i m i z e maximize maximize都行,不同教材选择不一样,本文用 m i n i m i z e minimize minimize
    • 不是minimize怎么办,取负就可以了。
  2. 约束条件等式化;
    • 不是等式怎么办?如果是 > = >= >=,左端减去松弛变量即可,如果是 < = <= <=,左端加上剩余变量即可(这两个变量我看定义也有反过来的,不做纠结了,都当作是辅助变量即可)。
  3. 决策变量非负化。

也就是:
在这里插入图片描述

其中:
在这里插入图片描述

一个例子理解单纯形法

4个步骤

  1. 将线性规划问题转化为标准形式;
  2. 找到一个初始可行解;
  3. 不断地进行旋转(pivot)操作(本质上是在顶点游走的过程);
  4. 重复步骤3直到解不能改进为止。

🌰栗子来了:
用单纯形法求解下面这个线性规划问题:
在这里插入图片描述

1. 将线性规划转化为标准形式

为了将不等式化为等式,我们引入了 x 4 x_4 x4 x 5 x_5 x5 x 6 x_6 x6 x 7 x_7 x7 4个辅助
在这里插入图片描述

2. 找到一个初始可行解

step 1: 将辅助变量用非辅助变量表示:

下式中左侧的变量都称为「基变量」,右边的变量都称为「非基变量
在这里插入图片描述
step 2: 将非基变量全部取0,得到一个基本解(0, 0, 0, 4, 2, 3, 6),很明显是可行的(不可行的情况后面在badcase里再讨论),我们称之为:基本可行解。此时的目标值 z = 0 z=0 z=0

备注:初始可行解中,辅助变量–>基变量,原来的那些变量–>非基变量。

3. 旋转操作

【第一轮旋转】
step 1: 在目标函数里找到一个系数为负的非基变量,作为入基变量

这么做的原因是,我们现在的目标函数是 m i n i m i z e minimize minimize,现在有一个初始可行解了,我们怎么找到一个目标值更小的解呢?只要将目标函数里系数为负的变量,在满足约束的前提下,进一步减小就可以了!(这与在单纯形表中计算检验数是一个思想

这里假设我们选取了 x 1 x_1 x1(这里有一个技巧,总是选择符合条件的下标最小的非基变量,原因是为了避免退化,后面badcase里会再讲)。

在这里插入图片描述

step2:将入基变量用基变量表示,准备替换:

因为我们选择的 x 1 x_1 x1作为入基变量,上面第2个式子和第3个式子中都有 x 1 x_1 x1,我们选择哪个来表示 x 1 x_1 x1呢? 我们来比较一下:

  • 用第2个式子表示 x 1 = 4 − x 2 − x 3 − x 4 x_1 =4-x_2-x_3-x_4 x1=4x2x3x4,即 x 1 ≤ 4 x_1 \leq 4 x14
  • 用第3个式子表示 x 1 = 2 − x 5 x_1= 2-x_5 x1=2x5,即 x 1 ≤ 2 x_1 \leq 2 x12

我们要选择更严格/紧的那个(也是为了防止退化,后面的badcase会讲),因此,最后将 x 1 x_1 x1表示成: x 1 = 2 − x 5 x_1 = 2 - x_5 x1=2x5

step 3: 将入基变量的表达式,带入目标函数,完成转动

一次转动选择一个非基变量(替入变量)和一个基变量(替初变量),并替换两者的角色。上式变成:
在这里插入图片描述
step4:非基变量变为0,更新基本解和目标函数
得到另一个可行解:(2, 0, 0, 2, 0, 3, 6),目标函数值 z = − 2 z=-2 z=2

4. 重复旋转

【第二轮旋转】
step 1: 在目标函数里找到一个系数为负的非基变量,作为入基变量

选择 x 2 x_2 x2作为入基变量

step2:将入基变量用基变量表示,准备替换:

上面第2个式子和最后一个式子中都有 x 2 x_2 x2,我们选择哪个来表示 x 2 x_2 x2呢? 我们来比较一下:

  • 用第2个式子表示 x 2 = 2 − x 3 − x 4 + x 5 x_2 =2-x_3-x_4+x_5 x2=2x3x4+x5,相当于 x 2 ≤ 2 x_2 \leq 2 x22 x 3 和 x 5 x_3和x_5 x3x5都在右边,也就是非基变量,取0, 2 − x 4 ≤ 2 2-x_4 \leq 2 2x42)。
  • 用最后一个式子表示 x 2 = ( 6 − x 3 − x 7 ) / 3 x_2 =(6 -x_3-x_7) / 3 x2=(6x3x7)/3,相当于 x 2 ≤ 2 x_2 \leq 2 x22

因此,最后将 x 2 x_2 x2表示成: x 2 = 2 − x 3 − x 4 + x 5 x_2 =2-x_3-x_4+x_5 x2=2x3x4+x5
这里如果用$x_2 =(6 -x_3-x_7) / 3$,最终没有算出来,会得到一个非可行解,为什么。(todo)

step 3: 将入基变量的表达式,带入目标函数,完成转动
在这里插入图片描述

step4:非基变量变为0,更新基本解和目标函数
新的基本解为(2,2, 0, 0, 0, 3, 0),目标函数 z = − 30 z=-30 z=30

【第三轮旋转】
step 1: 在目标函数里找到一个系数为负的非基变量,作为入基变量
选择 x 5 x_5 x5作为入基变量,因为只有它的系数为负啦!

step2:将入基变量用基变量表示,准备替换:

上式2、3、5中都有 x 3 x_3 x3,我们到底用哪个来表示呢? 我们来比较一下:

  • 用第2个式子表示: x 5 = x 2 + x 3 + x 4 − 2 x_5=x_2+x_3+x_4-2 x5=x2+x3+x42,即无限制;
  • 用第3个式子表示: x 5 = 2 − x 1 x_5 =2- x_1 x5=2x1,即 x 2 ≤ 2 x_2 \leq 2 x22
  • 用第5个式子表示: x 5 = ( 2 x 3 + 3 x 4 − x 7 ) / 3 x_5=(2x_3+3x_4-x_7)/3 x5=(2x3+3x4x7)/3,即 3 x 5 ≤ 2 x 3 + 3 x 4 3x_5 \leq 2x_3+3x_4 3x52x3+3x4, x 3 x 4 x_3x_4 x3x4都是非基变量,取0, 3 x 5 ≤ 0 3x_5 \leq 0 3x50理解对吗?(todo)

选择约束的最紧的那个 x 5 = ( 2 x 3 + 3 x 4 − x 7 ) / 3 x_5=(2x_3+3x_4-x_7)/3 x5=(2x3+3x4x7)/3

step 3: 将入基变量的表达式,带入目标函数,完成转动
在这里插入图片描述

新的基本解为(0,1, 3, 0, 2, 0, 0),目标函数 z = − 32 z=-32 z=32

终止条件就是目标函数中,已经没有系数为负的变量了!

一些badcase

退化

所谓退化指的是旋转过程中,目标函数值停在某个值不变了。这是使得单纯形算法不会终止的唯一原因。

解决方法——使用Bland规则:
在选择入基变量和出基变量的时候,总是选择满足条件的下标最小的变量:

  1. 入基变量:目标函数中系数为负的下标最小值对应的变量;
  2. 出基变量:对所有的约束条件中,选择约束条件最紧的那一个。

初始解不是可行解以及无解的情况

导致初始解不是可行解的原因: b i b_i bi存在负数!
具体要怎么做,有点复杂,看官直接看大佬的线性规划:单纯形法详解即可。

找不到有限制条件的替入变量——无界解

回顾一下线性规划解的4种情况:

  1. 唯一最优解;
  2. 无穷最优解(多重解);
  3. 无可行解;
  4. 无界解。

当能找到替入变量,但对替入变量没有任何约束时(找不到替出变量?),说明是无界解的情况。

时间复杂度

最坏的情况下是非多项式的(指数时间复杂度, O ( 2 n ) O(2^n) O(2n)),绝大多数情况是多项式时间( O ( n ) O(n) O(n) ~ O ( n 3 ) O(n^3) O(n3))。下图左侧是多项式量级,右边是非多项式量级。
在这里插入图片描述

对算法时间复杂度计算感兴趣的,可以参考我的文章:算法时空复杂度分析:大O表示法。

参考资料

  1. 线性规划:单纯形法详解
  2. 《运筹学基础》 李志猛

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

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

相关文章

【分享】Word文档的5个隐藏功能

编辑Word文档的过程中&#xff0c;有时候我们需要隐藏一些格式&#xff0c;或者重要信息&#xff0c;今天小编来分享4个Word文档的隐藏功能&#xff0c;记得收藏哦&#xff01; 功能1&#xff1a;隐藏文本内容 对于不想被他人看到的文本内容&#xff0c;可以设置隐藏起来。 首…

备份SQLserver数据库到本地位置

怎么选择合适的数据库备份方案&#xff1f; 有人可能会说SSMS&#xff0c;确实&#xff0c;SSMS作为一个微软官方提供的SQLserver数据库管理工具&#xff0c;是可以帮助我们完成对数据库的备份还原任务的&#xff0c;但是它也有一些局限性&#xff0c;比如不能进行批量化的备份…

区块链技术与大数据结合的商业模式探索

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着区块链技术和大数据技术的不断发展&#xff0c;两者的结合为企业带来了新的商业模式…

大话设计模式之装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许向现有对象动态地添加新功能&#xff0c;同时又不改变其结构。装饰模式通过将对象放入包装器中来实现&#xff0c;在包装器中可以动态地添加功能。 在装饰模式中&#xff0c;通常会有…

碳素光线疗法与宠物健康

碳素光线与宠物健康 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太阳的光线。太阳光线中、包含有动物健康所需要的极为重要的波长。因此、和户外饲养的动物相比、在室内喂养的观赏动物、…

基于深度学习的心律异常分类算法

基于深度学习的心律异常分类系统——算法设计 第一章 研究背景算法流程本文研究内容 第二章 心电信号分类理论基础心电信号产生机理MIT-BIH 心律失常数据库 第三章 心电信号预处理心电信号噪声来源与特点基线漂移工频干扰肌电干扰 心电信号读取与加噪基于小波阈值去噪技术的应用…

JetBrains全家桶激活,分享 WebStorm 2024 激活的方案

大家好&#xff0c;欢迎来到金榜探云手&#xff01; WebStorm公司简介 JetBrains 是一家专注于开发工具的软件公司&#xff0c;总部位于捷克。他们以提供强大的集成开发环境&#xff08;IDE&#xff09;而闻名&#xff0c;如 IntelliJ IDEA、PyCharm、和 WebStorm等。这些工具…

Tire树-不学面试后悔

先来一张图&#xff0c;看多少同学在面试中遇到这个题&#xff0c;然后被迫放弃&#xff0c;那就太可惜&#xff0c;因为这个题只要你往下看就会了 Trie&#xff08;发音类似 "try"&#xff09;或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字…

追光而遇 沐光同行——锐捷网络召开2024教育行业核心合作伙伴论坛

3月21日,主题为“追光而遇 沐光同行”的2024锐捷网络教育行业核心伙伴论坛在福州启幕。论坛汇聚了教育行业的精英与合作伙伴,议题主要聚焦于教育行业的数字化转型与创新发展,以及如何通过技术驱动,构建智慧教育生态,推动教育事业的高质量发展。作为行业领先的ICT基础设施及解决…

AXI Memory Mapped to PCI Express学习笔记(三)——IP核参数配置

在配置 AXI Memory Mapped to PCI Express core的过程中&#xff0c;需要根据设计需求调整各种参数&#xff0c;如数据位宽、时钟频率、输入输出接口等。这些参数将直接影响IP核的行为和性能&#xff0c;因此请务必仔细选择和配置。完成配置后&#xff0c;IP核生成&#xff0c;…

[激光原理与应用-77]:基于激光器加工板卡的二次开发软件的系统软硬件架构

目录 一、1个板卡、1个激光器、1个振镜的应用架构、1个工位 &#xff08;1&#xff09;PLC &#xff08;2&#xff09;MES &#xff08;3&#xff09;加工板卡 &#xff08;4&#xff09;激光加工板卡与激光器之间的转接卡 &#xff08;5&#xff09;DB25、DB15 &#x…

手机termux免root安装kali:一步到位+图形界面_termux安装kali-

1.工具 安卓包括鸿蒙手机、WiFi、充足的电量、脑子 2.浏览器搜索termuxvnc viewer下载安装。 3.对抗华为纯净模式需要一些操作先断网弹窗提示先不开等到继续安装的时候连上网智能检测过后就可以了 termux正常版本可以通过智能监测失败了就说明安装包是盗版 4.以后出现类似…

OpenCV初识

1、OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它由一系列的C函数和少量C类构成&#xff0c;同时提供Python、Java和MATLAB等语言的接口&#xff0c;实现了图像处理和计算机视觉方面的很多通用算…

【前端学习——js篇】11.元素可见区域

具体见&#xff1a;https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop&#xff0c;元素的上外边框至包含元素的上内边框之间的像素距离&#xff0c;其他offset属性如下图所示&#xff1a; 下面再来了解下clientWidth、clientHeight…

Memcached非关系型数据库介绍

使用背景 Memcached 不是一个数据库&#xff0c;而是一个高性能的分布式内存对象缓存系统。它主要用于减轻数据库负载&#xff0c;提高动态Web应用的速度、可扩展性和性能。Memcached 的工作原理是将数据存储在内存中&#xff0c;以提供快速的数据访问。当应用程序需要访问数据…

android 11 SystemUI 状态栏打开之后的界面层级关系说明之一

比如WiFi 图标的父layout为&#xff1a; Class Name: ButtonRelativeLayout Class Name: QSTileView Class Name: TilePage Class Name: PagedTileLayout Class Name: QSPanel Class Name: NonInterceptingScrollView Class Name: QSContainerImpl Class Name: FrameLayout Cl…

Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令

Docker搭建LNMP环境实战&#xff08;06&#xff09;&#xff1a;Docker及Docker-compose常用命令 此处列举了docker及docker-compose的常用命令&#xff0c;一方面可以做个了解&#xff0c;另一方面可以在需要的时候进行查阅。不一定要强行记忆&#xff0c;用多了就熟悉了。 1、…

Qt扫盲-QAssisant 集成其他qch帮助文档

QAssisant 集成其他qch帮助文档 一、概述二、Cmake qch例子1. 下载 Cmake.qch2. 添加qch1. 直接放置于Qt 帮助的目录下2. 在 QAssisant中添加 一、概述 QAssisant是一个很好的帮助文档&#xff0c;他提供了供我们在外部添加新的 qch帮助文档的功能接口&#xff0c;一般有两中添…

无人机+AI平安校园系统在天津大学成功运行

8月17日&#xff0c;北方天途航空联合天津大学&#xff0c;运用天途平安校园管理平台和大疆无人机场&#xff0c;开展无人机智能监控试点任务&#xff0c;协助学校保卫处监控人员和车辆情况&#xff0c;进行安全疏导和分流。 观看天途平安校园系统演示 现场工程师把天途平安校园…

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢&#xff0c;我个人认为&#xff0c;驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态&#xff0c;是无法直接操控底层的硬件的。我们需要利用系统调用&#xff08;open、read、write等&#xff09;&#xff0c;进入内核态…