【运筹优化】运筹学导论:求解线性规划问题 - 单纯形法

文章目录

  • 一、单纯形法的实质(几何原理)
    • 1.1 示例的求解
    • 1.2 关键的解原理
      • 1.2.1 解原理1
      • 1.2.2 解原理2
      • 1.2.3 解原理3
      • 1.2.4 解原理4
      • 1.2.5 解原理5
      • 1.2.6 解原理6
  • 二、构建单纯形法(代数原理)
  • 三、单纯形法的代数形式
    • 3.1 初始化
    • 3.2 最优性检验
    • 3.3 确定移动的方向(迭代的步骤1)
    • 3.4 确定在何处停下(迭代的步骤2)
    • 3.5 求解新的BF解(迭代的步骤3)
    • 3.6 新BF解的最优性检验
    • 3.7 第2次迭代和最优解结果
  • 四、单纯形法的表格形式
    • 4.1 单纯形法的总结(以迭代1为例)
      • 4.1.1 初始化
      • 4.1.2 最优性检验
      • 4.1.3 迭代
      • 4.1.4 第二次迭代与最优解
  • 五、单纯形法的突破
    • 5.1 入基变量的相持
    • 5.2 出基变量的相持(退化)
    • 5.3 无出基变量(Z无界)
    • 5.4 多个最优解
  • 六、改造适用于其他模型形式
    • 6.1 等式约束
    • 6.2 负的右端项
    • 6.3 大于等于形式的约束条件
    • 6.4 最小化
    • 6.5 求解放射治疗的例子
    • 6.6 两阶段法
    • 6.7 无可行解
    • 6.8 允许为负的变量
      • 6.8.1 允许为负的有界变量
      • 6.8.2 允许为负的无界变量
  • 七、优化后分析
    • 7.1 再优化
    • 7.2 影子价格
    • 7.3 灵敏度分析
    • 7.4 参数线性规划


在阅读本博客前,请了解线性规划相关的知识:【运筹优化】运筹学导论:线性规划导论

单纯形法是求解线性规划问题的基本方法,它是由 George Dantzig 于 1947 年提出的。单纯形法已经被证明是真正有效的方法,如今通常用于在计算机上解决大型问题。

本博客介绍单纯形法的主要内容,介绍它的一般原理、几何解释以及如何用它求解任意标准形式的线性规划问题。

一、单纯形法的实质(几何原理)

单纯形法是一个代数计算过程,它本质上是基于几何原理。为了说明单纯形法的一般几何原理,将以 【运筹优化】运筹学导论:线性规划导论 中提到的 Wyndor Glass 公司问题为例。

该例子的模型和图形如下图所示。其中,每个约束边界是一条直线约束边界的交点是这个问题的角点解(corner-point solution)在可行域上的角点解被称为角点可行解(CPF solution)

在这里插入图片描述

定理:对于一个有 n 个决策变量的线性规划问题来说,每个角点解位于 n 条约束边界的交点处(在 Wyndor Glass 公司的例子中,仅有 2 个决策变量,因此,每个角点解位于 2 个约束边界线的交点处)

根据上述定理,我们可以推广得到:

定理:对于任意含有 n 个决策变量的线性规划问题,当 2 个 CPF 解位于 n-1 条相同的约束边界上时,则它们是相邻的。这两个相邻的 CPF 解连成一条线段,这个线段在约束边界上,被称为可行域的边(edge)。

在 Wyndor Glass 公司的例子中,2 条约束边界产生一个 CPF 解,因此,每个 CPF 解都有两个相邻的 CPF 解(每个都在两条边之一的另一端,正如表 4.1 所列举的那样)。

在这里插入图片描述

我们之所以对相邻的 CPF 解感兴趣,是因为后续介绍的这些解的基本性质能够为我们判断某个 CPF 解是否最优提供有效的思路。

在这里插入图片描述

例如,根据表 4.1 ,由于 CPF 解(2,6)的 Z=36,大于 (0,6) 对应的 Z=30 和 (4,3) 对应的 Z=27,因此,它必定是最优的。

