【最优化】从图形理解单纯形法——不用单纯形表来解线性规划问题 / 单纯形表的本质与直觉

news2024/11/30 2:46:48

66ccff

单纯形法是解线性规划问题(LP)的最经典方法,很多人都了解单纯形法是用单纯形表来进行求解的,但是不了解背后的原理。

这篇博文介绍单纯型表的直觉。

需要的前置知识

  • 你需要了解:
    • 单纯形法实际上是在“爬山”,从任意一个边界点开始,每次沿着边界走,直到目标值无法继续上升。
    • 线性规划由于线性性质,问题对应的单纯形上的边界关于函数值的变化都是单调的。
    • 可以引入松弛变量将不等式约束转化为等式,以及所有变量 > = 0 >=0 >=0的约束

在这里插入图片描述

形式

对于这样的一个线性规划问题:

x 1 , x 2 ≥ 0 x_{1},x_{2}\geq0 x1,x20
x 1 ≤ 3000 x_1 \le 3000 x13000
x 2 ≤ 4000 x_2 \le 4000 x24000
x 1 + x 2 ≤ 5000 x_1+x_2 \le 5000 x1+x25000
max ⁡ 1.2 x 1 + 1.7 x 2 \max 1.2x_1+1.7 x_2 max1.2x1+1.7x2

可以对每一个不等式引入松弛变量:

紧 : x 1 , x 2 ,松: s 1 , s 2 , s 3 紧:x_1,x_2,松:s_1,s_2,s_3 :x1,x2,松:s1,s2,s3

x 1 , x 2 , s 1 , s 2 , s 3 ≥ 0 x_{1},x_{2},s_1,s_2,s_3\geq0 x1,x2,s1,s2,s30
x 1 + s 1 = 3000 x_1+\red{s_1}= 3000 x1+s1=3000
x 2 + s 2 = 4000 x_2+\red{s_2}= 4000 x2+s2=4000
x 1 + x 2 + s 3 = 5000 x_1+x_2 +\red{s_3}= 5000 x1+x2+s3=5000
max ⁡ 1.2 x 1 + 1.7 x 2 \max 1.2x_1+1.7 x_2 max1.2x1+1.7x2

