许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  线性规划(Matlab篇):linprog函数详解与案例

线性规划(Matlab篇):linprog函数详解与案例

阅读数 5
点赞 0
article_banner

线性规划

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:

max z=2x1+3x2−5x3,{x1+x2+x3=7,2x1−5x2+x3≥10,x1+3x2+x3≤12,x1,x2,x3≥0 max\ z=2x_1+3x_2-5x_3,\\

𝑥1+𝑥2+𝑥3=7,2𝑥1−5𝑥2+𝑥3≥10,𝑥1+3𝑥2+𝑥3≤12,𝑥1,𝑥2,𝑥3≥0   {     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=2x1​+3x2​−5x3​,⎩   ⎨   ⎧​x1​+x2​+x3​=7,2x1​−5x2​+x3​≥10,x1​+3x2​+x3​≤12,x1​,x2​,x3​≥0​


①化为matlab标准型:
min w=−2x1−3x2+5x3,(−25−1131)(x1x2x3)≤(−1012),[1, 1, 1]⋅[x1, x2, x3]T=7,[x1, x2, x3]T≥[0, 0, 0]T min\ w = -2x_1-3x_2+5x_3,\\ \left(

−2153−11     − 2   5   − 1     1   3   1    \right) \left(

𝑥1𝑥2𝑥3      x 1       x 2       x 3     \right)≤ \left(

−1012     − 10     12    \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=−2x1​−3x2​+5x3​,(−21​53​−11​)   ​x1​x2​x3​​   ​≤(−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表示前舱、中仓、后仓。
设xij表示第i种货物在第j个货舱内的重量,wj和vj表示可以运输的第j个舱的重量限制和提及限制,ai,bi,ci表示第i种货物的重量,单位重量所占的空间体积,单位货物的利润。 设x_{ij}表示第i种货物在第j个货舱内的重量,w_j和v_j表示可以运输的第j个舱的重量限制和提及限制,a_i,b_i,c_i表示\\第i种货物的重量,单位重量所占的空间体积,单位货物的利润。 设xij​表示第i种货物在第j个货舱内的重量,wj​和vj​表示可以运输的第j个舱的重量限制和提及限制,ai​,bi​,ci​表示第i种货物的重量,单位重量所占的空间体积,单位货物的利润。

   (1)目标函数:
z=c1∑j=13x1j+c2∑j=13x2j+c3∑j=13x3j+c4∑j=13x4j=∑i=14ci∑j=13xij 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=c1​j=1∑3​x1j​+c2​j=1∑3​x2j​+c3​j=1∑3​x3j​+c4​j=1∑3​x4j​=i=1∑4​ci​j=1∑3​xij​

   (2)约束条件:

① 四种货物的重量约束:
∑j=13xij≤ai ,i=1,2,3,4 \sum_{j=1}^{3}{x_{ij}}≤a_i\ ,i=1,2,3,4 j=1∑3​xij​≤ai​ ,i=1,2,3,4

   ② 三个货舱的重量限制:
∑i=14xij≤wj ,j=1,2,3 \sum_{i=1}^{4}{x_{ij}}≤w_{j}\ ,j=1,2,3 i=1∑4​xij​≤wj​ ,j=1,2,3

   ③ 三个货舱的体积限制:
∑i=14bixij≤vj ,j=1,2,3 \sum_{i=1}^{4}{b_ix_{ij}}≤v_{j}\ ,j=1,2,3 i=1∑4​bi​xij​≤vj​ ,j=1,2,3

   ④ 三个货舱的平衡限制:
∑i=14xi110=∑i=14xi216=∑i=14xi38 \frac{\sum_{i=1}^{4}{x_{i1}}}{10}=\frac{\sum_{i=1}^{4}{x_{i2}}}{16}= \frac{\sum_{i=1}^{4}{x_{i3}}}{8} 10∑i=14​xi1​​=16∑i=14​xi2​​=8∑i=14​xi3​​

   综上,建立线性规划模型:
max z=∑i=14ci∑j=13xij{∑j=13xij≤ai ,i=1,2,3,4∑i=14xij≤wj ,j=1,2,3∑i=14bixij≤vj ,j=1,2,3∑i=14xi110=∑i=14xi216=∑i=14xi38 max\ z=\sum_{i=1}^{4}{c_i}\sum_{j=1}^{3}{x_{ij}}\\

∑3𝑗=1𝑥𝑖𝑗≤𝑎𝑖 ,𝑖=1,2,3,4∑4𝑖=1𝑥𝑖𝑗≤𝑤𝑗 ,𝑗=1,2,3∑4𝑖=1𝑏𝑖𝑥𝑖𝑗≤𝑣𝑗 ,𝑗=1,2,3∑4𝑖=1𝑥𝑖110=∑4𝑖=1𝑥𝑖216=∑4𝑖=1𝑥𝑖38   {     ∑  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=i=1∑4​ci​j=1∑3​xij​⎩   ⎨   ⎧​∑j=13​xij​≤ai​ ,i=1,2,3,4∑i=14​xij​≤wj​ ,j=1,2,3∑i=14​bi​xij​≤vj​ ,j=1,2,310∑i=14​xi1​​=16∑i=14​xi2​​=8∑i=14​xi3​​​


% 目标函数
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元。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空