线性规划
线性规划(Linear programming,简称LP),是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。研究线性约束条件下线性目标函数的极值问题的数学理论和方法。英文缩写LP。
matlab处理线性规划
linprog函数介绍: 线性规划求解器查找由所指定问题的最小值
函数讲解
[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;
演示结束