最优性检验是单纯形法的一个步骤,在判断是否得到最优解时使用。

1.1 示例的求解

在这里插入图片描述
在这里插入图片描述

1.2 关键的解原理

这一节介绍单纯形法六个关键的解原理,这些解原理提供了前一小节所述步骤背后的基本原理

1.2.1 解原理1

第一个解原理给出了线性规划问题中 CPF 解和最优解之间的关系。

解原理1:对于至少有一个最优解的线性规划问题来说,最好的 CPF 解一定是最优解。因此,单纯形法只关注 CPF 解。

在线性规划问题中,可行解一般有无限多个,运用解原理1可以将需要测试的解的个数缩减到一个很小的有限的数,这是一个大大的简化。

1.2.2 解原理2

第二个解原理定义单纯形法的过程

解原理2:单纯形法是一个迭代算法,它重复着一系列固定的步骤,直到得到最优解。

单纯形法迭代步骤如下:

在这里插入图片描述

1.2.3 解原理3

解原理3定义了单纯形法的一般起始步骤

解原理3:只要有可能,单纯形法的起始步骤就选择原点(所有决策变量为0)作为初始的 CPF 解。

如果所有决策变量均为非负的话,一般选择原点作为初始 CPF 解是可能的,因为这些非负约束的边界相交形成的原点就是角点解,除非它因不满足一个或多个约束条件而不可行。

当有太多决策变量以致于不能用图解的方式找出初始 CPF 解时,应用解原理3可以减少为寻找初始 CPF 解而需要使用的代数运算步骤

1.2.4 解原理4

解原理4:已知一个 CPF 解,从计算上来说,获取它的相邻 CPF 解的信息比获取其他 CPF 解的信息快。

根据解原理4,单纯形法迭代时,从当前 CPF 解移向更好的 CPF 解的计算总是考虑相邻的 CPF 解,不考虑其他的 CPF 解。因此,后续直至寻找出最优解的全部轨迹实际上是沿着可行域的边界的。

1.2.5 解原理5

解原理5:得到当前的 CPF 解后,单纯形法考察从这个解出发的可行域的每一条边。虽然每一条边都指向另一端的相邻 CPF 解,但是单纯形法不需要计算相邻 CPF 解,而是仅仅判断沿着这条边移动时 Z 的增长率。在拥有正的增长率的边界线中,单纯形法总是选择增长率最大的边移动。当求出这条边另一端的相邻 CPF 解后,它就会作为新的当前的 CPF 解,进行下一次最优性检验和迭代。

在这里插入图片描述

1.2.6 解原理6

解原理6实际上是解原理5的推广

解原理6:最优性检验就是检查是否存在一条边从当前 CPF 解出发,带给 Z 正的增长率,如果没有,则证明当前 CPF 解是最优解。

在这里插入图片描述

二、构建单纯形法(代数原理)

前面介绍了单纯形法的几何原理,但是这个算法通常是在计算机上实施的,计算机只能执行代数运算,因此需要把上述几何原理描述的求解过程转化为可应用的代数计算步骤。

代数求解步骤是建立在求解方程组的基础上的,因此,构建单纯形法代数运算的第一步是把不等式约束转化为等式约束。这个转化依靠引入松弛变量 (slack variables) 完成。

为了说明这个转化过程,还是以 Wyndor Glass 公司问题为例:

在这里插入图片描述

关于松弛变量的额外解释如下:

  • 如果当前解中的某个松弛变量等于0,则该解位于对应约束条件的约束边界线上
  • 如果当前解中的某个松弛变量小于0,则该解在约束条件边界可行的一侧
  • 如果当前解中的某个松弛变量大于0,则该解在约束条件边界不可行的一侧

之前介绍的术语(如 CPF 解)仅仅适用于问题的原始形式,因此我们仍然需要介绍与扩展形式相对应的术语

扩展解(augmented solution):是原始变量(决策变量)取值再加上松弛变量取值后形成的解。

在这里插入图片描述

基本解(basic solution):是扩展后的角点解。

在这里插入图片描述

