zoukankan      html  css  js  c++  java
  • 笔记:线性规划问题(基础)

    线性规划问题

    线性规划的标准形

    将一个线性规划问题化为标准形的方法不再叙述(求(max)改求(min),不等号补松弛变量和剩余变量变等号)。

    标准形可以写为如下的矩阵形式:

    [A=left[ egin{matrix} a_{11} &a_{12} &cdots &a_{1n} \ a_{21} &a_{22} &cdots &a_{2n}\ &cdots&cdots \ a_{m1} &a_{m2} &cdots &a_{mn} end{matrix} ight]quad b=left[ egin{matrix} b_1\ b_2 \ vdots\ b_m end{matrix} ight]quad c=left[ egin{matrix} c_1\ c_2 \ vdots\ c_n end{matrix} ight]quad X=left[ egin{matrix} x_1\ x_2 \ vdots\ x_n end{matrix} ight] ]

    例如以下这个标准形线性规划问题:

    [min z=-12x_1-15x_2\{ m s.t.} 0.25x_1+0.5x_2+x_3=120\0.5x_1+0.5x_2+x_4=150\0.25x_1+x_5=50\(x_1ge 0,x_2ge 0,x_3ge 0,x_4ge 0,x_5ge 0) ]

    将它写成矩阵乘法:

    [left[ egin{matrix} 0.25 &0.50 &1 &0 &0 \ 0.50 &0.50 &0 &1 &0\ 0.25 &0 &0 &0 &1\ end{matrix} ight]left[ egin{matrix} x_1\ x_2 \ x_3\ x_4\ x_5 end{matrix} ight]=left[ egin{matrix} 120\150\50 end{matrix} ight] ]

    令:

    [A=left[ egin{matrix} 0.25 &0.50 &1 &0 &0 \ 0.50 &0.50 &0 &1 &0\ 0.25 &0 &0 &0 &1\ end{matrix} ight]quad b=left[ egin{matrix} 120\150\50 end{matrix} ight]quad X=left[ egin{matrix} x_1\ x_2 \ x_3\ x_4\ x_5 end{matrix} ight]quad c=left[ egin{matrix} -12\ -15 \ 0\ 0\ 0 end{matrix} ight] ]

    那么原来的线性规划标准形可简写为以下的矩阵乘法形式:

    [min z=c^TX\{ m s.t.} AX=b\Xge {f 0} ]

    这里的(Xge {f 0})表示向量(X)的每个分量非负,以后不再赘述。

    线性规划标准形的可行解性质

    定义

    (rank(A)=m),(A)(m)个线性无关的列向量组成的线性极大无关组称作标准形的(列空间的一个基底)。给定一个基:(B=(P_{i_1},P_{i_2},cdots,P_{i_m})),对应基中列向量的变量(x_{i_1},x_{i_2},cdots,x_{i_m})称作基变量(在矩阵乘法中与标准形基底列向量相乘的(X)的分量),其余变量称作非基变量

    将基变量构成的向量记作(X_B),非基变量构成的向量记作(X_N),令(X_N={f 0}),则等式约束条件变为

    [BX_B=b ]

    解得(X_B=B^{-1}b).该向量满足约束(AX=b)且非基变量全为0,称作关于基(B)基本解,如果(X)是一个基本解且(Xge {f 0}),则称(X)是一个基本可行解,对应的基(B)成为可行基

    (注:关于为何矩阵(B)一定是可逆的?我们在这里假设线性规划的几个约束条件是线性无关的,即矩阵(A)行满秩。如若不然,(A)中存在一行可被其他行线性表出,则这个约束条件是冗余的。又矩阵的行秩等于列秩,(B)的列向量组是(A)列向量的线性极大无关组,那么(B)一定为满秩方阵,故(B)可逆。 实际上我们可以进一步推出,(A)的行数严格小于列数,如若不然,由于(A)行满秩,矩阵行秩等于列秩,所以列数大于等于列秩。若列数等于列秩,则线性方程组(AX=b)的解是唯一确定的,线性规划问题就没有意义了。)

    基本可行解的性质

    引理

    (AX=b)的解(alpha)是基本解(Leftrightarrowalpha)中非零分量对应列向量线性无关。

    定理1

    如果标准形有可行解,则必有基本可行解。

    定理2

    如果标准形有最优解,则必存在一个基本可行解是最优解。

    单纯形法

    基本步骤

    (1).确定初始的基本可行解

    (2).检查当前的基本可行解:若当前基本可行解是最优解,或者判断该标准形无最优解,则计算结束;否则作基变换:用一个非基变量替换基变量,得到一个新的可行基和对应基本可行解,且使目标函数值下降(或不升)。

    (3).重复(2).

    如何选择初始基本可行解

    一般引入(m)个松弛变量(x_{n+i}ge0(i=1,2,cdots,m)),将这(m)个松弛变量取为基变量,则初始基本可行解对应基变量部分:

    [X_B={f 0} ]

    非基变量部分:

    [X_N=(b_1,b_2,cdots,b_m)^T ]

    初始基本可行解:

    [X^{(0)}={left(egin{array}{c}X_B\X_N end{array} ight)}=(0,0,cdots,0,b_1,b_2,cdots,b_m)^T ]

    最优性检验

    给定可行基(B=(P_{k_1},P_{k_2},cdots,P_{k_m})),将(AX=b)两边同时乘以(B^{-1}),得(B^{-1}AX=B^{-1}b).记(A)中对应非基变量得列向量构成矩阵为(N).

    不妨设(矩阵分块):

    [A=(B N)\X=left( egin{array}{c} X_B\X_Nend{array} ight) ]

    则:

    [egin{aligned}AX&=b\Rightarrow (B N)left( egin{array}{c} X_B\X_Nend{array} ight)&=b\BX_B+NX_N&=b\B^{-1}BX_B+B^{-1}NX_N&=B^{-1}b\X_B&=B^{-1}b-B^{-1}NX_Nend{aligned} ]

    代入目标函数

    [egin{aligned}z&=c^TX\&=c_B^TX_B+c_N^TX_N\&=c_B^T(B^{-1}b-B^{-1}NX_N)+c_N^TX_N\&=c_B^TB^{-1}b+(c_N^T-c_B^TB^{-1}N)X_Nend{aligned} ]

    基本可行解(X_B^{(0)}=B^{-1}b,X_N^{(0)}=0),目标函数值为(z_0=c_B^TB^{-1}b)

    [egin{aligned}z&=c^TX\&=z_0+(c_N^T-c_B^TB^{-1}N)X_N\&=z_0+(c_B^T-c_B^TB^{-1}B)X_B+(c_N^T-c_B^TB^{-1}N)X_N\&=z_0+(c^T-c_B^TB^{-1}A)Xend{aligned} ]

    (Lambda^T=c^T-c_B^TB^{-1}A=(lambda_1,lambda_2,cdots,lambda _n)^T)检验数,则目标函数可以简化为:

    [z=z_0+Lambda^TX ]

    (B^{-1}A=(alpha_{ij})_{m imes n},P_j'=B^{-1}P_j(1le j le n),eta =B^{-1}b)

    定理3

    给定基本可行解(X^{(0)}),若所有检验数非负,则(X^{(0)})是最优解。若存在检验数(lambda_k<0)且所有(alpha_{ik}le 0(1le i le m)),则无最优解。

    基变换

    给定可行基(B=(P_{pi(1)},P_{pi(2)},cdots,P_{pi(m)})),设(lambda_k<0)(alpha _{lk}>0)(x_k)必是非基变量。

    用非基变量(x_k)替换基变量(x_{pi(l)}),用(P_k)替换(B)中的(P_{pi(l)}),新的基为

    [B'=(P_{pi(1)},cdots,P_{pi(l-1)},P_k,P_{pi(l+1)}cdots,P_{pi(m)}) ]

    (x_k)为换入变量,(x_{pi(l)})为换出变量。选取(l)的方法:使得

    [frac{eta_l}{alpha_{lk}}=min {frac{eta_i}{alpha_{ik}}|alpha_{ik}>0,1le i le m } ]

    针对最小化的单纯形法算法步骤

    1.设初始可行基

    [B=(P_{pi(1)},P_{pi(2)},cdots,P_{pi(m)})\(alpha_{ij})_{m imes n}=B^{-1}A\eta=B^{-1}b\Lambda^T=c^T-B^{-1}A\z_0=B^{-1}b ]

    2.若所有(lambda_jge0(1le jle n)),则(X_B=eta,X_N={f 0})是最优解,计算结束。

    3.取(lambda_k<0),若所有(alpha_{ik}le 0 (1le i le m)),则无最优解,计算结束。

    4.取(1le lle m)使得

    [frac{eta_l}{alpha_{lk}}=min {frac{eta_i}{alpha_{ik}}|alpha_{ik}>0,1le i le m } ]

    5.以(x_k)为换入变量,(x_{pi(i)})为换出变量做基变换。

    6.转第2步判断。

  • 相关阅读:
    C# 6.0
    C# 4.0
    C# 5.0
    C# 3.0
    C# 2.0
    C# 1.0(2002)
    字典树Trie
    Hadoop——生态体系
    程序是怎样跑起来的
    Redis实战(十七)Redis各个版本新特性
  • 原文地址:https://www.cnblogs.com/allegro-vivace/p/12614899.html
Copyright © 2011-2022 走看看