本文以一个实例直观地介绍simplex method算法的步骤,直观地介绍每步为啥要那样做,然后介绍该场景的对偶问题及该场景的线性代数语言描述
一个车间生产一个门获利56元,一个窗获利30元,
一个门需要木工4小时,油漆工2小时。
一个窗需要木工3小时,油漆工1小时。
每天可用木工120小时,油漆工50小时,
如何安排生产才能利润最大化
假设生产x1个门和x2个窗
max\ z = 56x_1 + 30x_2 \\
s.t.
\left\{\begin{matrix}
\ 4x_1+3x_2 \leq 120 \\
2x_1+x_2 \leq 50 \\
x_1,x_2 \geq 0 \\
\end{matrix}\right. \\
添加松弛变量(slack variable,将不等式转换为等式)
4x_1+3x_2 + s_1 =120 \\
2x_1+x_2 + s_2 = 50
说明:
各个约束条件构成一个feasible region(可行域),从几何意义上看确定了一个凸多边形,根据定义最优解一定出现在凸多边形的某个顶点上。simplex method选定一个初始可行解,迭代一次前往正收益的邻接顶点(extreme point,极值点),如果没有邻接顶点可以选择那么当前顶点为最优解。
,
步骤1中松弛变量构成一个m阶的单位矩阵,目标行中系数之所以为负,是因为初等行变换操作只有乘以一个标量和加上某行的n倍,如果系数为正,进行初等行变换需要加上别的行的-n倍,那么目标行的solution为负 。
步骤3选择"选择目标行绝对值最大元素"的依据是系数越大, 那么该变量+1,那么目标函数增加量越大。
步骤4选择"solution/pivot最小值"的依据是从线性角度看,solution列是前面各列的线性组合,要是选择"solution/pivot最大值" 会导致其他列左右不平衡
初始化表格
basic | x1 | x2 | s1 | s2 | solution |
---|---|---|---|---|---|
s1 | 4 | 3 | 1 | 0 | 120 |
s2 | 2 | 1 | 0 | 1 | 50 |
z | -56 | -30 | 0 | 0 | 0 |
最后一行为目标行(objective row)
basic 这列表示选定的基(basic),本例有四个可供选择的候选基(x1|x2|s1|s2)
但是两个基确定一个平面,为了简单,初始时选择松弛变量s1和s2确定的单位正交基
solution 列表示每个基的组合系数,初始时120s1+50s2, 目标值=0
根据"目标行绝对值最大"-56确定进入变量为x1, 根据"solution/pivot最小值", min(120/4, 50/2) 确定pivot row = 2,那么departing variable = s2 ,将第二行前面basic的标签改为x1。
根据初等行变换,将第二行每个元素除以2,第一行和第三行分别加上第二行的-4倍和56倍,得到下面的表格
第一次迭代后表格
basic | x1 | x2 | s1 | s2 | solution |
---|---|---|---|---|---|
s1 | 0 | 1 | 1 | -2 | 20 |
x1 | 1 | 1/2 | 0 | 1/2 | 25 |
z | 0 | -2 | 0 | 28 | 1400 |
根据"目标行绝对值最大"-2确定进入变量为x2, 根据"solution/pivot最小值", min(20/1, 25/.5) 确定pivot row = 1,那么departing variable = s1,将第一行前面basic的标签改为x2
根据初等行变换,支点元素已经为1,第二行和第三行分别加上第一行的-1/2倍和2倍,得到下面的表格
再次迭代后表格
basic | x1 | x2 | s1 | s2 | solution |
---|---|---|---|---|---|
x2 | 0 | 1 | 1 | -2 | 20 |
x1 | 1 | 0 | -1/2 | 3/2 | 15 |
z | 0 | 0 | 2 | 24 | 1440 |
目标行所有系数非负,结束,最优解为x2=20, x1=15, 目标值为1440, (2, 24)是对偶问题的解
假设有个老板要租赁该车间,最少需要支付的费用
设w1为木工每小时工钱, w2为油漆工每小时工钱
min \ f = 120w_1 + 50w_2 \\
s.t.
\left\{\begin{matrix}
4w_1 + 2w_2 \geq 56 \\
3w_1 + w_2 \geq 30 \\
w_1\ w_2 \geq 0 \\
\end{matrix}\right. \\
f^* = 1440 w^* = (2, 24)
对偶问题是一个最小值问题, 将在下一篇文章中使用dual simplex method 规划
原问题
z=c^T\mathbf{x}\\
Ax=b\\
x_1,x_2 \geq0
对偶问题
f=b^T\mathbf{w}\\
A^Tw = c\\
w_1,w_2 \geq 0
如果觉得对你有帮助,请杯啤酒分享你快乐把!,谢谢
https://brainkart.com/article/The-Simplex-Method_8052/
Posted in: IT人生
Comments are closed.