基本可行解(BF 解):是扩展的 CPF 解。

在这里插入图片描述

基本解和角点解(或者 BF 解和 CPF 解)的唯一区别在于是否包含松弛变量

因为基本解和 BF 解是线性规划标准词汇中非常重要的部分,因此我们需要弄清楚它们的代数性质。

在 Wyndor Glass 公司的例子中,注意到约束方程组中有 5 个变量和 3 个等式,因此有:

在这里插入图片描述

一个基本解有如下性质:

  • 每个变量都可以作为非基变量或基变量
  • 非基变量(non-basic variables) 的值设为0
  • 基变量(basic variables) 的值作为方程组(约束条件的扩展形式)的联立解被求得,这一组基变量通常被称为 “基”
  • 基变量的个数等于约束条件(方程)的个数。因此,非基变量的个数等于变量总数减去约束条件个数
  • 如果基变量满足非负约束,则基本解为 BF 解

在这里插入图片描述

就像称两个 CPF 解是相邻的一样,与之对应的 BF 解也被称作是相邻的。

这里有一个判断 2 个 BF 解是否相邻的简单方法: 当非基变量只有一个不同时,两个 BF 解相邻。这意味着,基变量除了一个不同外其余也是相同的,虽然其数值可能不同。

因此,从当前 BF 解移动到另一个相邻的 BF 解时,通常围绕着把一个变量从非基变量转变为基变量来进行

在这里插入图片描述

当我们处理问题的扩展形式时,同时把目标函数当作新的约束方程考虑和处理会很方便。因此,在我们开始单纯形法前,这个问题需要用同样的方法再改写一下:

在这里插入图片描述

三、单纯形法的代数形式

为了把单纯形法的几何原理和代数原理联系起来,在表 4.2 中,从几何和代数两个角度概述了单纯形法是如何求解 Wyndor Glass 公司案例的。

在这里插入图片描述
在这里插入图片描述

3.1 初始化

在这里插入图片描述

3.2 最优性检验

在这里插入图片描述
在这里插入图片描述

3.3 确定移动的方向(迭代的步骤1)

在这里插入图片描述
在这里插入图片描述

3.4 确定在何处停下(迭代的步骤2)

在这里插入图片描述
在这里插入图片描述

3.5 求解新的BF解(迭代的步骤3)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.6 新BF解的最优性检验

在这里插入图片描述

3.7 第2次迭代和最优解结果

在这里插入图片描述
在这里插入图片描述

四、单纯形法的表格形式

上一节讲述的单纯形法的代数形式可能是理解该算法基本逻辑关系最好的计算形式,然而,它不是进行所需计算的最简便的形式。当你需要手工解决问题时,推荐采用这节中讲述的表格形式。

在这里插入图片描述

4.1 单纯形法的总结(以迭代1为例)

这一节,总结单纯形法的表格形式,同时简单地介绍它在 Wyndor Glass 公司问题中的应用。记住,这个逻辑与上一节讲述的代数形式是一样的。只是当前和后续迭代得到的方程组的表现形式有了改变。还有,在最优性检验或进行迭代中步骤1和步骤2做判断时,我们无需把变量移动到方程的右端项。

4.1.1 初始化

在这里插入图片描述

4.1.2 最优性检验

在这里插入图片描述

4.1.3 迭代

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.1.4 第二次迭代与最优解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意,单纯形法的代数和表格两种形式是等价的。当要了解单纯形法背后的逻辑原理时,使用代数形式较好;但表格形式使计算工作更简单、简洁。因此,以后我们一般使用表格形式。

五、单纯形法的突破

如果由于一些相持或其他类似的模糊情况出现,按单纯形法的各种选取规则并无法提供一个明确的选择时应该如何处理?下面我们详细讨论这部分的内容。

5.1 入基变量的相持

在这里插入图片描述

5.2 出基变量的相持(退化)

在这里插入图片描述

5.3 无出基变量(Z无界)

在这里插入图片描述
在这里插入图片描述

5.4 多个最优解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、改造适用于其他模型形式

在这里插入图片描述
在这里插入图片描述

