本文以一个实例直观地介绍simplex method算法的步骤,直观地介绍每步为啥要那样做,然后介绍该场景的对偶问题及该场景的线性代数语言描述
一个车间生产一个门获利56元,一个窗获利30元,
一个门需要木工4小时,油漆工2小时。
一个窗需要木工3小时,油漆工1小时。
每天可用木工120小时,油漆工50小时,
如何安排生产才能利润最大化
假设生产x1个门和x2个窗
添加松弛变量(slack variable,将不等式转换为等式)
说明:
各个约束条件构成一个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为油漆工每小时工钱
对偶问题是一个最小值问题, 将在下一篇文章中使用dual simplex method 规划
原问题
对偶问题
如果觉得对你有帮助,请杯啤酒分享你快乐把!,谢谢
https://brainkart.com/article/The-Simplex-Method_8052/
Posted in: IT人生
Comments are closed.