• 单纯形法学习


    单纯形法(Simplex Algorithm)是求解线性规划问题最常用、最有效的算法之一

    线性规划

    一般形式:
    max ⁡ c T x  s.t.  a i T x ≤ b i a j T x = b j x k ≥ 0

    maxcTx s.t. aiTxbiajTx=bjxk0" role="presentation" style="position: relative;">maxcTx s.t. aiTxbiajTx=bjxk0
    maxcTx s.t. aiTxbiajTx=bjxk0
    其中 x ∈ R n \mathbf{x}\in\mathbb{R}^n xRn

    标准形式:
    max ⁡ c T x  s.t.  A x = b x ≥ 0

    maxcTx s.t. Ax=bx0" role="presentation" style="position: relative;">maxcTx s.t. Ax=bx0
    maxcTx s.t. Ax=bx0
    其中 A ∈ R m × n , b ∈ R + m , x ∈ R n \mathbf{A}\in\mathbb{R}^{m\times n},\mathbf{b}\in\mathbb{R}_{+}^m,\mathbf{x}\in\mathbb{R}^n ARm×n,bR+m,xRn

    c T x \mathbf{c}^T\mathbf{x} cTx目标函数
    c \mathbf{c} c价值向量, c i c_i ci价值系数
    b \mathbf{b} b右端向量
    A \mathbf{A} A约束矩阵
    x i x_i xi没有符号约束(可以取正,负,零),则称为自由变量

    满足所有约束条件的解称为可行解
    可行解组成的集合为可行域

    一般形式转为标准形式

    如果是 min ⁡ c T x \min \mathbf{c}^T\mathbf{x} mincTx,则改为 max ⁡ − c T x \max -\mathbf{c}^T\mathbf{x} maxcTx

    如果 x i x_i xi为自由变量,则引入 x i + , x i − ≥ 0 x_i^+,x_i^-\ge 0 xi+,xi0,用 x i + − x i − x_i^+-x_i^- xi+xi来代替 x i x_i xi,并添加约束 x i + , x i − ≥ 0 x_i^+,x_i^-\ge 0 xi+,xi0

    如果 a i T x ≤ b i \mathbf{a}_i^T\mathbf{x}\le b_i aiTxbi,引入松弛变量 x s ≥ 0 x_s\ge0 xs0,将约束变为 a i T x + x s = b i \mathbf{a}_i^T\mathbf{x}+x_s= b_i aiTx+xs=bi,并添加约束 x s ≥ 0 x_s\ge 0 xs0

    如果 a i T x ≥ b i \mathbf{a}_i^T\mathbf{x}\ge b_i aiTxbi,引入松弛变量(剩余变量) x s ≥ 0 x_s\ge0 xs0,将约束变为 a i T x − x s = b i \mathbf{a}_i^T\mathbf{x}-x_s= b_i aiTxxs=bi,并添加约束 x s ≥ 0 x_s\ge 0 xs0

    如果 b i < 0 b_i<0 bi<0则两边同乘 − 1 -1 1

    线性规划可行域几何结构

    x \mathbf{x} x的超平面: H x = { z ∣ c T z = c T x = b } H_{\mathbf{x}}=\left\{\mathbf{z}|\mathbf{c}^T\mathbf{z}=\mathbf{c}^T\mathbf{x}=b\right\} Hx={zcTz=cTx=b}
    半空间: { z ∣ c T z ≤ b = c T x } \left\{\mathbf{z}|\mathbf{c}^T\mathbf{z}\le b=\mathbf{c}^T\mathbf{x}\right\} {zcTzb=cTx}
    在这里插入图片描述
    凸集 C C C是凸集,若 x 1 , x 2 ∈ C \mathbf{x}_1,\mathbf{x}_2\in C x1,x2C,则 ∀ λ ∈ [ 0 , 1 ] , s . t .   λ x 1 + ( 1 − λ ) x 2 ∈ C \forall \lambda \in\left[0,1\right],s.t.\ \lambda \mathbf{x}_1+\left(1-\lambda\right)\mathbf{x}_2\in C λ[0,1],s.t. λx1+(1λ)x2C

    多面体 P = { x ∣ A x ≤ b , C x = d } P=\left\{\mathbf{x}|\mathbf{A}\mathbf{x}\le \mathbf{b},\mathbf{C}\mathbf{x}=\mathbf{d}\right\} P={xAxb,Cx=d}
    容易验证,多面体是一个闭凸集,线性规划可行域是一个多面体

    极点

    C ⊆ R n C\subseteq \mathbb{R}^n CRn是一个非空闭凸集, x ˉ ∈ C \bar{\mathbf{x}}\in C xˉC
    如果不存在 x 1 , x 2 ∈ C , λ ∈ ( 0 , 1 ) \mathbf{x}_1,\mathbf{x}_2\in C,\lambda \in \left(0,1\right) x1,x2C,λ(0,1),使得 x ˉ = λ x 1 + ( 1 − λ ) x 2 \bar{\mathbf{x}}=\lambda \mathbf{x}_1+(1-\lambda)\mathbf{x}_2 xˉ=λx1+(1λ)x2
    x ˉ \bar{\mathbf{x}} xˉ C C C的一个极点(extreme point)

    基可行解

    B B B是秩为 m m m的约束矩阵 A ∈ R m × n \mathbf{A}\in \mathbb{R}^{m\times n} ARm×n种的一个 m m m阶满秩子方阵,
    B \mathbf{B} B称为一个
    B \mathbf{B} B m m m个线性无关的列向量称为基向量
    变量 x \mathbf{x} x中与之对应的 m m m个分量称为基变量,其余分量为非基变量
    x = ( x B x N ) = ( B − 1 b 0 ) \mathbf{x}=

    (xBxN)" role="presentation" style="position: relative;">(xBxN)
    =
    (B1b0)" role="presentation" style="position: relative;">(B1b0)
    x=(xBxN)=(B1b0)称为相应于 B \mathbf{B} B基解
    B − 1 b ≥ 0 \mathbf{B}^{-1}\mathbf{b}\ge 0 B1b0时, x \mathbf{x} x称为基可行解(basic feasible solution,BFS),此时相应的基 B \mathbf{B} B称为可行基

    显然,极点至多有 C n m = ( n m ) = n ! m ! ( n − m ) ! C_{n}^{m}=

    (nm)" role="presentation" style="position: relative;">(nm)
    =\frac{n!}{m!\left(n-m\right)!} Cnm=(nm)=m!(nm)!n!

    定理1

    可行解 x \mathbf{x} x时基可行解的充要条件时 x \mathbf{x} x正分量所对应的 A \mathbf{A} A的列向量线性无关

    证明:
    必要性:由基可行解定义,显然
    充分性:
    不妨设 x \mathbf{x} x为可行解,前 k k k个分量为正分量
    A \mathbf{A} A的列向量为 A 1 , A 2 , ⋯   , A n \mathbf{A}_1,\mathbf{A}_2,\cdots, \mathbf{A}_n A1,A2,,An

    A 1 , ⋯   , A k \mathbf{A}_1,\cdots, \mathbf{A}_k A1,,Ak线性无关, k ≤ m k\le m km
    k = m k=m k=m,则 x \mathbf{x} x为基可行解
    k < m kk<m,因为 r a n k ( A ) = m rank\left(\mathbf{A}\right)=m rank(A)=m,可以从剩下 n − k n-k nk个列向量中挑选 m − k m-k mk个,组成基 B \mathbf{B} B,显然 x \mathbf{x} x B \mathbf{B} B对应的基向量

    极点和基可行解等价

    x \mathbf{x} x是基可行解的充要条件是 x \mathbf{x} x是极点

    证明:
    A = ( A 1 , ⋯   , A n ) , A i ∈ R m \mathbf{A}=\left(\mathbf{A}_1,\cdots,\mathbf{A}_n\right),\mathbf{A}_i\in\mathbb{R}^m A=(A1,,An),AiRm
    设可行域 P P P
    充分性:设 x \mathbf{x} x是极点,
    假设 x \mathbf{x} x不是BFS
    不妨假设 x \mathbf{x} x的前 k k k个分量为正分量
    A 1 , ⋯   , A k \mathbf{A}_1,\cdots, \mathbf{A}_k A1,,Ak线性相关(如果线性无关,则根据定理1, x \mathbf{x} x时BFS)
    于是 ∃ d ≠ 0 \exists\mathbf{d}\neq \mathbf{0} d=0,使得 ∑ i = 1 k A i d i = 0 \sum_{i=1}^{k}\mathbf{A}_i d_i=\mathbf{0} i=1kAidi=0
    ∃ ϵ > 0 \exists \epsilon>0 ϵ>0,使得 x + ϵ d , x − ϵ d ∈ P \mathbf{x}+\epsilon\mathbf{d},\mathbf{x}-\epsilon\mathbf{d}\in P x+ϵd,xϵdP
    x = 1 2 ( x + ϵ d ) + 1 2 ( x − ϵ d ) \mathbf{x}=\frac{1}{2}\left(\mathbf{x}+\epsilon\mathbf{d}\right)+\frac{1}{2}\left(\mathbf{x}-\epsilon\mathbf{d}\right) x=21(x+ϵd)+21(xϵd)
    x \mathbf{x} x不是极点,矛盾
    所以 x \mathbf{x} x是BFS

    必要性:设 x \mathbf{x} x是BFS
    假设 x \mathbf{x} x不是极点
    则存在 y , z ∈ P , y ≠ x , z ≠ x , λ ∈ ( 0 , 1 ) , x = λ y + ( 1 − λ ) z \mathbf{y},\mathbf{z}\in P,\mathbf{y}\neq \mathbf{x},\mathbf{z}\neq \mathbf{x},\lambda \in\left(0,1\right),\mathbf{x}=\lambda \mathbf{y}+\left(1-\lambda\right)\mathbf{z} y,zP,y=x,z=x,λ(0,1),x=λy+(1λ)z
    x \mathbf{x} x k k k个分量为正分量,则 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性无关
    ∑ i = 1 k A i x i = b \sum_{i=1}^{k}\mathbf{A}_i x_i=\mathbf{b} i=1kAixi=b
    ∑ i = 1 k A i y i = b \sum_{i=1}^{k}\mathbf{A}_i y_i=\mathbf{b} i=1kAiyi=b
    ∑ i = 1 k A i z i = b \sum_{i=1}^{k}\mathbf{A}_i z_i=\mathbf{b} i=1kAizi=b
    于是 ∑ i = 1 k A i ( y i − z i ) = 0 \sum_{i=1}^{k}\mathbf{A}_i \left(y_i-z_i\right)=0 i=1kAi(yizi)=0
    因为存在 y i ≠ z i y_i\neq z_i yi=zi,所以 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性相关,矛盾
    所以 x \mathbf{x} x是极点

    存在性

    如果有可行解,则一定有BFS

    证明:
    x \mathbf{x} x为可行解,前 k k k个分量为正分量
    A = ( A 1 , ⋯   , A n ) , A i ∈ R m \mathbf{A}=\left(\mathbf{A}_1,\cdots,\mathbf{A}_n\right),\mathbf{A}_i\in\mathbb{R}^m A=(A1,,An),AiRm
    如果 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性无关,则 x \mathbf{x} x是BFS
    如果 A 1 , ⋯   , A k \mathbf{A}_1,\cdots,\mathbf{A}_k A1,,Ak线性相关
    ∃ δ \exists \mathbf{\delta} δ δ 1 , ⋯   , δ k \delta_1,\cdots,\delta_k δ1,,δk不全为0,使得 A δ = 0 \mathbf{A}\mathbf{\delta}=0 Aδ=0
    ∃ ϵ > 0 , s . t .   x ± ϵ δ ≥ 0 \exists \epsilon>0,s.t.\ \mathbf{x}\pm \epsilon\mathbf{\delta}\ge 0 ϵ>0,s.t. x±ϵδ0
    x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ也是可行解
    存在 ϵ \epsilon ϵ,使得 x i ± ϵ δ i x_i\pm\epsilon \delta_i xi±ϵδi中至少一个等式为 0 0 0,其中 i = 1 , 2 , ⋯   , k i=1,2,\cdots,k i=1,2,,k
    也就是说 x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ的正分量个数至少比 x \mathbf{x} x少一个

    这个过程可以继续下去,直到只有1个正分量,此时 x \mathbf{x} x也是BFS

    最优解是BFS

    如果有有限的最优值(不是无界解),则一定存在一个基可行解是最优解

    证明:
    证明过程与BFS存在性类似

    x \mathbf{x} x是最优解
    如果 x \mathbf{x} x不是BFS,则 x \mathbf{x} x是可行解

    ∃ ϵ > 0 , δ ≠ 0 , s . t .   x ± ϵ δ \exists\epsilon>0,\delta\neq \mathbf{0},s.t.\ \mathbf{x}\pm \epsilon\mathbf{\delta} ϵ>0,δ=0,s.t. x±ϵδ也是可行解
    c T x ≥ c T ( x + ϵ δ ) ⇒ c T ϵ δ ≤ 0 c T x ≥ c T ( x − ϵ δ ) ⇒ c T ϵ δ ≥ 0 \mathbf{c}^T\mathbf{x}\ge \mathbf{c}^T\left(\mathbf{x}+ \epsilon\mathbf{\delta}\right)\Rightarrow \mathbf{c}^T\epsilon\mathbf{\delta}\le0\\ \mathbf{c}^T\mathbf{x}\ge \mathbf{c}^T\left(\mathbf{x}- \epsilon\mathbf{\delta}\right)\Rightarrow \mathbf{c}^T\epsilon\mathbf{\delta}\ge0\\ cTxcT(x+ϵδ)cTϵδ0cTxcT(xϵδ)cTϵδ0
    所以 c T δ = 0 \mathbf{c}^T\mathbf{\delta}=0 cTδ=0,也就是说 x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ也是最优解
    存在 ϵ \epsilon ϵ,使得 x i ± ϵ δ i x_i\pm\epsilon \delta_i xi±ϵδi中至少一个等式为 0 0 0
    也就是说 x ± ϵ δ \mathbf{x}\pm \epsilon\mathbf{\delta} x±ϵδ的正分量个数至少比 x \mathbf{x} x少一个

    这个过程可以继续下去,直到只有1个正分量,此时 x \mathbf{x} x也是BFS

    单纯形法

    基本思路就是先找BFS,判断是不是最优解,如果不是,就找相邻BFS,并使目标函数值增大,直到最优解
    max ⁡ c T x  s.t.  A x = b x ≥ 0

    maxcTx s.t. Ax=bx0" role="presentation" style="position: relative;">maxcTx s.t. Ax=bx0
    maxcTx s.t. Ax=bx0
    其中 A ∈ R m × n , b ∈ R + m , x ∈ R n \mathbf{A}\in\mathbb{R}^{m\times n},\mathbf{b}\in\mathbb{R}_{+}^m,\mathbf{x}\in\mathbb{R}^n ARm×n,bR+m,xRn
    m < n , r a n k ( A ) = m mm<n,rank(A)=m
    A = ( A 1 , ⋯   , A n ) , A i ∈ R m \mathbf{A}=\left(\mathbf{A}_1,\cdots,\mathbf{A}_n\right),\mathbf{A}_i\in\mathbb{R}^m A=(A1,,An),AiRm

    迭代基本原理

    总会存在一个单位矩阵
    不妨假设
    ( A 1 , ⋯   , A m ) = I m \left(\mathbf{A}_1,\cdots,\mathbf{A}_m\right)=\mathbf{I}_{m} (A1,,Am)=Im
    松弛变量所对应的列向量为 e i \mathbf{e}_i ei
    如果找不到单位矩阵,可以引入人工变量(后面会说)

    A 1 , ⋯   , A m \mathbf{A}_1,\cdots,\mathbf{A}_m A1,,Am就是基向量了,对应的 x 1 , ⋯   , x m x_1,\cdots,x_m x1,,xm为基变量
    一个基解就是
    x = ( x 1 x 2 ⋮ x m x m + 1 ⋮ x n ) = ( b 1 b 2 ⋮ b m 0 ⋮ 0 ) \mathbf{x}=

    (x1x2xmxm+1xn)" role="presentation" style="position: relative;">(x1x2xmxm+1xn)
    =
    (b1b2bm00)" role="presentation" style="position: relative;">(b1b2bm00)
    x= x1x2xmxm+1xn = b1b2bm00
    因为 b ∈ R + m \mathbf{b}\in\mathbb{R}_+^m bR+m,所以 x \mathbf{x} x是BFS

    一个BFS换到相邻BFS

    两个可行基称为相邻的,如果他们之间变换且仅变换一个基变量
    x ( 0 ) \mathbf{x}^{(0)} x(0)的前 m m m个分量为基变量,即
    x ( 0 ) = ( x 1 ( 0 ) ⋮ x m ( 0 ) 0 ⋮ 0 ) \mathbf{x}^{(0)}=

    (x1(0)xm(0)00)" role="presentation" style="position: relative;">(x1(0)xm(0)00)
    x(0)= x1(0)xm(0)00

    ∑ i = 1 m A i x i ( 0 ) = b \sum_{i=1}^{m}\mathbf{A}_i x_i^{(0)}=\mathbf{b} i=1mAixi(0)=b
    显然
    A j = ∑ i = 1 m a i j A i θ ( A j − ∑ i = 1 m a i j A i ) = 0
    Aj=i=1maijAiθ(Aji=1maijAi)=0" role="presentation" style="position: relative;">Aj=i=1maijAiθ(Aji=1maijAi)=0
    Ajθ(Aji=1maijAi)=i=1maijAi=0

    其中 θ > 0 \theta>0 θ>0
    所以
    ∑ i = 1 m A i x i ( 0 ) + θ ( A j − ∑ i = 1 m a i j A i ) = b ∑ i = 1 m ( x i ( 0 ) − θ a i j ) A i + θ A j = b
    i=1mAixi(0)+θ(Aji=1maijAi)=bi=1m(xi(0)θaij)Ai+θAj=b" role="presentation" style="position: relative;">i=1mAixi(0)+θ(Aji=1maijAi)=bi=1m(xi(0)θaij)Ai+θAj=b
    i=1mAixi(0)+θ(Aji=1maijAi)i=1m(xi(0)θaij)Ai+θAj=b=b

    也就是说 x ( 1 ) = ( x 1 ( 0 ) − θ a 1 j ⋮ x m ( 0 ) − θ a m j 0 ⋮ θ ⋮ 0 ) \mathbf{x}^{(1)}=
    (x1(0)θa1jxm(0)θamj0θ0)" role="presentation" style="position: relative;">(x1(0)θa1jxm(0)θamj0θ0)
    x(1)= x1(0)θa1jxm(0)θamj0θ0
    是一个基解,因为 θ > 0 \theta>0 θ>0,要想成为基可行解,需要满足
    x i ( 0 ) − θ a i j ≥ 0 i = 1 , 2 , ⋯ m x_i^{(0)}-\theta a_{ij}\ge 0\quad i=1,2,\cdots m xi(0)θaij0i=1,2,m
    解得 0 < θ ≤ min ⁡ i { x i ( 0 ) a i j ∣ a i j > 0 } 0<\theta \le\min\limits_{i}\left\{\frac{x_i^{(0)}}{a_{ij}}|a_{ij}>0\right\} 0<θimin{aijxi(0)aij>0}
    l = arg ⁡ min ⁡ i = { x i ( 0 ) a i j ∣ a i j > 0 } l=\arg\min\limits_{i}=\left\{\frac{x_i^{(0)}}{a_{ij}}|a_{ij}>0\right\} l=argimin={aijxi(0)aij>0}
    θ = x l ( 0 ) a l j \theta = \frac{x_l^{(0)}}{a_{lj}} θ=aljxl(0),则 x i ( 0 ) − θ a i j x_i^{(0)}-\theta a_{ij} xi(0)θaij中至少有一个为0
    x 1 , ⋯   , x l − 1 , x j , x l + 1 , ⋯   , x m x_1,\cdots,x_{l-1},x_j,x_{l+1},\cdots,x_m x1,,xl1,xj,xl+1,,xm对应的列排列起来
    ( A 1 A 2 ⋯ A l − 1 A j A l + 1 ⋯ A m b 1 0 ⋯ 0 a 1 j 0 ⋯ 0 b 1 0 1 ⋯ 0 a 2 j 0 ⋯ 0 b 2 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 1 a l − 1 , j 0 ⋯ 0 b l − 1 0 0 ⋯ 0 a l j 0 ⋯ 0 b l 0 0 ⋯ 0 a l + 1 , j 1 ⋯ 0 b l + 1 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 0 a m j 0 ⋯ 1 b m ) \left(
    A1A2Al1AjAl+1Amb100a1j00b1010a2j00b2001al1,j00bl1000alj00bl000al+1,j10bl+1000amj01bm" role="presentation" style="position: relative;">A1A2Al1AjAl+1Amb100a1j00b1010a2j00b2001al1,j00bl1000alj00bl000al+1,j10bl+1000amj01bm
    \right)
    A1100000A2010000Al1001000Aja1ja2jal1,jaljal+1,jamjAl+1000010Am000001bb1b2bl1blbl+1bm

    注意到 a l j > 0 a_{lj}>0 alj>0,所以 A 1 , ⋯   , A l − 1 , A j , A l + 1 , ⋯   , A m \mathbf{A}_1,\cdots, \mathbf{A}_{l-1},\mathbf{A}_j,\mathbf{A}_{l+1},\cdots,\mathbf{A}_m A1,,Al1,Aj,Al+1,,Am线性无关,可以构成一个基, x ( 1 ) \mathbf{x}^{(1)} x(1)是基可行解
    通过初等行变换
    ( A 1 A 2 ⋯ A l − 1 A j A l + 1 ⋯ A m b 1 0 ⋯ 0 0 0 ⋯ 0 b 1 − θ a 1 j 0 1 ⋯ 0 0 0 ⋯ 0 b 2 − θ a 2 j ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 1 0 0 ⋯ 0 b l − 1 − θ a l − 1 , j 0 0 ⋯ 0 1 0 ⋯ 0 θ 0 0 ⋯ 0 0 1 ⋯ 0 b l + 1 − θ a l + 1 , j ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 ⋯ 0 0 0 ⋯ 1 b m − θ a m j ) \left(
    A1A2Al1AjAl+1Amb100000b1θa1j010000b2θa2j001000bl1θal1,j000100θ000010bl+1θal+1,j000001bmθamj" role="presentation" style="position: relative;">A1A2Al1AjAl+1Amb100000b1θa1j010000b2θa2j001000bl1θal1,j000100θ000010bl+1θal+1,j000001bmθamj
    \right)
    A1100000A2010000Al1001000Aj000100Al+1000010Am000001bb1θa1jb2θa2jbl1θal1,jθbl+1θal+1,jbmθamj

    变换之后, x ( 1 ) \mathbf{x}^{(1)} x(1)的基依然是单位矩阵, x ( 1 ) \mathbf{x}^{(1)} x(1) x ( 0 ) \mathbf{x}^{(0)} x(0)构成相邻基可行解

    现在我们知道,要将 l l l替换成 j j j,那么 j j j应该要怎么选择

    最优解检验和解的判别

    z ( 0 ) = ∑ i = 1 m c i x i ( 0 ) z^{(0)}=\sum_{i=1}^{m}c_i x_i^{(0)} z(0)=i=1mcixi(0)
    z ( 1 ) = ∑ i = 1 m ( x i ( 0 ) − θ a i j ) c i + θ c j = ∑ i = 1 m c i x i ( 0 ) + θ ( c j − ∑ i = 1 m a i j ) = z ( 0 ) + θ ( c j − ∑ i = 1 m c i a i j )

    z(1)=i=1m(xi(0)θaij)ci+θcj=i=1mcixi(0)+θ(cji=1maij)=z(0)+θ(cji=1mciaij)" role="presentation" style="position: relative;">z(1)=i=1m(xi(0)θaij)ci+θcj=i=1mcixi(0)+θ(cji=1maij)=z(0)+θ(cji=1mciaij)
    z(1)=i=1m(xi(0)θaij)ci+θcj=i=1mcixi(0)+θ(cji=1maij)=z(0)+θ(cji=1mciaij)
    因为 θ > 0 \theta>0 θ>0,所以只要 c j − ∑ i = 1 m c i a i j > 0 c_j-\sum_{i=1}^{m}c_ia_{ij}>0 cji=1mciaij>0就有 z ( 1 ) > z ( 0 ) z^{(1)}>z^{(0)} z(1)>z(0)
    σ j = c j − z j = c j − ∑ i = 1 m c i a i j \sigma_j=c_j-z_j=c_j-\sum_{i=1}^{m}c_ia_{ij} σj=cjzj=cji=1mciaij称为检验数
    注意到 σ 1 , ⋯   , σ m ≥ 0 \sigma_1,\cdots,\sigma_m\ge 0 σ1,,σm0,所以算检验数的时候,只要算非基变量的检验数

    最优解

    如果所有 σ j ≤ 0 \sigma_j\le 0 σj0,那么 z ( 1 ) z^{(1)} z(1)就是最优值

    证明:
    x \mathbf{x} x是最优解, y \mathbf{y} y为可行解
    A x = b , A y = b \mathbf{Ax}=\mathbf{b},\mathbf{Ay}=\mathbf{b} Ax=b,Ay=b
    x \mathbf{x} x的基为 B = I \mathbf{B}=\mathbf{I} B=I,前 m m m个分量为基变量
    A = ( B , N ) = ( I , N ) \mathbf{A}=\left(\mathbf{B},\mathbf{N}\right)=\left(\mathbf{I},\mathbf{N}\right) A=(B,N)=(I,N)
    d = y − x , d B = ( d 1 , ⋯   , d m ) T , d N = ( d m + 1 , ⋯   , d n ) T \mathbf{d}=\mathbf{y}-\mathbf{x},\mathbf{d}_{\mathbf{B}}=\left(d_1,\cdots,d_m\right)^T,\mathbf{d}_{\mathbf{N}}=\left(d_{m+1},\cdots,d_n\right)^T d=yx,dB=(d1,,dm)T,dN=(dm+1,,dn)T
    c B = ( c 1 , ⋯   , c m ) T , c N = ( c m + 1 , ⋯   , c n ) T \mathbf{c}_{\mathbf{B}}=\left(c_1,\cdots,c_m\right)^T,\mathbf{c}_{\mathbf{N}}=\left(c_{m+1},\cdots,c_n\right)^T cB=(c1,,cm)T,cN=(cm+1,,cn)T
    A d = 0 B d B + N d N = 0 d B = − N d N

    Ad=0BdB+NdN=0dB=NdN" role="presentation" style="position: relative;">Ad=0BdB+NdN=0dB=NdN
    AdBdB+NdNdB=0=0=NdN
    c T d = c B T d B + c N T d N = − c B T N d N + c N T d N = ( c N T − c B T N ) d N = ∑ j = m + 1 n σ j d j
    cTd=cBTdB+cNTdN=cBTNdN+cNTdN=(cNTcBTN)dN=j=m+1nσjdj" role="presentation" style="position: relative;">cTd=cBTdB+cNTdN=cBTNdN+cNTdN=(cNTcBTN)dN=j=m+1nσjdj
    cTd=cBTdB+cNTdN=cBTNdN+cNTdN=(cNTcBTN)dN=j=m+1nσjdj

    因为 x m + 1 , ⋯   , x n = 0 , y m + 1 , ⋯   , y n ≥ 0 x_{m+1},\cdots,x_n=0,y_{m+1},\cdots,y_n\ge 0 xm+1,,xn=0,ym+1,,yn0,所以 d m + 1 , ⋯   , d n ≥ 0 d_{m+1},\cdots, d_n\ge 0 dm+1,,dn0
    c T d ≤ 0 ⇒ c T x ≥ c T y \mathbf{c}^T\mathbf{d}\le 0\Rightarrow \mathbf{c}^T\mathbf{x}\ge \mathbf{c}^T\mathbf{y} cTd0cTxcTy

    无穷多解

    如果所有 σ j ≤ 0 \sigma_j\le 0 σj0,并且其中一个 σ j = 0 \sigma_j=0 σj=0,则 z ( 1 ) = z ( 0 ) z^{(1)}=z^{(0)} z(1)=z(0),也就是说 x ( 0 ) , x ( 1 ) x^{(0)},x^{(1)} x(0),x(1)都是最优解
    因为可行域是个凸集,所以 ∀ λ ∈ [ 0 , 1 ] , λ x ( 0 ) + ( 1 − λ ) x ( 1 ) \forall \lambda \in\left[0,1\right],\lambda x^{(0)}+\left(1-\lambda\right)x^{(1)} λ[0,1],λx(0)+(1λ)x(1)也是最优解,即有无穷多解

    无界解

    如果 σ j > 0 \sigma_j>0 σj>0,并且 A j ≤ 0 \mathbf{A}_j\le 0 Aj0,那么 ∀ θ > 0 , s . t .   x i ( 0 ) − θ a i j ≥ 0 \forall \theta>0,s.t.\ x_i^{(0)}-\theta a_{ij}\ge 0 θ>0,s.t. xi(0)θaij0
    那么 z ( 1 ) z^{(1)} z(1)可以无限增大,故无界

    计算步骤

    实在是懒得画表了,直接截图了
    第1步:求BFS,列单纯形表
    在这里插入图片描述
    第2步:最优性检验
    如果所有的 c j − z j ≤ 0 c_j-z_j\le 0 cjzj0,且基变量不包含人工变量,则表中的基可行解就是最优解
    如果存在 c j − z j > 0 c_j-z_j>0 cjzj>0,如果 A j ≤ 0 \mathbf{A}_j\le 0 Aj0,则问题为无界解,否则进行下一步

    第3步:从一个BFS转到相邻的目标函数值更大的BFS,列出新的单纯形表
    1.确定入基变量
    只要检验数 σ j > 0 \sigma_j>0 σj>0,对应的 x j x_j xj都可以作为入基变量,但是一般找最大的 σ k \sigma_k σk
    σ k = max ⁡ j { σ j ∣ σ j > 0 } \sigma_k=\max_{j}\left\{\sigma_j|\sigma_j>0\right\} σk=jmax{σjσj>0}
    其对应的变量 x k x_k xk为入基变量

    2.确定出基变量
    θ = min ⁡ i { b i a i k ∣ a i k > 0 } = b l a l k \theta=\min_{i}\left\{\frac{b_i}{a_{ik}}|a_{ik}>0\right\}=\frac{b_l}{a_{lk}} θ=imin{aikbiaik>0}=alkbl
    x l x_l xl是出基变量, a l k a_{lk} alk称为主元素

    3.用入基变量 x k x_k xk替换出基变量 x l x_l xl,得到新的基
    通过初等行变换使得 A k \mathbf{A}_k Ak变换为 e k \mathbf{e}_k ek
    在这里插入图片描述

    人工变量

    max ⁡ z = − 3 x 1 + x 3 + 0 x 4 + 0 x 5  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 = 1 3 x 2 + x 3 = 9 x 1 , x 2 , x 3 , x 4 , x 5 ⩾ 0

    maxz=3x1+x3+0x4+0x5 s.t. {x1+x2+x3+x4=42x1+x2x3x5=13x2+x3=9x1,x2,x3,x4,x50" role="presentation" style="position: relative;">maxz=3x1+x3+0x4+0x5 s.t. {x1+x2+x3+x4=42x1+x2x3x5=13x2+x3=9x1,x2,x3,x4,x50
    maxz=3x1+x3+0x4+0x5 s.t.  x12x1x1,x2,x3,x4,x50+x2+x23x2+x3x3+x3+x4x5=4=1=9
    这种情况下,找不到单位矩阵作为基,所以需要引入人工变量

    大M法

    引入人工变量 x 6 , x 7 x_6,x_7 x6,x7
    max ⁡ z = − 3 x 1 + x 3 + 0 x 4 + 0 x 5 − M x 6 − M x 7  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 + x 6 = 1 3 x 2 + x 3 + x 7 = 9 x j ⩾ 0 ( j = 1 , ⋯   , 7 )

    maxz=3x1+x3+0x4+0x5Mx6Mx7 s.t. {x1+x2+x3+x4=42x1+x2x3x5+x6=13x2+x3+x7=9xj0(j=1,,7)" role="presentation" style="position: relative;">maxz=3x1+x3+0x4+0x5Mx6Mx7 s.t. {x1+x2+x3+x4=42x1+x2x3x5+x6=13x2+x3+x7=9xj0(j=1,,7)
    maxz=3x1+x3+0x4+0x5Mx6Mx7 s.t.  x12x1xj0(j=1,,7)+x2+x23x2+x3x3+x3+x4x5+x6+x7=4=1=9
    其中 M = + ∞ M=+\infty M=+,即一个很大的数
    想要取到最优解,显然需要人工变量为0
    如果人工变量不为0,则无可行解

    两阶段法

    大M法手算的时候不会有什么问题,但是机器算的时候会出现问题

    两阶段法:
    第一阶段是求解只包含人工变量的线性规划问题,即令目标函数中其他变量的系数取零,人工变量的系数取某个正的常数(一般取1),在保持原问题约束条件不变的清况下求这个目标函数极小化时的解。显然在第一阶段中,当人工变量取值为0时,目标函数值也为0.这时候的最优解就是原线性规划问题的一个基可行解。如果第一阶段最优值不为0,原问题物可行解

    当第一阶段求解结果表明问题有可行解时,第二阶段是在原问题中去除人工变量,并从此可行解(即第一阶段的最优解)出发,继续寻找问题的最优解

    还是上面的例子
    min ⁡ z = x 6 + x 7  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 + x 6 = 1 3 x 2 + x 3 + x 7 = 9 x j ⩾ 0 ( j = 1 , ⋯   , 7 )

    minz=x6+x7 s.t. {x1+x2+x3+x4=42x1+x2x3x5+x6=13x2+x3+x7=9xj0(j=1,,7)" role="presentation" style="position: relative;">minz=x6+x7 s.t. {x1+x2+x3+x4=42x1+x2x3x5+x6=13x2+x3+x7=9xj0(j=1,,7)
    minz=x6+x7 s.t.  x12x1xj0(j=1,,7)+x2+x23x2+x3x3+x3+x4x5+x6+x7=4=1=9
    转标准型
    max ⁡ z = − x 6 − x 7  s.t.  { x 1 + x 2 + x 3 + x 4 = 4 − 2 x 1 + x 2 − x 3 − x 5 + x 6 = 1 3 x 2 + x 3 + x 7 = 9 x j ⩾ 0 ( j = 1 , ⋯   , 7 )
    maxz=x6x7 s.t. {x1+x2+x3+x4=42x1+x2x3x5+x6=13x2+x3+x7=9xj0(j=1,,7)" role="presentation" style="position: relative;">maxz=x6x7 s.t. {x1+x2+x3+x4=42x1+x2x3x5+x6=13x2+x3+x7=9xj0(j=1,,7)
    maxz=x6x7 s.t.  x12x1xj0(j=1,,7)+x2+x23x2+x3x3+x3+x4x5+x6+x7=4=1=9

    在这里插入图片描述
    求完就发现, x 4 , x 2 , x 1 x_4,x_2,x_1 x4,x2,x1就是基变量了
    然后把目标函数变回原来的目标函数,继续求解(人工变量已经没有用了,可以去掉了)
    在这里插入图片描述

    退化

    按最小比值 θ \theta θ来确定出基变量时,可能存在2个或者以上最小比值,从而使下一个表的基可行解中出现一个或多个基变量为0的退化解。

    退化解的出现,原因是存在多余约束,使得多个基可行解对应同一个顶点。当存在退化解的时候可能出现循环。
    为了避免这个问题:(1)当存在多个 σ j > 0 \sigma_j>0 σj>0时,选下标最小的作为入基变量
    (2)当出现多个 θ \theta θ的最小比值时,选下标最小的作为出基变量
    (总结起来就是选下标最小)

    代码

    摸了

    参考
    运筹学教程(第5版)(胡运权, 郭耀煌, 龚益鸣, 程佳惠, 陈秉正)
    https://mp.weixin.qq.com/s/tm5EuZNLrL8SUWlRXKgR3Q

  • 相关阅读:
    什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?
    华为机试真题 C++ 实现【处理器问题】【2022.11 Q4 新题】
    马赫数相关函数
    [NSSRound#1 Basic]basic_check
    LeetCode 0241.为运算表达式设计优先级 - DFS
    阿里巴巴微服务核心手册:Spring Boot+Spring cloud+Dubbo
    OpenGL - Parallax Mapping
    HP E1740A 模拟量输入模块
    【Selenium】Selenium获取Network数据(高级版)
    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)
  • 原文地址:https://blog.csdn.net/qq_39942341/article/details/126159840