6.1 等式约束

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:上面举的例子只有一个等式约束。如果一个线性规划模型有多于1个的等式约束,那么每一个都用这种方法处理。

6.2 负的右端项

在这里插入图片描述

6.3 大于等于形式的约束条件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4 最小化

在这里插入图片描述

6.5 求解放射治疗的例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.6 两阶段法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.7 无可行解

在这里插入图片描述
在这里插入图片描述

6.8 允许为负的变量

在这里插入图片描述

6.8.1 允许为负的有界变量

在这里插入图片描述

6.8.2 允许为负的无界变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、优化后分析

在这里插入图片描述

在这里插入图片描述

7.1 再优化

在现实中,找到一个线性规划模型的最优解之后,对该问题略加变化的模型,我们经常需要再次(常常是多次)求解,例如:模型调试阶段、优化后分析阶段

一种简单的处理方法是,每次变化后,都从头开始运行单纯形法。但是,现实中的线性规划模型通常很大,有成百上千甚至几百万个约束条件和变量。在这样的情况下,每次重新运行单纯形法的方法显得效率较为低下

一个更有效率的方法是再优化,再优化方法包括:推断如何把模型的变化反映到最终的单纯形表中。如此一来,被修改的单纯形表和原先模型的最优解就可以作为新模型的初始表和初始基本解。如果这个解对新模型是可行的,那么就从该初始BF解开始,照常继续运行单纯形法;如果解不可行,被称为对偶单纯形法的相应算法可能被用来找到新的最优解。这个方法同样是从这个基本解开始进行的,需要注意的是,这里应用对偶单纯形法的要求是修订后的最终表仍能通过最优性检验,如果不能通过,则可由一个被称为原始-对偶(primal-dual)的算法代替。

在这里插入图片描述

7.2 影子价格

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3 灵敏度分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4 参数线性规划

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网件R8500 trojan

一 将路由器刷机成改版梅林 路由器首页的Firmware:380.70_0-X7.9.1是梅林改版 380.xx 梅林原版固件 380.xx_x 梅林改版固件 必须是改版梅林才支持trojan,所以要确保是梅林改版固件 点击上传文件,选择下载好的改版固件,固件地址下载传送门…

TA-Lib学习研究笔记(八)——Momentum Indicators 下

TA-Lib学习研究笔记(八)——Momentum Indicators 下 Momentum Indicators 动量指标,是最重要的股票分析指标,能够通过数据量化分析价格、成交量,预测股票走势和强度,大部分指标都在股票软件中提供。 21. …

使用Plex结合cpolar搭建本地私人媒体站并实现远程访问

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

Angular 由一个bug说起之三:为什么时不时出现额外的水平/垂直滚动条?怎样能更好的防止它的出现?

目录: 什么是单元溢出 控制滚动条出现的属性 怎样能减少意外的滚动条出现 一、什么是单元溢出 在说到这个问题之前我们先简单阐述一下视图窗口(Viewport)和视图内容(View Content) 视图窗口简单来说就是呈现内容的视口,浏览器就是一个窗口&#xff…

【flink番外篇】1、flink的23种常用算子介绍及详细示例(2)- keyby、reduce和Aggregations

Flink 系列文章 1、Flink 专栏等系列综合文章链接 文章目录 Flink 系列文章一、Flink的23种算子说明及示例6、KeyBy7、Reduce8、Aggregations 本文主要介绍Flink 的3种常用的operator(keyby、reduce和Aggregations)及以具体可运行示例进行说明. 如果需要…

【设计模式】职责链模式设计在线文档帮助系统

职责链模式设计在线文档帮助系统 任务三:使用职责链模式设计在线文档帮助系统 某公司欲开发一个软件系统的在线文档帮助系统,用户可以在任何一个查询环境中输入查询关键字,如果当前查询环境下没有相关内容,则系统会将查询按照一定…

Ubuntu22.04 使用Docker部署Neo4j出错 Exited(70)

