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

news2024/11/21 2:21:59

文章目录

  • 一、单纯形法的实质(几何原理)
    • 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.coloradmin.cn/o/1282480.html

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

相关文章

SPM/SCM 流量跟踪体系

SPM SPM(shopping page mark,导购页面标记) 是淘宝社区电商业务(xTao)为外部合作伙伴(外站)提供的跟踪引导成交效果数据的解决方案 注:也有解释 SPM 为超级位置模型(Super Position…

研习代码 day47 | 动态规划——子序列问题3

一、判断子序列 1.1 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde&…

无需公网IP!Apache服务器本地部署与内网穿透实现公网访问

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

VPS简介:基于Amazon Ligtsail的概述

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

天翼云:“百万IOPS”助推政企上云

随着数字化转型的加速,越来越多的企业选择了业务上云。众所周知,不论是政企关键/核心业务中的大型数据库、NoSQL、AI训练,还是互联网业务中的游戏、渲染等场景,对数据读写IOPS和时延有极高的要求。作为全球领先的云服务商&#xf…

如何打印社保参保凭证

西安市: 陕西政务服务网: 个人服务 珠海市: 广东政务服务网: 用户登录 | 珠海市人力资源和社会保障网上服务平台 武汉市: 湖北政务服务网: 湖北政务服务网

Android实验:绑定service实验

目录 实验目的实验内容实验要求项目结构代码实现代码解释结果展示 实验目的 充分理解Service的作用,与Activity之间的区别,掌握Service的生命周期以及对应函数,了解Service的主线程性质;掌握主线程的界面刷新的设计原则&#xff…

JavaWeb 前端工程化

前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要目的为了提高效率和降低成本。 前端工程化实现技术栈 前端工程化实现的技术栈有很多,我们采用ES6nodejsnpmViteVUE3routerpiniaaxiosElement-plus组合来实现 ECMAScri…

游戏被流量攻击会有什么样的影响,该用什么样的防护方式去处理

德迅云安全-领先云安全服务与解决方案提供商德迅云游戏盾专门针对游戏进行防护,可免费提供防护方案~ 如果游戏被流量攻击会产生以下影响: 服务器过载:流量攻击会导致游戏服务器接收到的请求数量急剧增加,超出服务器的处理能力。这…

Reactor实战,创建一个简单的单线程Reactor(理解了就相当于理解了多线程的Reactor)

单线程Reactor package org.example.utils.echo.single;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.*; import java.util.Iterator; import java.util.Set;public class EchoServerReactor implements Runnable{Selector sele…

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

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

【灵魂 |数据结构与算法】 数据结构必备经法(开山篇),一起修炼算法经法!

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

微信小程序引入node_modules依赖

微信小程序不支持直接读取node_modules 首先在目录文件夹下cmd输入npm init命令 D:\小程序\project\calendar\calendar_1>npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible…

巧用乖离率BIAS,捕捉买卖信号

一、认识BIAS乖离率 BIAS,中文名称是乖离率,它表示一定时期内股价与其MA均线的偏离程度。这个指标的理论基础是如果股价偏离均线太远,不管股价在均线之上还是在均线之下,它最终都会向均线靠拢。 乖离率(当日收盘价-N日…

德国进口高速主轴电机在机器人上的应用及选型方案

随着机器人技术的日新月异,高速主轴电机在机器人领域的应用也日趋广泛。德国进口的SycoTec高速主轴电机,以其高转速、高精度、高刚度的特点,在机器人的切割、铣削、钻孔、去毛刺等加工应用中发挥着关键作用。 一、高速主轴电机的特点 SycoT…

外汇天眼:想像巴菲特那样纵横市场?那你和他之间就差个它...

在金融市场上,有些人以巴菲特为榜样,希望像他一样纵横市场,成为投资大师。然而大多数人只是看到了巴菲特表面的成功,却忽视了他在投资过程中所付出的努力和智慧。实际上,如果你想成为像巴菲特那样的投资者,…

PPT NO.5 科研绘图常用操作快捷键

1、Ctrl键 ①按住Ctrl键,可以跳选多个对象: ②按住Ctrl键,同时拖动对象即可进行复制: ③按住Ctrl键,可以对对象进行中心放大或中心缩小: 2、Shift键 ①按住Shift键,拖动对象只能水平或垂直移动…

本地存储与复杂数据类型转换

1. 本地存储介绍 2.1 本地存储分类 - localStorage // 存储一个名字localStorage.setItem(uname, abc)// 获取名字console.log(localStorage.getItem(uname));// 删除本地存储 只删名字// localStorage.removeItem(uname)// 改localStorage.setItem(uname, aaa)// 存一个年龄 …

使用Linux docker方式快速安装Plik并结合内网穿透实现公网访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上传或者…

ApachePOI入门案例——向Excel文件写入内容

依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml…