线性规划(matlab篇)

线性规划

1、所有线性规划问题化成matlab中规定的标准形式:

在这里插入图片描述

f, x, b, beq, lb, ub为列向量,其中f为价值向量,b为资源向量,A,Aeq为矩阵。

2、linprog函数

上述对应Matlab中的求解命令为:

[x,fval] = linprog(f,A,b)
[x,fval] = linprog(f,A,b,Aeq,beq)
[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)

x返回决策向量的取值;fval返回目标函数的最优值;f为价值向量

A、b对应不等式约束

Aeq和beq对应线性等式约束

lb和ub分别对应决策向量的下界上界

3、Easy example:

m a x   z = 2 x 1 + 3 x 2 − 5 x 3 , { x 1 + x 2 + x 3 = 7 , 2 x 1 − 5 x 2 + x 3 ≥ 10 , x 1 + 3 x 2 + x 3 ≤ 12 , x 1 , x 2 , x 3 ≥ 0 max\ z=2x_1+3x_2-5x_3,\\ \begin{cases} x_1+x_2+x_3=7,\\ 2x_1-5x_2+x_3 ≥ 10,\\ x_1+3x_2+x_3≤12,\\ x_1,x_2,x_3≥0 \end{cases} max z=2x1+3x25x3, x1+x2+x3=7,2x15x2+x310,x1+3x2+x312,x1,x2,x30

①化为matlab标准型:
m i n   w = − 2 x 1 − 3 x 2 + 5 x 3 , ( − 2 5 − 1 1 3 1 ) ( x 1 x 2 x 3 ) ≤ ( − 10 12 ) , [ 1 ,   1 ,   1 ] ⋅ [ x 1 ,   x 2 ,   x 3 ] T = 7 , [ x 1 ,   x 2 ,   x 3 ] T ≥ [ 0 ,   0 ,   0 ] T min\ w = -2x_1-3x_2+5x_3,\\ \left(\begin{matrix} -2 & 5 & -1\\ 1 & 3 & 1 \end{matrix}\right) \left(\begin{matrix} x_1\\x_2\\x_3 \end{matrix}\right)≤ \left(\begin{matrix} -10\\12 \end{matrix}\right),\\ \left[1,\ 1,\ 1\right]\cdot{\left[x_1,\ x_2,\ x_3\right]}^T=7,\\ {\left[x_1,\ x_2,\ x_3\right]}^T≥[0,\ 0,\ 0]^T min w=2x13x2+5x3,(215311) x1x2x3 (1012),[1, 1, 1][x1, x2, x3]T=7,[x1, x2, x3]T[0, 0, 0]T

>> f=[-2;-3;5];			% 价值向量
>> a=[-2,5,-1;1,3,1];	% a、b对应不等式的左边和右边
>> b=[-10;12];
>> aeq=[1,1,1];			% aeq和beq对应等式的左边和右边
>> beq=7;
>> [x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));

Optimal solution found.

>> x					% x=[x1;x2;x3]最优解

x =

    6.4286
    0.5714
         0

>> y=-y					% 最优值(该题所求为max,但linprog函数求得的是min,故只需加个-)

y =

   14.5714
4、example2:

某架货机有三个货舱:前仓、中仓、后仓。三个货舱所能装载的货物的最大重量和体积都有限制,如表2所示。并且,为了保持飞机的平衡,三个货舱中实际装载货物的重量必须与其最大容许重量成比例。

在这里插入图片描述

现有四类货物用该货机进行装运:

在这里插入图片描述

​ 货物规格及利润表

假设:

(1)每种货物可以无限细分

(2)每种货物可以分布在一个或者多个货舱内

(3)不同的货物可以放在同一个货舱内,并且可以保证不留空隙

问:应如何装运,使货机飞行利润最大?

解:

用 i = 1,2,3,4表示货物1、2、3、4;用 j =1,2,3表示前舱、中仓、后仓。
设 x i j 表示第 i 种货物在第 j 个货舱内的重量 , w j 和 v j 表示可以运输的第 j 个舱的重量限制和提及限制 , a i , b i , c i 表示 第 i 种货物的重量,单位重量所占的空间体积 , 单位货物的利润。 设x_{ij}表示第i种货物在第j个货舱内的重量,w_j和v_j表示可以运输的第j个舱的重量限制和提及限制,a_i,b_i,c_i表示\\第i种货物的重量,单位重量所占的空间体积,单位货物的利润。 xij表示第i种货物在第j个货舱内的重量,wjvj表示可以运输的第j个舱的重量限制和提及限制,ai,bi,ci表示i种货物的重量,单位重量所占的空间体积,单位货物的利润。
(1)目标函数:
z = c 1 ∑ j = 1 3 x 1 j + c 2 ∑ j = 1 3 x 2 j + c 3 ∑ j = 1 3 x 3 j + c 4 ∑ j = 1 3 x 4 j = ∑ i = 1 4 c i ∑ j = 1 3 x i j z=c_1\sum_{j=1}^{3}{x_{1j}}+c_2\sum_{j=1}^{3}{x_{2j}}+c_3\sum_{j=1}^{3}{x_{3j}}+ c_4\sum_{j=1}^{3}{x_{4j}}=\sum_{i=1}^{4}{c_i}\sum_{j=1}^{3}{x_{ij}} z=c1j=13x1j+c2j=13x2j+c3j=13x3j+c4j=13x4j=i=14cij=13xij
(2)约束条件:

① 四种货物的重量约束:
∑ j = 1 3 x i j ≤ a i   , i = 1 , 2 , 3 , 4 \sum_{j=1}^{3}{x_{ij}}≤a_i\ ,i=1,2,3,4 j=13xijai ,i=1,2,3,4
② 三个货舱的重量限制:
∑ i = 1 4 x i j ≤ w j   , j = 1 , 2 , 3 \sum_{i=1}^{4}{x_{ij}}≤w_{j}\ ,j=1,2,3 i=14xijwj ,j=1,2,3
③ 三个货舱的体积限制:
∑ i = 1 4 b i x i j ≤ v j   , j = 1 , 2 , 3 \sum_{i=1}^{4}{b_ix_{ij}}≤v_{j}\ ,j=1,2,3 i=14bixijvj ,j=1,2,3
④ 三个货舱的平衡限制:
∑ i = 1 4 x i 1 10 = ∑ i = 1 4 x i 2 16 = ∑ i = 1 4 x i 3 8 \frac{\sum_{i=1}^{4}{x_{i1}}}{10}=\frac{\sum_{i=1}^{4}{x_{i2}}}{16}= \frac{\sum_{i=1}^{4}{x_{i3}}}{8} 10i=14xi1=16i=14xi2=8i=14xi3
综上,建立线性规划模型:
m a x   z = ∑ i = 1 4 c i ∑ j = 1 3 x i j { ∑ j = 1 3 x i j ≤ a i   , i = 1 , 2 , 3 , 4 ∑ i = 1 4 x i j ≤ w j   , j = 1 , 2 , 3 ∑ i = 1 4 b i x i j ≤ v j   , j = 1 , 2 , 3 ∑ i = 1 4 x i 1 10 = ∑ i = 1 4 x i 2 16 = ∑ i = 1 4 x i 3 8 max\ z=\sum_{i=1}^{4}{c_i}\sum_{j=1}^{3}{x_{ij}}\\ \begin{cases} \sum_{j=1}^{3}{x_{ij}}≤a_i\ ,i=1,2,3,4\\ \sum_{i=1}^{4}{x_{ij}}≤w_{j}\ ,j=1,2,3\\ \sum_{i=1}^{4}{b_ix_{ij}}≤v_{j}\ ,j=1,2,3\\ \frac{\sum_{i=1}^{4}{x_{i1}}}{10}=\frac{\sum_{i=1}^{4}{x_{i2}}}{16}= \frac{\sum_{i=1}^{4}{x_{i3}}}{8} \end{cases} max z=i=14cij=13xij j=13xijai ,i=1,2,3,4i=14xijwj ,j=1,2,3i=14bixijvj ,j=1,2,310i=14xi1=16i=14xi2=8i=14xi3

% 目标函数
c=[3100;3800;3500;2850];     % 由目标函数可知有12个变量
c=c*ones(1,3);               % 使c变成4行3列,对应目标函数未知量前面的系数
c=c(:);                    % c每列合并成一个长的列向量
% 约束条件1,需要构造如下数组
a1=zeros(4,12);
for i=1:4                             
    a1(i,i:4:12)=1;                    
end
b1=[18 15 23 12]';
% 约束条件2
a2=zeros(3,12);
for i=1:3
    a2(i,4*i-3:4*i)=1;          
end
b2=[10 16 8]';
% 约束条件3
bb=[480;650;580;390];
a3=zeros(3,12);
for i=1:3
    a3(i,4*i-3:4*i)=bb;           
end
b3=[6800 8700 5300]';
a=[a1;a2;a3];
b=[b1;b2;b3];
%----------------------------
% 等式条件
aeq=zeros(2,12);             
aeq(1,1:4)=1/10;
aeq(1,5:8)=-1/16;
aeq(2,5:8)=1/16;
aeq(2,9:12)=-1/8;
beq=[0;0];
lb=zeros(12,1);
[x,y]=linprog(-c,a,b,aeq,beq,lb,[])
x=reshape(x,[4,3])         % 化为3*4的数组
x=sum(x')                  % 舱1,2,3分别放入货物的总重量
y=-y;                  
y =

  -1.2152e+05


x =

         0         0         0
    7.0000         0    8.0000
    3.0000   12.9474         0
         0    3.0526         0


x =

         0   15.0000   15.9474    3.0526

答: 求得的四种货物的吨数分别为 0, 15 ,15.9474 ,3.0526

​ 总利润为 1.2152×10^5元。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的风666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值