f, x, b, beq, lb, ub为列向量,其中f为价值向量,b为资源向量,A,Aeq为矩阵。
上述对应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分别对应决策向量的下界和上界
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+3x2−5x3,⎩⎪⎪⎪⎨⎪⎪⎪⎧x1+x2+x3=7,2x1−5x2+x3≥10,x1+3x2+x3≤12,x1,x2,x3≥0
①化为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=−2x1−3x2+5x3,(−2153−11)⎝⎛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
某架货机有三个货舱:前仓、中仓、后仓。三个货舱所能装载的货物的最大重量和体积都有限制,如表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个货舱内的重量,wj和vj表示可以运输的第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=1∑3x1j+c2j=1∑3x2j+c3j=1∑3x3j+c4j=1∑3x4j=i=1∑4cij=1∑3xij
(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=1∑3xij≤ai ,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=1∑4xij≤wj ,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=1∑4bixij≤vj ,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} 10∑i=14xi1=16∑i=14xi2=8∑i=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=1∑4cij=1∑3xij⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∑j=13xij≤ai ,i=1,2,3,4∑i=14xij≤wj ,j=1,2,3∑i=14bixij≤vj ,j=1,2,310∑i=14xi1=16∑i=14xi2=8∑i=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元。