• 单纯形法


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

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

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

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

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

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

    问题描述

    [min z=CX quad mathrm{s.t.} egin{matrix}AX=b \ X geq 0end{matrix} ]

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

    确定初始的基本可行解

    约束方程(AX=b)表示为:

    [AX = (B ; N) egin{pmatrix}X_B \ X_Nend{pmatrix} = BX_B + NX_N = b ]

    得:(X_B = B^{-1}b - B^{-1}NX_N)

    若令所有非基变量(X_N = 0)

    则基变量(X_B = B^{-1}b)

    由此可得初始的基本可行解(X = egin{pmatrix}B^{-1}b \ 0end{pmatrix})

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

    假如已经求得一个基本可行解(X = egin{pmatrix}B^{-1}b \ 0end{pmatrix})将其代入目标函数,可求得相应的目标函数值

    [z = CX = egin{pmatrix}C_B & C_Nend{pmatrix} egin{pmatrix}B^{-1}b \ 0end{pmatrix} = C_BB^{-1}b ]

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

    怎么判断(C_BB^{-1}b)是否已经达到最小值?

    [min z = C_BB^{-1}b + (C_N - C_BB^{-1}N)X_N \ mathrm{s.t.} ; egin{array}{l}X_B = B^{-1}b - B^{-1}NX_{N} \ X_B, X_N geq 0end{array} ]

    定理1 (最优化准则)如果(sigma_N geq 0),则基可行解(x = egin{pmatrix}B^{-1}b \ 0end{pmatrix})为原问题的最优解.

    其中,(sigma_N = C_N - C_BB^{-1}N = (sigma_{m+1}, sigma_{m+2}, cdots, sigma_{n}))称为非基变量(X_N)的检验向量,它的各个分量称为检验数.

    (sigma_N)的每一个检验数均大于等于0,即(sigma_N geq 0),则目前的基本可行解就是最优解.

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

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

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

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

    [min {sigma_j | sigma_j < 0, m + 1 leq j leq n } = sigma_{m+k} ]

    则选取对应的(x_{m+k})为换入变量.

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

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

    如果确定确定(x_{m+k})为换入变量,设(p_{m+k})(A)中与(x_{m+k})对应的系数列向量.

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

    [ heta = min{frac{(B^{-1}b)_i}{(B^{-1}p_{m+k})_i}|(B^{-1}p_{m+k})_i>0, 1leq i leq m} = frac{(B^{-1}b)_l}{(B^{-1}p_{m+k})_l} ]

    则选取对应的基变量(x_l)为换出变量.

    例子

    [min z = -5x_1 - 2x_2 - 3x_3 + x_4 - x_5 ]

    [mathrm{s.t.} ; left{egin{align}x_1 + 2x_2 + 2x_3 + x_4 = 8 \ 3x_1 + 4x_2 + x_3 + x_5 = 7 \ x_1, x_2, x_3, x_4, x_5 geq 0end{align} ight. ]

    解:已知(A = egin{bmatrix}1 & 2 & 2 & 1 & 0 \ 3 & 4 & 1 & 0 & 1end{bmatrix})(b = egin{bmatrix}8 \ 7end{bmatrix})(C = (-5, -2, -3,1, -1))

    1. 确定初始基本可行解

    基变量(x_4)(x_5)(B = egin{pmatrix}P_4 & P_5end{pmatrix} = egin{bmatrix}1 & 0 \ 0 & 1end{bmatrix})

    (X_B = egin{pmatrix}x_4 & x_5end{pmatrix}^{mathrm{T}})(X_N = egin{pmatrix}x_1 & x_2 & x_3end{pmatrix}^{mathrm{T}})

    (B = egin{bmatrix}1 & 0 \ 0 & 1end{bmatrix})(N = egin{bmatrix}1 & 2 & 2 \ 3 & 4 & 1end{bmatrix})

    (C_B = egin{pmatrix}1 & -1end{pmatrix})(X_N = egin{pmatrix}-5 & -2 & -3end{pmatrix})

    [b = egin{pmatrix}8 & 7end{pmatrix}^{mathrm{T}} ]

    (X_N = 0),则(X_B = B^{-1}b = egin{pmatrix}8 & 7end{pmatrix}^{mathrm{T}})(X = egin{pmatrix}0 & 0 & 0 & 8 & 7end{pmatrix}^{mathrm{T}})

    [z = C_BB^{-1}b = 1 ]

    1. 检验(X)是否最优

    检验向量(sigma_N = C_N - C_BB^{-1}N = (-3, 0, -4))

    因为(sigma_1)(sigma_3)均小于0,所以(X = egin{pmatrix}0 & 0 & 0 & 8 & 7end{pmatrix}^{mathrm{T}})不是最优解.

    1. 基本可行解的改进

    (1)选取换入变量

    因为(min{-3, -4}=-4),选取(x_3)为换入变量

    (2)选取换出变量

    (B^{-1}b = egin{pmatrix}8 & 7end{pmatrix}^{mathrm{T}})(B^{-1}P^3 = egin{pmatrix}2 & 1end{pmatrix}^{mathrm{T}} > 0)

    因为(min{frac{8}{2}, frac{7}{1}} = frac{8}{2}),选取(x_4)为换出变量.

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

    对约束方程组的增广矩阵(egin{bmatrix}A & bend{bmatrix})施以初等行变换,使换入变量(x_3)所对应的系数向量(P_2)变换成换出向量(x_4)所对应的单位向量(P_4),保持(x_5)的系数向量(P_5)为单位向量不变.

    [egin{pmatrix}1 & 2 & 2 & 1 & 0 & 8 \ 3 & 4 & 1 & 0 & 1 & 7end{pmatrix} Rightarrow egin{pmatrix}frac{1}{2} & 1 & 1 & frac{1}{2} & 0 & 4 \ frac{5}{2} & 3 & 0 & -frac{1}{2} & 1 & 3end{pmatrix} ]

    基变量(x_3)(x_5)(B = egin{pmatrix}P_3 & P_5end{pmatrix} = egin{bmatrix}1 & 0 \ 0 & 1end{bmatrix})

    (X_B = egin{pmatrix}x_3 & x_5end{pmatrix}^{mathrm{T}})(X_N = egin{pmatrix}x_1 & x_2 & x_4end{pmatrix}^{mathrm{T}})

    (B = egin{bmatrix}1 & 0 \ 0 & 1end{bmatrix})(N = egin{bmatrix}frac{1}{2} & 1& frac{1}{2} \ frac{5}{2} & 3 & -frac{1}{2}end{bmatrix})

    (C_B = egin{pmatrix}-3 & -1end{pmatrix})(X_N = egin{pmatrix}-5 & -2 & -1end{pmatrix})

    [b = egin{pmatrix}4 & 3end{pmatrix}^{mathrm{T}} ]

    (X_N = 0),则(X_B = B^{-1}b = egin{pmatrix} 4& 3end{pmatrix}^{mathrm{T}})(X = egin{pmatrix}0 & 0 & 4 & 0 & 3end{pmatrix}^{mathrm{T}})

    [z = C_BB^{-1}b = -15 ]

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

    检验向量(sigma_N = C_N - C_BB^{-1}N = (-1, 4, 2))

    因为(sigma_1)小于0,所以(X = egin{pmatrix}0 & 0 & 4& 0 & 3end{pmatrix}^{mathrm{T}})不是最优解.

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

    (1)选取换入变量

    因为(sigma_1=-1),选取(x_1)为换入变量

    (2)选取换出变量

    (B^{-1}b = egin{pmatrix}4 & 3end{pmatrix}^{mathrm{T}})(B^{-1}P^3 = egin{pmatrix}frac{1}{2} & frac{5}{2}end{pmatrix}^{mathrm{T}} > 0)

    因为(min{frac{4}{1/2}, frac{3}{5/2}} = frac{3}{5/2}),选取(x_5)为换出变量.

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

    对约束方程组的增广矩阵施以初等行变换,使换入变量(x_1)所对应的系数向量(P_1)变换成换出向量(x_5)所对应的单位向量(P_5),保持(x_3)的系数向量(P_3)为单位向量不变.

    [egin{pmatrix}frac{1}{2} & 1 & 1 & frac{1}{2} & 0 & 4 \ frac{5}{2} & 3 & 0 & -frac{1}{2} & 1 & 3end{pmatrix} Rightarrow egin{pmatrix}0 & frac{2}{5} & 1 & frac{3}{5} & -frac{1}{5} & frac{17}{5} \ 1 & frac{6}{5} & 0 & -frac{1}{5} & frac{2}{5} & frac{6}{5}end{pmatrix} ]

    基变量(x_3)(x_1)(B = egin{pmatrix}P_3 & P_1end{pmatrix} = egin{bmatrix}1 & 0 \ 0 & 1end{bmatrix})

    (X_B = egin{pmatrix}x_3 & x_1end{pmatrix}^{mathrm{T}})(X_N = egin{pmatrix}x_2 & x_4 & x_5end{pmatrix}^{mathrm{T}})

    (B = egin{bmatrix}1 & 0 \ 0 & 1end{bmatrix})(N = egin{bmatrix}frac{2}{5} & frac{3}{5} & -frac{1}{5} \ frac{6}{5} & -frac{1}{5} & frac{2}{5}end{bmatrix})

    (C_B = egin{pmatrix}-3 & -5end{pmatrix})(X_N = egin{pmatrix}-2 & 1 & -1end{pmatrix})

    [b = egin{pmatrix}frac{17}{5} & frac{6}{5}end{pmatrix}^{mathrm{T}} ]

    (X_N = 0),则(X_B = B^{-1}b = egin{pmatrix}frac{17}{5} & frac{6}{5}end{pmatrix}^{mathrm{T}})(X = egin{pmatrix}frac{6}{5} & 0 & frac{17}{5} & 0 & 0end{pmatrix}^{mathrm{T}})

    [z = C_BB^{-1}b = -frac{81}{5} ]

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

    检验向量(sigma_N = C_N - C_BB^{-1}N = (frac{26}{5}, frac{9}{5}, frac{2}{5}))

    因为所有检验系数均小于0,所以(X = egin{pmatrix}frac{6}{5} & 0 & frac{17}{5} & 0 & 0end{pmatrix}^{mathrm{T}})是最优解.

    参考资料

    第四讲 单纯形法基本原理

  • 相关阅读:
    23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数
    22.C++- 继承与组合,protected访问级别
    LeetCode-391. 完美矩形(使用C语言编译,详解)
    LeetCode-101.对称二叉树
    STM32-对芯片启动读保护,实现加密(详解)
    21.C++- "++"操作符重载、隐式转换之explicit关键字、类的类型转换函数
    20.C++- "&&","||"逻辑重载操作符的缺陷、","逗号重载操作符的分析
    19.C++-(=)赋值操作符、初步编写智能指针
    18.C++-[ ]操作符使用 、函数对象与普通函数区别(详解)
    ECMAScript 6.0基础入门教程
  • 原文地址:https://www.cnblogs.com/theonegis/p/7679729.html
Copyright © 2020-2023  润新知