概念
线性规划问题:在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题
可行解:满足所有约束条件的解称为可行解
最优解:使目标函数达到最优值的可行解是最优解
可行域:所有可行解构成的集合
求线性规划的matlab解法
(1)基本函数:linprog(c,a,b,aeq,beq,lb,ub,x0,options)
[x,y] = linprog(c,a,b,aeq,beq,lb,ub,x0,options)
fval 返回目标函数的值,LB 和 UB 分别是变量 x 的下界和上界,x0 是 x 的初始值,OPTIONS 是控制参数。
(2)标准型:
min c’x
s.t. ax <= b
aeqx = beq
lb <= x <=rb
①当处理max或>=情况时,对应函数或不等式系数取反
②向量x:n行1列,变量系数c:n行一列
实例1:最基础的实现
例题1:
max z = 2x1 + 3x2 - 5x3
s.t. x1 + x2 + x3 = 7
2x1 - 5x2 + x3 ≥10
x1 + 3x2 + x3 ≤12
x1, x2 , x3 ≥ 0
因为最优解为max,需要转换取反 min z = -2x1-3x2+5x3
且不等式2x1-5x2+x3≥10转化为-2x1+5x2-x3≤-10
c = [-2;-3;5];
a = [-2,5,-1;1,3,1];
b = [-10;12];
aeq = [1,1,1];
beq = 7;
x = linprog(c,a,b,aeq,beq,zeros(3,1))
y = c'*x;
结果:
x =
6.4286
0.5714
0
y =
14.5714
实例2:绝对值转化为线性规划
理论依据:对任意的 xi ,存在ui , vi > 0满足xi = ui − vi ,| xi |= ui + vi,其中:
例题2:
min z=|x1|+2|x2|+3|x3|+4|x4|;
s.t. x1-x2-x3+x4=0;
x1-x2+x3-3x4=1;
x1-x2-2x3+3*x4=-1/2;
思路:利用绝对值得线性规划转换,将目标函数和约束条件转换为:
min z = (u1+v1)+2(u2+v2)+3(u3+v3)+4(u4+v4)
s.t. (u1-u2-u3+u4)-(v1-v2-v3+v4) = 0
(u1-u2+u3-3u4)-(v1-v2+v3-3v4) = 1
(u1-u2-2u3+3u4)-(v1-v2-2v3+3v4) = -1/2
最终得到的向量是[u1;u2;u3;u4;v1;v2;v3;v4]
c = [1;2;3;4;1;2;3;4]
aeq = [1,-1,-1,1,-1,1,1,-1;1,-1,1,-3;-1,1,-1,3;1,-1,-2,3,-1,1,2,-3];
beq = [0;1;-1/2];
x = linprog(c,[],[],aeq,beq,zeros(8,1))
z = c'*x
结果:
x =
0.2500
0
0
0
0
0
0
0.2500
z =
1.2500
实例3:生产决策问题
问题描述: