单纯形法解释

单纯形法解释单纯形法的理解理解单纯形法之前必须要知道一下若干定理或者知识 对于 Ax b A m n x n 1 b n 1Ax b quadA m n quadx n 1 quadb n 1Ax b A m n x n 1 b n 1 可以写成下列形式 Ax A1 A2 An x1x2 xn A1x1 A2x2 Anxn bAx A 1 A 2 A

单纯形法的理解


  • 理解单纯形法之前必须要知道一下若干定理或者知识。
  1. 对于 A x = b , A : m ∗ n , x : n ∗ 1 , b : n ∗ 1 Ax=b,\quad A:m*n,\quad x:n*1,\quad b:n*1 Ax=b,A:mn,x:n1,b:n1,可以写成下列形式:
    A x = ( A 1 , A 2 , . . . A n ) ( x 1 x 2 . . . x n ) = A 1 x 1 + A 2 x 2 + . . . + A n x n = b Ax=(A^1,A^2,…A^n)(\begin{aligned}x_1\\x_2\\…\\x_n\end{aligned})=A^1x_1+A^2x_2+…+A^nx_n=b Ax=(A1,A2,...An)(x1x2...xn)=A1x1+A2x2+...+Anxn=b
    也就是说 b b b A A A的列向量的线性组合,线性组合的系数就是 A x = b Ax=b Ax=b方程组的一个解。

  2. 对于线性优化:
    m i n ( c T x ) A x = b ∀ x i ≥ 0 min(c^Tx)\\ Ax=b\\ \forall x_i\ge0 min(cTx)Ax=bxi0
    其最优解一定满足下面的形式(basic solution):(同时,满足下述形式的basic solution不一定是最优的)
    x = ( x 1 ≥ 0 , x 2 ≥ 0 , . . . . x m ≥ 0 , x m + 1 = 0 , x m + 2 = 0 , . . x n = 0 ) x=(x_1\ge0,x_2\ge0,….x_m\ge0,x_{m+1}=0,x_{m+2}=0,..x_n=0) x=(x10,x20,....xm0,xm+1=0,xm+2=0,..xn=0)
    前面的m个数值对应基向量 B B B的解,后面代表非基向量的解。(至于为什么,查资料)




判断是否是最优解

​ 回归到我们最初的目的,最小化 f f f的值。我们在上述的 ( 3 ) (3) (3)式中得到一个basic solution,那么这个basic solution是否是最优解呢?这时我们需要看 ( 4 ) (4) (4)式,前面项是常数项,只考虑后面的那一项。
( c N T − c B T B − 1 N ) x N = σ m + 1 x m + 1 + σ m + 2 x m + 2 + . . . σ n x n (5) (c_N^T-c_B^TB^{-1}N)x_N=\sigma_{m+1}x_{m+1}+\sigma_{m+2}x_{m+2}+…\sigma_{n}x_{n}\tag{5} (cNTcBTB1N)xN=σm+1xm+1+σm+2xm+2+...σnxn(5)
1. 如果对于 ∀ σ i > 0 , i ∈ ( m + 1 , n ) \forall \sigma_i\gt0, i\in (m+1,n) σi>0,i(m+1,n),那么想要满足 f f f最小,就必须令 x m + 1 , x m + 2 , . . . , x n x_{m+1},x_{m+2},…,x_n xm+1,xm+2,...,xn都是0,一旦有一个非零, f f f就会变大。因为我们 ( 3 ) (3) (3)中得到的解 G G G恰好满足 x m + 1 , x m + 2 , . . . , x n x_{m+1},x_{m+2},…,x_n xm+1,xm+2,...,xn都是零,而且是基本解,所以G也是最优解。

2. 如果存在 σ i ≤ 0 , i ∈ ( m + 1 , n ) \sigma_i\le0,i\in (m+1,n) σi0,i(m+1,n),我们只要让对应的 x i > 0 x_i>0 xi>0,就能使 ( 4 ) (4) (4)式变得更小。那么此时的G就不是最优解,因为G对应的 x i = 0 x_i=0 xi=0,所以他不是最优解。


找出入基

