一、线性规划的基本思想
为求解决策变量,需要将目标函数、约束条件表达为决策变量的函数式,若约束条件和目标函数都是线性的,即表示約束条件的数学式子都是线性等式或线性不等式,表示问题最优化指标的目标函数都昌线性函数,则该问题就是线性规划的问题。
例:已知 { x ≤ 0 x + 2 y ≥ 0 x − 2 y + 4 ≥ 0 \left\{\begin{aligned} x\leq 0 \\ x+2y \geq 0 \\ x-2y+4 \geq 0 \end{aligned} \right. ⎩⎪⎨⎪⎧x≤0x+2y≥0x−2y+4≥0 (线性约束条件), 求: x + y x+y x+y (线性目标函数)的最值。
解:令 x + y = t x+y=t x+y=t,则点 ( x , y ) (x,y) (x,y) 在 “三角形阴影” 和 "直线 y = − x + t y=-x+t y=−x+t " 上,即 “阴影” 与 "直线 y = − x + t y=-x+t y=−x+t" 有交点
直线的截距为 t t t,易知直线过点A时得最大值 t m a x t_{max} tmax,直线过点B时得最小值 t m i n t_{min} tmin。
所以 { x = 0 y = 2 \left\{\begin{aligned} x=0 \\ y=2 \end{aligned} \right. {x=0y=2 时, x + y x+y x+y 有最大值2, { x = − 2 y = 1 \left\{\begin{aligned} x=-2 \\ y=1 \end{aligned} \right. {x=−2y=1 时, x + y x+y x+y 有最小值-1。
二、Excel求解线性规划
问题描述:
M
a
x
Z
=
60
x
1
+
20
x
2
+
40
x
3
+
30
x
4
s
.
t
.
{
4
x
1
+
2
x
2
+
x
3
+
2
x
4
≤
600
(
木
材
约
束
)
6
x
1
+
2
x
2
+
x
3
+
2
x
4
≤
1000
(
玻
璃
约
束
)
2
x
1
+
2
x
2
+
3
x
3
+
2
x
4
≤
400
(
劳
动
时
间
约
束
)
x
1
≤
100
(
家
具
1
需
求
量
约
束
)
x
2
≤
200
(
家
具
2
需
求
量
约
束
)
x
3
≤
50
(
家
具
3
需
求
量
约
束
)
x
4
≤
100
(
家
具
4
需
求
量
约
束
)
x
1
,
x
2
,
x
3
,
x
4
≥
0
(
非
负
约
束
)
MaxZ = 60x_1 + 20x_2 + 40x_3 + 30x_4 \\ s.t.\left\{\begin{aligned} 4x_1 + 2x_2 + x_3 + 2x_4 \leq 600 \qquad (木材约束) \\ 6x_1 + 2x_2 + x_3 + 2x_4 \leq 1000 \qquad (玻璃约束) \\ 2x_1 + 2x_2 + 3x_3 + 2x_4 \leq 400 \qquad (劳动时间约束) \\ x_1 \leq 100 \qquad (家具1需求量约束) \\ x_2 \leq 200 \qquad (家具2需求量约束) \\ x_3 \leq 50 \qquad (家具3需求量约束) \\ x_4 \leq 100 \qquad (家具4需求量约束) \\ x_1,x_2,x_3,x_4 \geq 0 \qquad (非负约束) \end{aligned} \right.
MaxZ=60x1+20x2+40x3+30x4s.t.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧4x1+2x2+x3+2x4≤600(木材约束)6x1+2x2+x3+2x4≤1000(玻璃约束)2x1+2x2+3x3+2x4≤400(劳动时间约束)x1≤100(家具1需求量约束)x2≤200(家具2需求量约束)x3≤50(家具3需求量约束)x4≤100(家具4需求量约束)x1,x2,x3,x4≥0(非负约束)
劳动力约束:
木材约束,玻璃约束,目标实际值添加方法一样
规划求解:
① 选择规划求解:
② 设置目标和可变单元格
③ 添加劳动力、木材、玻璃约束
④ 添加决策变量得约束
⑤ 求解方法选择:单纯线性规划
单纯形法的基本思路
单纯形法的基本思想是:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。 根据单纯形法的原理,在线性规划问题中,决策变量(控制变量)x1,x2,…x n的值称为一个解,满足所有的约束条件的解称为可行解。使目标函数达到最大值(或最小值)的可行解称为最优解。这样,一个最优解能在整个由约束条件所确定的可行区域内使目标函数达到最大值(或最小值)。求解线性规划问题的目的就是要找出最优解。
单纯形法的解题步骤
- 把线性规划问题的约束方程组表达成典范型方程组,典范型方程组要实现变量转换(所有变量为非负)、目标转换(统一为求极大值,若求极小值可乘以(-1))、约束转换(由不等式转化为等式)。然后,找出基本可行解作为初始基可行解。列出初始单纯形表。
- 若基本可行解不存在,即约束条件有矛盾,则问题无解。
- 若基本可行解存在,从初始基可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。
- 按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。
- 若迭代过程中发现问题的目标函数值无界,则终止迭代。
⑥ 选择报告类型
最终求解的值
三、Python 编程实现【scipy库】
① 数据的约束向量
4 2 1 2 600
6 2 1 2 1000
2 2 3 2 400
1 0 0 0 100
0 1 0 0 200
0 0 1 0 50
0 0 0 1 100
② 导入所需库
from scipy import optimize
import numpy as np
③ 添加约束向量
c = np.array([60,20,40,30])
A_ub = np.array([[4,2,1,2],[6,2,1,2],[2,2,3,2],[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]])
B_ub = np.array([600,1000,400,100,200,50,100])
④ 求解
res =optimize.linprog(-c,A_ub,B_ub)
print(res)
- 参数c:表示目标函数中的系数,一个一维的数组
- 参数A_ub:该参数为可选参数,若线性规划问题中的约束条件含有不等式则使用该参数,A_ub是一个二维的矩阵(数组),它的每一行都代表一个不等式的系数
- 参数b_ub:该参数为可选参数,对应上面的系数矩阵,是一个一维的列向量
由此可见,excel 和 python编程求解线性规划问题,所得的最优解结果一致