线性规划
线性规划(Linear programming,简称LP),是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。研究线性约束条件下线性目标函数的极值问题的数学理论和方法。英文缩写LP。
matlab处理线性规划
linprog函数介绍:
线性规划求解器查找由所指定问题的最小值
f,x,b,beq,lb和ub是向量,而A和Aeq是矩阵。
因为线性规划的不等式符号不好控制,所以matlab中只是使用上图的不等式形式,只求最小值,要求最大值需要转化。其他形式的要转化成上图形式。
函数讲解
[x,y] = linprog(f,A,b,Aeq,beq,lb,ub);
f:目标函数的系数
A:不等式方程的系数矩阵
b:不等式常数向量
Aeq:等式系数方程,没有则为空矩阵[ ]
beq: 等式常数矩阵,没有为空向量[ ]
lb:未知数的范围的左象限,就是未知数大于什么 没有就为空向量
ub: 未知数的范围的右象限,就是未知数小于什么,没有就为空向量
x:未知数解的向量
y:目标函数值
例1:
max z = x1 + 2* x2 + x3
2* x1 – 3* x2 + 2*x3 <=15
(1/3) * x1 +x2 +5 * x3 <=20
x1, x2, x3 >=0
matalb程序
f=[-1;-2;-1]; %样例中求最大值,取反转化为最小值
A=[2,-3,2;1/3,1,5]; %与标准不等式一致,不用转化符号
b=[15;20];
%不存在等式,用[]代替
%zeros(3,1)就是(0;0;0)
%ub不存在,可以不用写,也可以用[]代替
%[x,y] = linprog(f,A,b,[],[],zeros(3,1),[]);
[x,y] = linprog(f,A,b,[],[],zeros(3,1));
结果展示
Optimal solution found.
x =
25.0000
11.6667
0
y =
-48.3333
x1 = 25, x2 = 11.667. x3 = 0
所以最大值为-y = 48.3333,因为上面转成最小值加上符号 => -z = -x1 - 2* x2 - x3 ;
结果y = -z; ==> z = -y;
最大值就为48.3333
例2:
max z = 5 * x1 + 6 * x2;
x1 - 2 * x2 >= 2;
-2 * x1 + 3 * x2 >= 2;
matlab程序
f=[5;6]; %样例中求最大值,取反转化为最小值,也可以在函数中传-f来解决
%与标准不等式一致,需要转化符号,直接传参数实施-a
A=[1,-2;-2,3];
%与标准不等式一致,需要转化符号,直接传参数实施-b
b=[2;2];
%不存在等式,用[]代替
%zeros(2,1)就是(0;0)
%ub不存在,可以不用写,也可以用[]代替
%ub不存在,可以不用写,也可以用[]代替
%[x,y] = linprog(-f,-A,-b,[],[],[],[]);
[x,y] = linprog(-f,-A,-b,[],[]);
结果展示
Optimal solution found.
x =
-10.0000
-6.0000
y =
86.0000
x1 = -10, x2 = -6;
max z = -86;
例3
min z = 0.3 * x1 + 0.5 * x2;
0.5 * x1 +0.5 * x2 >= 2;
1.0 * x1 +0.3 * x2 >= 3;
0.2 * x1 +0.6 * x2 >= 1.2;
0.5 * x1 +0.2 * x2 >= 2;
x1 , x2 >=0;
matlab程序
f=[0.3;0.5];
a=[0.5,0.5;1.0,0.3;0.2,0.6;0.5,0.2];
b=[2;3;1.2;2];
[x,y]=linprog(f,-a,-b,[],[],zeros(2,1));
结果展示
Optimal solution found.
x =
3.6923
0.7692
y =
1.4923
x1 = 3.6923, x2 = 0.7692;
z = 1.4923;
演示结束