项目场景: 最近需要使用Neo4j图数据库,因此打算使用docker部署 环境使用WSL Ubuntu22.04 问题描述 拉下最新Neo4j镜像,执行命令部署 启动容器脚本 docker run -d -p 7474:7474 -p 7687:7687 \ --name neo4j \ --env "NEO4J_AUTHneo…

git的安装及ssh配置(Linux)

环境 CentOS Linux release 7.9.2009 (Core) Xftp7 安装 方法一:yum安装 yum是一个客户端软件,就好比手机上的应用商店,帮助我们对软件的下载、安装和卸载 1、首先查看自己是否安装过git [rootxiaoxi ~]# git -bash: git: command not fo…

一文入门Python面向对象编程(干货满满)

在开始之前,我一直企图找到一个通俗直观的例子来介绍面向对象。找来找去,发现什么都可以是面向对象,什么又都不是面向对象。后来我发现,人类认识社会的方式更多的就是面向对象的方式。“物以类聚、人以群分”,这句话好…

观察者模式(常用)

观察者模式(Observer模式) 在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者…

VPS简介:基于Amazon Ligtsail的概述

当你作为一个开发者,你想要开发自己的系统,构建自己的系统架构时,你会有以下两种选择:第一种就是亲自去挑选组件,例如:云服务器、存储、IP地址等等,然后再花时间自己组装起来,就像该…

VIVADO-FFT IP核学习记录

根据用户手册使用IP核 ① 找到user guide / product guide 并打开 ② 找到Customizing and Generating the Core(不同手册可能题目不一样),查看IP核的创建过程中各个参数的意义和设置方法。 ③ 找到port description ,查看接口注释 根据网络教程使用…

Python中PyQt5可视化界面通过拖拽来上传文件

注:这个窗口提供了一个快速上传文件的小tips,如果需要对上传的文件进行进一步处理的可以在“processFiles”函数或者编写其它函数进行扩充就可以。 1、需要安装模块 pip install PyQt5 2、运行效果 1、通过拖拽的方式上传需要的文件到窗口,会…

06 g2o 学习

文章目录 06 g2o 学习6.1 概念6.2 框架简介6.3 代码示例 06 g2o 学习 6.1 概念 g2o(General Graphic Optimization)是基于图优化的库。图优化是把优化问题表现成图的一种方式。一个图由若干个顶点(Vertex),以及连接这这些顶点的边(Edge)组成。用顶点表示优化变量&…

2024品牌营销为何需要提供“情绪价值”和“感官滋养”?徐礼昭

什么是情绪价值? 品牌营销在当今市场中,已经超越了单纯的产品推广和销售,更多地涉及到提供“情绪价值”和“感官滋养”。 情绪价值是指产品或服务能够引发的消费者情感反应和共鸣,从而满足消费者情感需求的一种价值。它与产品的…

蓝桥杯 动态规划

01 数字三角形 #include<bits/stdc.h> using namespace std; const int N105; using lllong long; ll a[N][N],dp[N][N]; int main(){int n;cin>>n;for(int i1;i<n;i){for(int j1;j<i;j){cin>>a[i][j];}}for(int i5;i>1;i--){for(int j1;j<i;j){…

解决SecureFX的中文乱码问题

SecureFX的乱码截图 一般出现乱码问题&#xff0c;看起来会很烦&#xff0c;所以&#xff0c;我们要干掉它。 解决步骤&#xff1a; 1&#xff0c;在SecureFX中&#xff0c;选择“选项”-“全局选项”&#xff0c;打开对话框&#xff0c;不同的版本可能会显示略有不同&#x…

【Openstack Train】十五、glance命令合集

本文介绍了glance组件的常用命令。关于openstack的安装&#xff0c;可以参考以下内容&#xff1a; 【Openstack Train安装】一、虚拟机创建 【Openstack Train安装】二、NTP安装 【Openstack Train安装】三、openstack安装 【Openstack Train安装】四、MariaDB/RabbitMQ 安…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)项目搭建 持续更新中… java+vue+微信小程序项目】从零开始搭建——健身房管理平台 项目简介Java项目搭建(IDEA)1.新建项目2.项目类型3.项目设置4…
最新文章