一些直觉

  • 当前的问题的维度 n n n,实际上就是基变量的个数(在这里 n = 2 n=2 n=2
  • 基变量,就是紧的,在当前点满足其 ≥ 0 \ge0 0约束的变量;松弛变量则在当前点不满足 ≥ 0 \ge0 0约束。
  • 在边界上移动时,有且只能有 n n n ≥ 0 \ge0 0约束被满足(在这里 n = 2 n=2 n=2
  • 单纯形法的步骤:
    • step1: 选择出基变量(从该变量对应的 > = 0 >=0 >=0约束边界上面离开) 选择标准有很多,经典的标准是:能使得目标函数上升最快,斜率 k k k系数最大的一个
      • 在这个例子里,如果我们从 ( 0 , 0 ) (0,0) (0,0)开始,则应该选择 x 2 x_2 x2 ,因为它具有系数 1.7 1.7 1.7
    • step2: 选择入基变量走到该变量对应的 > = 0 >=0 >=0约束边界上),直观理解,就是问:随着我的出基变量逐渐增大,先碰到哪一个约束? 这里 x 1 x_1 x1 是基变量,所以 = 0 =0 =0;也就是问在 x 2 + s 1 = 4000 x_2+s_1=4000 x2+s1=4000 0 + x 2 + s 3 = 5000 0+x_2+s_3=5000 0+x2+s3=5000 这两个约束中,随着 x 1 x_1 x1增大,哪一个先使得非基变量=0?显然是 s 1 s_1 s1, 因为 5000 1 > 4000 1 \frac{5000}{1}>\frac{4000}{1} 15000>14000。也就是说,我们比较每一个约束里面常数和非基变量的系数之比,选择最小的(注意:对于 s i = 3000 + x j s_i=3000\red{+}x_j si=3000+xj这样形式的约束我们不考虑,因为 x j x_j xj增大永远无法使得 s j = 0 s_j=0 sj=0(对应单纯形表要求比值非正数)),即可找到最先满足约束的那个变量,即我们的入基变量 s 1 s_1 s1
    • 直到用基变量表示的目标函数里面每一个变量系数都小于0,就说明无法再通过增大变量值使得目标值增大,于是算法找到最优解,停止。

从(0,0)开始

紧 : x 1 , x 2 ,松: s 1 , s 2 , s 3 紧:x_1,x_2,松:s_1,s_2,s_3 :x1,x2,松:s1,s2,s3

x 1 , x 2 , s 1 , s 2 , s 3 ≥ 0 x_{1},x_{2},s_1,s_2,s_3\geq0 x1,x2,s1,s2,s30

R H S 都用基变量表示 RHS都用基变量表示 RHS都用基变量表示
s 1 = 3000 − x 1 s_1=3000-x_1 s1=3000x1
s 2 = 4000 − x 2 s_2=4000-x_2 s2=4000x2
s 3 = 5000 − x 1 − x 2 s_3=5000-x_1-x_2 s3=5000x1x2
max ⁡ 1.2 x 1 + 1.7 x 2 \max 1.2x_1+1.7 x_2 max1.2x1+1.7x2

进行一次迭代之后:( x 2 x_2 x2松, s 2 s_2 s2紧)

紧 : x 1 , s 2 ,松: x 2 , s 1 , s 3 紧:x_1,\red{s_2},松:\blue{x_2},s_1,s_3 :x1,s2,松:x2,s1,s3

x 1 , x 2 , s 1 , s 2 , s 3 ≥ 0 x_{1},x_{2},s_1,s_2,s_3\geq0 x1,x2,s1,s2,s30

R H S 都用基变量表示 RHS都用基变量表示 RHS都用基变量表示
s 1 = 3000 − x 1 s_1=3000-x_1 s1=3000x1
x 2 = 4000 − s 2 \blue{x_2} = 4000-\red{s_2} x2=4000s2
s 3 = 1000 − x 1 + s 2 s_3=\green{1000 -x_1 + s_2} s3=1000x1+s2
max ⁡ 1.2 x 1 + 1.7 ( 4000 − s 2 ) = 1.2 x 1 + 6800 − 1.7 s 2 \max 1.2x_1+1.7 \green{(4000-s_2)} = 1.2x_1 + 6800 - 1.7s_2 max1.2x1+1.7(4000s2)=1.2x1+68001.7s2

再进行一次迭代:( x 1 x_1 x1松, s 3 s_3 s3紧)

紧 : s 3 , s 2 ,松: x 2 , x 1 , s 1 紧:\red{s_3},\red{s_2},松:\blue{x_2},\blue{x_1},s_1 :s3,s2,松:x2,x1,s1

x 1 , x 2 , s 1 , s 2 , s 3 ≥ 0 x_{1},x_{2},s_1,s_2,s_3\geq0 x1,x2,s1,s2,s30

R H S 都用基变量表示 RHS都用基变量表示 RHS都用基变量表示
x 1 = 3000 − s 1 x_1 = 3000 -s_1 x1=3000s1
x 2 = 4000 − s 2 \blue{x_2} = 4000-\red{s_2} x2=4000s2
x 1 = 1000 − s 3 + s 2 \blue{x_1} = 1000 -s_3+s_2 x1=1000s3+s2
max ⁡ 1.2 x 1 + 6800 − 1.7 s 2 = 1.2 ( 1000 − s 3 + s 2 ) + 6800 − 1.7 s 2 = 8000 − 1.2 s 3 − 0.5 s 2 \max 1.2x_1 + 6800 - 1.7s_2 = 1.2\green{(1000 -s_3+s_2)} + 6800 - 1.7s_2 =\purple{ 8000 -1.2s_3-0.5s_2} max1.2x1+68001.7s2=1.2(1000s3+s2)+68001.7s2=80001.2s30.5s2

注意到:因为变量前面的系数都小于0,因此无法继续改进,我们此时达到了最优值 8000

在这里插入图片描述

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

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

相关文章

劫持 PE 文件:新建节表并插入指定 DLL 文件

PE格式简介 PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。PE格式衍生于早期建立在VAX(R)VMS(R)上的COFF(Common Object File Format)文件格式。 Portable 是指对于不同的Windows版本和不同的CPU类型上…

构建高效数据流转的 ETL 系统:数据库 + Serverless 函数计算的最佳实践

作者:柳下 概述 随着企业规模和数据量的增长,数据的价值越来越受到重视。数据的变化和更新变得更加频繁和复杂,因此及时捕获和处理这些变化变得至关重要。为了满足这一需求,数据库 CDC(Change Data Capture&#xff…

深入解析 可空值类型

前言: 问:为什么会有可空值类型的诞生? 答:应对在某些特定场景中获取的信息可能是不完整的。 C# 1中的可空值类型 在C#1中没有对应的表示Null值的方法。当时普遍都是采用其他方式。第一种在数据缺失的情况下给其一个默认值。第…

论文阅读: AAAI 2022行人重识别方向论文-PFD_Net

本篇博客用于记录一篇行人重识别方向的论文所提出的优化方法《Pose-Guided Feature Disentangling for Occluded Person Re-identification Based on Transformer》,论文中提出的PDF_Net模型的backbone是采用《TransReID: Transformer-based Object Re-Identificati…

【JavaWeb学习笔记】17 - ThreadLocal

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/threadlocal/src/com/yinhai/thread 目录 项目代码 一、什么是ThreadLocal? 二、ThreadLocal快速入门 三、源码解读 一、什么是ThreadLocal? 1. ThreadLocal的作用,可以实现在同一个线…

打破成本壁垒,免费SSL证书为中小企业保驾护航

HTTPS,这个曾经看似遥远的技术词汇,如今已与我们每个人的网络生活息息相关。而实现HTTPS加密传输的关键一环——SSL证书,正以其独特的安全性能,为网站筑起一道坚实的防护墙。更令人惊喜的是,免费SSL证书服务已经到来&a…

SpringBoot+MyBatis+MySQL增删改查(一)(IDEA创建SpringBoot项目)

使用IDEA创建SpringBootMyBatisMySQL进行项目搭建 1.创建项目 文件 --> 新建 --> 项目 填写项目基本信息 项目名称、存放位置、项目语言、项目类型、JDK版本、打包 Web选项选择Spring Web SQL选项中勾选JDBC API、MyBatis Framework、MySQl Driver选项 至此一个空项目…

【深度学习:LSTM Networks】了解 LSTM 网络

【深度学习:LSTM Networks】了解 LSTM 网络 循环神经网络长期依赖问题 相关知识传送门: LSTM 网络LSTM 背后的核心理念LSTM 分步演练长短期记忆的变体Conclusion 循环神经网络 人类在思考时并不是每时每刻都从头开始。当你阅读这篇文章时,你…

单点登录的三种模式

介绍 单点登录存在的意义在于,比如公司里有多个系统,我只想登录一次,便可以访问公司的多个子系统 单点登录有很多模式,目前已知三种模式 1、cookie session模式 2、token模式 3、token refresh_token模式 Cookie Session模式…

基于OpenCv的车道检测

项目背景和步骤 车道检测是自动驾驶领域不可或缺的一环 具体步骤如下: 一、将图像灰度化,并进行适度的高斯滤波,剔除干扰 二、利用Canny边缘检测,检测出车道和其它物体的边缘 三、使用ROI区域截取,截取需要的部分&a…

1.1 FMEA目的

文章目录 1.1 目的和说明 潜在失效模式和影响分析(FMEA)是美国汽车工业行动集团(AIAG)和德国汽车工业联合会(VDA)的整车厂(OEM)和一级供应商成员合作逾三年的成果。FMEA手册已进行改…

看懂基本的电路原理图(入门)

文章目录 前言一、二极管二、电容三、接地一般符号四、晶体振荡器五、各种符号的含义六、查看原理图的顺序总结 前言 电子入门,怎么看原理图,各个图标都代表什么含义,今天好好来汇总一下。 就比如这个电路原理图来说,各个符号都…

10万蜜蜂同屏作战 UnityECS蜜蜂大战项目实践(附实现前后对比)

本文禁止转载 本项目是Unity官方推荐的ECS入门训练中的蜜蜂大战项目 知乎文章同步链接 浅谈ECS工作栈 提到ECS就不得不提JobSystem和Burst编译器,三者共同组成了Unity面向数据的DOTS(Data-Oriented Technology Stack)框架。 ECS&#xf…

Linux-------rm命令超详解(狠狠爱住)

目录 rm 命令用于在Linux系统中删除指定的文件或目录 基本语法: 常用选项: 示例用法: 放在文末的话: 补充: rm 命令用于在Linux系统中删除指定的文件或目录 基本语法: rm [选项] 文件名/目录名 常用…

Eclipse汉化

目录 一、首先电脑已经下载好Eclipse 二、打开Eclipse Babel 三、打开Eclipse 1、工具栏——>Help——> Install New Software 2、 点击Add 3、添加复制的链接,点击Add 4、等待加载 5、勾选Chinese(Simpliied),而后Next&…

超市订单管理系统

比较简单的超市订单管理系统

在Google Colab中调用Gemini的API实现智能问答

一、引言 Google终于放出大招,在2023年12月6日正式推出规模最大、功能最强大的人工智能模型Gemini,对标ChatGPT,甚至有要赶超ChatGPT-4.0的节奏。 相比之前的Bard,Gemini的文本理解能力、图片识别能力和语义抽取能力大大增强&am…

HTML进阶

列表、表格、表单 文章目录 列表、表格、表单01-列表无序列表有序列表定义列表 02-表格表格结构标签-了解合并单元格 03-表单input 标签input 标签占位文本单选框上传文件多选框下拉菜单文本域label 标签按钮 04-语义化无语义的布局标签有语义的布局标签 05-字符实体 01-列表 …

SpringBoot之入门使用

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 SpringBoot之入门使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、Spring缺点分析…

Springboot整合Elasticsearch 7.X 复杂查询

这里使用Springboot 2.7.12版本&#xff0c;Elasticsearch为7.15.0。 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> yaml文件配置…