​ 承接上文,假设G不是最优解。也就是存在 σ i ≤ 0 , i ∈ ( m + 1 , n ) \sigma_i\le0,i\in (m+1,n) σi0,i(m+1,n)。也就是说,当 x i > 0 x_i>0 xi>0时,目标函数 f f f可以更小。也就是说(根据文章开头的引理2), x i x_i xi对应的列向量应该时基向量(只有基向量对应的解才应该时大于等于0的)。所以应该把 x i x_i xi对应的列向量换进基向量的矩阵中。那么问题来了,如果存在多个 σ i \sigma_i σi小于0,到底应该换哪个呢?

按理说,换哪个都是可以的。但是我们的目标是更快的求出最小的 f f f,也就是让 f f f下降的最快,显然,在x等值的情况下, σ i \sigma_i σi越小, σ i x \sigma_ix σix越小, f f f也就下降的越快,因此,入基所对应的应该是
σ m + i = m i n ( σ m + 1 , σ m + 2 , . . . σ n ) 且 σ m + i ≤ 0 (6) \sigma_{m+i}= min(\sigma_{m+1},\sigma_{m+2},…\sigma_n) 且\sigma_{m+i}\le0\tag{6} σm+i=min(σm+1,σm+2,...σn)σm+i0(6)
也就是矩阵A中的第 m + i m+i m+i列(也是N中的第 i i i列: N i N_i Ni)应该是基向量。


找出出基

​ 既然找到了入基 N i N_i Ni,怎么找到出基呢?回顾上面的内容,我们找到了一个basic solution G,但G不是最优解。虽然不是最优解,但仍然是一个可行解,仍然满足:
A G = A [ x B , x N = 0 ] T = [ B , N ] [ x B , x N = 0 ] T = B x B T + N ∗ 0 = B x B T = b 也 就 是 B x B T = b (7) AG=A[x_B,x_N=0]^T=[B,N][x_B,x_N=0]^T=Bx_B^T+N*0=Bx_B^T=b\\ 也就是Bx_B^T=b\tag{7} AG=A[xB,xN=0]T=[B,N][xB,xN=0]T=BxBT+N0=BxBT=bBxBT=b(7)
这是根据公式 ( 3 ) (3) (3)得到的(这里的 x B x_B xB特指非最优解G中的 x B x_B xB)。

​ 同时,我们由公式 ( 6 ) (6) (6)得到,入基对应的列向量为 N i N_i Ni。考虑到B是基向量,那么其他任意向量都可以由B的列向量的线性组合来表示(上述的引理1)。那么列向量 N i N_i Ni也不例外,所以存在唯一向量 y y y满足下面式子
N i = y 1 B 1 + y 2 B 2 + . . . + y m B m = B y (8) N_i=y_1B_1+y_2B_2+…+y_mB_m=By\tag{8} Ni=y1B1+y2B2+...+ymBm=By(8)
所以PPT中的 B y = N i By=N_i By=Ni就是这么来的。(为什么唯一呢?因为B满秩)

在basic solution G中,我们知道 N i N_i Ni对应的系数是0,也就是b和 N i N_i Ni是没有关系的。但是根据上面的讨论,当 x i > 0 x_i>0 xi>0时,目标函数 f f f可以取得更小,我们假设 N i N_i Ni对应的系数为 ξ > 0 \xi>0 ξ>0。那么如何把b重新表示为 B 和 N i B和N_i BNi的线性组合呢?我们只需要将(9)中的第二个式子乘以 ξ \xi ξ,再将第一个式子减去第二个式子就可以了。
ξ B y = ξ N i B x B T − ξ B y = b − ξ N i 从 而 有 : B ( x B T − ξ y ) + ξ N i = b (10) \xi By=\xi N_i\\ Bx_B^T-\xi By=b-\xi N_i\\ 从而有:B(x_B^T-\xi y)+\xi N_i=b\tag{10} ξBy=ξNiBxBTξBy=bξNiB(xBTξy)+ξNi=b(10)
所以就得到了PPT中的式子。

那么这个式子是什么意思呢。首先明确一下, x B T x_B^T xBT 1 ∗ m 1*m 1m的向量,y也是 1 ∗ m 1*m 1m的向量, ξ \xi ξ时大于0的标量。

