matalb解决线性规划

1,284 阅读3分钟

线性规划

线性规划(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(31)就是(000)
%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(21)就是(00)
%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;

演示结束

微信号