单纯形法

单纯形法的基本思想(Simplex method)

简要地讲就是,每次从单纯形上的一个顶点走到一个更好的顶点直到找到最小(大)值

线性规划是由两部分组成的:线性的目标函数和线性的限制条件。

限制条件由等式和不等式组成。每一个线性的等式在几何上就限制了可行解必须在一个超平面上。每一个线性的不等式在几何上就限制了可行解必须在一个超平面的一边。于是这些限制条件就限制了可行解必须在某个单纯形上,所谓单纯形就是很多超平面围成的区域。

由于目标函数也是线性的,所以如果最优解存在,一定有一个最优解是单纯形上的一个顶点。所以目标变成了找单纯形上最好的顶点。

最好的顶点怎么找?最直接的办法就是逐个找。聪明一点的办法是,每次找到的新的顶点都比原来的好。单纯形法就是这类方法。

问题描述

minz=CXs.t.AX=bX0

单纯形法基本思路:从一个初始的基本可行解出发,选中一条达到最优基本可行解的最佳途径。

确定初始的基本可行解

约束方程 AX=b 表示为:

AX=(BN)(XBXN)=BXB+NXN=b

得: XB=B1bB1NXN

若令所有非基变量 XN=0

则基变量 XB=B1b

由此可得初始的基本可行解 X=(B1b0)

判断现行的基本可行解是否最优

假如已经求得一个基本可行解 X=(B1b0) 将其代入目标函数,可求得相应的目标函数值

z=CX=(CBCN)(B1b0)=CBB1b

其中, CB CN 分别表示基变量和非基变量所对应的目标函数系数子向量.

怎么判断 CBB1b 是否已经达到最小值?

minz=CBB1b+(CNCBB1N)XNs.t.XB=B1bB1NXNXB,XN0

定理1 (最优化准则)如果 σN0 ,则基可行解 x=(B1b0) 为原问题的最优解.

其中, σN=CNCBB1N=(σm+1,σm+2,,σn) 称为非基变量 XN 的检验向量,它的各个分量称为检验数.

σN 的每一个检验数均大于等于0,即 σN0 ,则目前的基本可行解就是最优解.

基本可行解的改建— 基变换

先从检验数为负的非基变量中确定一个换入变量,使它从非基变量变成基变量,再从原来的基变量中确定一个换出变量,试它从基变量变成非基变量,由此可得到一个新的基本可行解.

换入变量的确定—最大减小原则

选取最小负检验数所对应的非基变量为换入变量,即若

min{σj|σj<0,m+1jn}=σm+k

则选取对应的 xm+k 为换入变量.

由于 σm+k<0 且为最小,因此当 xm+k 由零增至正值时,可使目标函数值最大限度的减小.

换出变量的确定—最小比值原则

如果确定确定 xm+k 为换入变量,设 pm+k A 中与xm+k对应的系数列向量.

现在需要在 XB 中确定一个基变量为换出变量. 当 xm+k 由零慢慢增加到某个值时,为保持解的非负性,可以按最小比值原则确定换出变量:

θ=min{(B1b)i(B1pm+k)i|(B1pm+k)i>0,1im}=(B1b)l(B1pm+k)l

则选取对应的基变量 xl 为换出变量.

例子

minz=5x12x23x3+x4x5

s.t.x1+2x2+2x3+x4=83x1+4x2+x3+x5=7x1,x2,x3,x4,x50

解:已知 A=[1324211001] b=[87] C=(5,2,3,1,1)

  1. 确定初始基本可行解

基变量 x4 x5 B=(P4P5)=[1001]

XB=(x4x5)T XN=(x1x2x3)T

B=[1001] N=[132421]

CB=(11) XN=(523)

b=(87)T

XN=0 ,则 XB=B1b=(87)T X=(00087)T

z=CBB1b=1

  1. 检验 X 是否最优

检验向量σN=CNCBB1N=(3,0,4)

因为 σ1 σ3 均小于0,所以 X=(00087)T 不是最优解.

  1. 基本可行解的改进

(1)选取换入变量

因为 min{3,4}=4 ,选取 x3 为换入变量

(2)选取换出变量

B1b=(87)T B1P3=(21)T>0

因为 min{82,71}=82 ,选取 x4 为换出变量.

  1. 求解改进了的基本可行解— 旋转运算

对约束方程组的增广矩阵 [Ab] 施以初等行变换,使换入变量 x3 所对应的系数向量 P2 变换成换出向量 x4 所对应的单位向量 P4 ,保持 x5 的系数向量 P5 为单位向量不变.

(132421100187)1252131012120143

基变量 x3 x5 B=(P3P5)=[1001]

XB=(x3x5)T XN=(x1x2x4)T

B=[1001] N=1252131212

CB=(31) XN=(521)

b=(43)T

XN=0 ,则 XB=B1b=(43)T X=(00403)T

z=CBB1b=15

  1. 转2,检验 X 是否最优

检验向量σN=CNCBB1N=(1,4,2)

因为 σ1 小于0,所以 X=(00403)T 不是最优解.

  1. 转3,基本可行解的改进

(1)选取换入变量

因为 σ1=1 ,选取 x1 为换入变量

(2)选取换出变量

B1b=(43)T B1P3=(1252)T>0

因为 min{41/2,35/2}=35/2 ,选取 x5 为换出变量.

  1. 转4,求解改进了的基本可行解

对约束方程组的增广矩阵施以初等行变换,使换入变量 x1 所对应的系数向量 P1 变换成换出向量 x5 所对应的单位向量 P5 ,保持 x3 的系数向量 P3 为单位向量不变.

1252131012120143012565103515152517565

基变量 x3 x1 B=(P3P1)=[1001]

XB=(x3x1)T XN=(x2x4x5)T

B=[1001] N=256535151525

CB=(35) XN=(211)

b=(17565)T

XN=0 ,则 XB=B1b=(17565)T X=(65017500)T

z=CBB1b=815

  1. 转2,检验 X 是否最优

检验向量σN=CNCBB1N=(265,95,25)

因为所有检验系数均小于0,所以 X=(65017500)T 是最优解.

参考资料

第四讲 单纯形法基本原理

  • 14
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python单纯形法是一种用于求解线性规划问题的方法。它通过迭代计算来找到线性规划问题的最优解和最大值。单纯形法的步骤可以分为以下几个部分: 1. 首先,需要了解单纯形法的原理和方法步骤。可以参考引用中提供的讲解和代码实现来学习单纯形法的基本原理和方法步骤。 2. 其次,根据具体的线性规划问题,使用Python编写代码来实现单纯形法。可以参考引用中提供的Python代码来编写自己的代码。代码中包括了定义线性回归系数模型、定义基变量函数、求解线性规划问题的主要函数等。 3. 最后,运行编写的Python代码,输入线性规划问题的相关数据,即可求解出线性规划问题的最优解和最大值。可以根据需要进行输出和打印结果。 总之,Python单纯形法是一种常用的求解线性规划问题的方法,可以通过编写Python代码来实现,并得到相应的结果。可以根据引用和引用中提供的内容来学习和应用单纯形法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [单纯形法讲解及Python代码实现](https://blog.csdn.net/qq_41133375/article/details/105620784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值