那么这个式子不就是B的列向量和 N i N_i Ni的线性组合吗。我们由(10)得到:
令 x B T − ξ y = t , t 时 1 ∗ m 的 行 向 量 B t + ξ N i = b 从 而 有 : b = t 1 B 1 + t 2 B 2 + . . . + t m B m + ξ N i (11) 令x_B^T-\xi y = t,t时1*m的行向量\\ Bt+\xi N_i=b\\ 从而有:b=t_1B_1+t_2B_2+…+t_mB_m+\xi N_i\tag{11} xBTξy=t,t1mBt+ξNi=b:b=t1B1+t2B2+...+tmBm+ξNi(11)

但是我们知道最优解一定是basic solution(引理1),basic solution的特征由(2)给出。也就是说,basic solution中,基向量对应的解是m个大于等于0的分量。我们已知 ξ > 0 \xi>0 ξ>0,则 ξ \xi ξ是对应基向量的解的一个分量(线性组合的系数就是解)。所以对于 t 1 , t 2 , . . . , t m t_1,t_2,…,t_m t1,t2,...,tm,不可能都大于0,若都大于0,则含有 m + 1 m+1 m+1个正数分量了,与引理矛盾。

那么既然 t 1 , t 2 , . . . , t m t_1,t_2,…,t_m t1,t2,...,tm不可能都大于0,那么可不可以存在 t i < 0 t_i<0 ti<0呢?不可能,因为我们的约束条件要求 x i ≥ 0 x_i\ge 0 xi0

t = x B T − ξ y t=x_B^T-\xi y t=xBTξy,所以:
t ≥ 0 x B T − ξ y ≥ 0 ξ ≤ x B T y 又 因 为 最 小 的 t 要 等 于 0 , 所 以 ξ = m i n { ( x B T ) j y j ∣ y j > 0 } t\ge0\\ x_B^T-\xi y \ge 0\\ \xi \le \frac{x_B^T}{y}\\ 又因为最小的t要等于0,所以\\ \xi = min\{\frac{(x_B^T)_j}{y_j}|y_j>0\} t0xBTξy0ξyxBTt0ξ=min{
yj(xBT)jyj>
0}

这样就满足了 t j = 0 t_j=0 tj=0,也就是第j列并非基向量,需要换出去。到此,入基和出基均已经得到。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204822.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:27
下一篇 2026年3月19日 下午7:27


相关推荐

  • mysql分组后计算分组的组数和根据某个字段去重计数

    mysql分组后计算分组的组数和根据某个字段去重计数mysql分组后计算分组的组数和根据某个字段去重计数

    2022年4月23日
    75
  • es集群搭建_k8s和docker搭建es集群

    es集群搭建_k8s和docker搭建es集群单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。ES集群搭建_使用docker-海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点-单点故障问题:将分片数据在不同节点备份(replica)ES集群介绍为什么需要集群ES集群相关概念搭建ES集群集群职责划分集群脑裂问题…

    2022年10月12日
    7
  • java线程学习

    java线程学习

    2021年11月12日
    52
  • oracle用户修改密码sql_oracle数据库管理员密码忘记

    oracle用户修改密码sql_oracle数据库管理员密码忘记修改oracle数据库用户名称和密码(Linux为例),有需要的朋友可以参考下。一、修改前准备工作:使用ssh工具以root身份连接服务器,然后切换到oracle用户:su-oracle(回车)使用sqlplus连接数据库:sqlplus/nolog(回车)以管理员身份登录sys用户:connsys/sysassysdba(回车)数据库连接成功,至此准备工作完成。二、修改用户名称。数据…

    2022年7月28日
    22
  • 测试理论面试题

    测试理论面试题1 说一下你们的测试流程没有做过项目的直接介绍下 v 模型 老师上课肯定有讲过 有经验的直接从接到项目 单子后讲自己如何一步步实施测试的 例如你可以回答这样的流程 1 软件开发完成以后 就会把需求规格说明书 软件程序和软件源代码发过来 2 项目经理出测试方案 要使用什么样的测试方法 测试策略 安排测试计划 测试人员 资源 进度的安排 测试的范围和完成的目标 3 测试人员编写和

    2026年3月16日
    2
  • navicat 15.02 激活码[在线序列号]

    navicat 15.02 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    210

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号