单纯形法(Simplex Method) 是一种用于求解线性规划(LP)问题的迭代算法,它从可行解的一个顶点开始,沿着可行区域的边界移动,逐步找到最优解。该方法特别适用于具有多个变量和约束的线性规划问题。
单纯形法的核心概念
-
标准形式:单纯形法通常要求线性规划问题以标准形式表达,即:
- 目标函数为最大化问题: Max Z = c 1 x 1 + c 2 x 2 + ⋯ + c n x n \text{Max} \quad Z = c_1x_1 + c_2x_2 + \dots + c_nx_n MaxZ=c1x1+c2x2+⋯+cnxn
- 约束为线性等式,且右侧为非负数: a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n ≤ b 1 a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n \leq b_1 a11x1+a12x2+⋯+a1nxn≤b1
- 所有变量必须是非负的: x i ≥ 0 x_i \geq 0 xi≥0
若原问题是线性不等式的形式,可以通过引入松弛变量将其转换为等式。
-
初始解:单纯形法从一个基本可行解开始,通常是某个顶点。
-
迭代步骤:单纯形法沿着可行区域的边界,从一个顶点移动到另一个顶点,逐步逼近最优解。在每一步中,单纯形法根据当前顶点的信息计算出下一个更好的顶点。
-
停止条件:当目标函数不再能够通过沿某个方向的移动得到改善时,算法停止,并输出当前解作为最优解。
单纯形法的解读步骤
- 建立初始表格:将线性规划问题转换为标准形式,并使用增广矩阵构造初始单纯形表格。
- 选择进入变量:在目标函数系数中选择一个正值的变量作为进入基的变量,表示沿该方向可以提升目标函数值。
- 选择离开变量:根据约束条件,找出一个基变量,在增加进入变量时最先到达零点。该变量将被替换为进入变量。
- 更新表格:通过高斯消元法,更新单纯形表格,使得进入变量成为新的基变量。
- 迭代:重复选择进入和离开变量的步骤,直到所有目标函数系数为非正数,即找到了最优解。
我们来看一个具体的实例,演示单纯形法的应用过程。
实例问题:
某公司生产两种产品,产品1每个单位利润为3,产品2每个单位利润为5。每周有两种资源可用:资源1最多30单位,资源2最多24单位。生产产品1需要2单位资源1和1单位资源2;生产产品2需要1单位资源1和2单位资源2。公司希望通过生产两种产品,最大化每周的总利润。
线性规划的数学描述:
目标函数:
Max Z = 3 x 1 + 5 x 2 \text{Max} \quad Z = 3x_1 + 5x_2 MaxZ=3x1+5x2
约束条件:
2 x 1 + x 2 ≤ 30 (资源1约束) 2x_1 + x_2 \leq 30 \quad \text{(资源1约束)} 2x1+x2≤30(资源1约束)
x 1 + 2 x 2 ≤ 24 (资源2约束) x_1 + 2x_2 \leq 24 \quad \text{(资源2约束)} x1+2x2≤24(资源2约束)
x 1 ≥ 0 , x 2 ≥ 0 (非负约束) x_1 \geq 0, \quad x_2 \geq 0 \quad \text{(非负约束)} x1≥0,x2≥0(非负约束)
转化为标准形式:
为了将约束转换为等式,我们引入松弛变量 s 1 s_1 s1 和 s 2 s_2 s2:
2 x 1 + x 2 + s 1 = 30 2x_1 + x_2 + s_1 = 30 2x1+x2+s1=30
x 1 + 2 x 2 + s 2 = 24 x_1 + 2x_2 + s_2 = 24 x1+2x2+s2=24
其中, s 1 , s 2 ≥ 0 s_1, s_2 \geq 0 s1,s2≥0表示松弛变量,确保等式成立。
标准形式的目标函数:
Max Z = 3 x 1 + 5 x 2 + 0 s 1 + 0 s 2 \text{Max} \quad Z = 3x_1 + 5x_2 + 0s_1 + 0s_2 MaxZ=3x1+5x2+0s1+0s2
初始单纯形表格:
在单纯形法中,我们构造初始表格,如下所示:
基变量 | x 1 x_1 x1 | x 2 x_2 x2 | s 1 s_1 s1 | s 2 s_2 s2 | RHS |
---|---|---|---|---|---|
s 1 s_1 s1 | 2 | 1 | 1 | 0 | 30 |
s 2 s_2 s2 | 1 | 2 | 0 | 1 | 24 |
Z | -3 | -5 | 0 | 0 | 0 |
第一步:选择进入变量和离开变量
在目标行(Z 行)中,我们选择系数最负的变量作为进入变量。在此例中, x 2 x_2 x2系数为 -5,最负,因此 x 2 x_2 x2 是进入变量。
接下来,我们根据 RHS 列(右端常数)计算离开变量。计算标准是将 RHS 列中的值除以进入变量列中的正系数,选择最小的商:
30 1 = 30 , 24 2 = 12 \frac{30}{1} = 30, \quad \frac{24}{2} = 12 130=30,224=12
因此, s 2 s_2 s2 离开基,进入变量为 x 2 x_2 x2。
第二步:更新单纯形表格
我们通过高斯消元法更新表格,将 x 2 x_2 x2 作为新基变量。经过消元后,新的单纯形表格如下:
基变量 | x 1 x_1 x1 | x 2 x_2 x2 | s 1 s_1 s1 | s 2 s_2 s2 | RHS |
---|---|---|---|---|---|
s 1 s_1 s1 | 1.5 | 0 | 1 | -0.5 | 18 |
x 2 x_2 x2 | 0.5 | 1 | 0 | 0.5 | 12 |
Z | -0.5 | 0 | 0 | 2.5 | 60 |
第三步:继续迭代
此时,目标行中的所有系数都为非负,表示我们已经找到最优解。
最优解:
x 1 = 18 , x 2 = 12 x_1 = 18, x_2 = 12 x1=18,x2=12, 最优目标函数值 Z=60。公司每周生产 18 单位产品1和 12 单位产品2,利润最大化为 60。
总结
单纯形法通过迭代更新可行解的方式,寻找最优解。在每一步中,算法都会选择一个有潜力增加目标函数值的变量进入基,并在满足所有约束的前提下替换现有的基变量,直至找到最优解。