(1)第一个问题:指派问题的0-1整数规划问题,可以使用MATLAB,如果是其他的就不适用。
栗子:
(1)[3821038729764275842359106910]\begin{bmatrix}
3 & 8 & 2 & 10 & 3 \\\\
8 & 7 & 2 & 9 &7 \\\\
6 & 4 & 2 & 7 &5 \\\\
8 & 4 & 2 & 3 &5 \\\\
9 & 10 & 6 & 9 &10
\end{bmatrix}\tag{1}⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡3868987441022226109739375510⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤(1)
\\\使用MATLAB
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5;8 4 2 3 5;9 10 6 9 10];
c=c(:);
a=zeros(10,25);
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
[x,y]=linprog(c,[],[],a,b);
x=reshape(x,[5,5]),y
\\使用Lingo软件
model:
sets:
var/1..5/;
link(var,var):c,x;
endsets
data:
c=3 8 2 10 3
8 7 2 9 7
6 4 2 7 5
8 4 2 3 5
9 10 6 9 10;
enddata
min=@sum(link:c*x);
@for(var(i):@sum(var(j):x(i,j))=1);
@for(var(j):@sum(var(i):x(i,j))=1);
@for(link:@bin(x));
end
(纪念一下,运行很多次出现错误,最后查阅很多资料,才他妈的发现缺个分号,我眼睛都看瞎了)


结果是,最优指派方案为x(15)=x(23)=x(32)=x(44)=x(51)=1,最优值为21。
(2)第二个问题。生产销售计划问题。
建立模型:
设原油的购买量为x,根据题目可以得出采购的支出c(x)可表示为下列的分段线性函数:
c(x)={10x,0≤x≤5001000+8x,500≤x≤10003000+6x,1000≤x≤1500c(x)=
\begin{cases}
10x,0\leq x \leq 500&\\
1000+8x,500\leq x \leq 1000&\\
3000+6x,1000\leq x \leq 1500
\end{cases} c(x)=⎩⎪⎨⎪⎧10x,0≤x≤5001000+8x,500≤x≤10003000+6x,1000≤x≤1500
设原油A生产甲、乙两种汽油的数量分别是x(11)和x(12),原油B生产甲、乙两种汽油的数量分别是x(21)和x(22),则总的收入为4.8(x(11)+x(21))+5.6(x(21+x(22)))
则利润为:
maxz=4.8[x(11)+x(21)]+5.6[x(21)+x(22)]−c(x)maxz=4.8[x(11)+x(21)]+5.6[x(21)+x(22)]-c(x)maxz=4.8[x(11)+x(21)]+5.6[x(21)+x(22)]−c(x)
约束条件为:
x(11)+x(12)≤500+xx(21)+x(22)≤1000x≤1500x(11)x(11)+x(21)≤0.5x(12)x(12)+x(22)≤0.6x(11),x(12),x(21),x(22),x≥0
x(11)+x(12)\leq 500+x\\
x(21)+x(22)\leq 1000\\
x\leq 1500\\
\frac{x(11)}{x(11)+x(21)}\leq 0.5\\
\frac{x(12)}{x(12)+x(22)}\leq 0.6\\
x(11),x(12),x(21),x(22),x\geq 0
x(11)+x(12)≤500+xx(21)+x(22)≤1000x≤1500x(11)+x(21)x(11)≤0.5x(12)+x(22)x(12)≤0.6x(11),x(12),x(21),x(22),x≥0
模型一:
目标函数:
maxz=4.8[x(11)+x(21)]+5.6[x(21)+x(22)]−[10x(1)+8x(2)+6x(3)]maxz=4.8[x(11)+x(21)]+5.6[x(21)+x(22)]-[10x(1)+8x(2)+6x(3)]maxz=4.8[x(11)+x(21)]+5.6[x(21)+x(22)]−[10x(1)+8x(2)+6x(3)]
约束条件:
前面的条件加上:x1=500t[x(1)−500]x(2)=0[x(2)−500]x(3)=00≤x(1),x(2),x(3)≤500
前面的条件加上:
x1=500t\\
[x(1)-500]x(2)=0\\
[x(2)-500]x(3)=0\\
0\leq x(1),x(2),x(3)\leq500
前面的条件加上:x1=500t[x(1)−500]x(2)=0[x(2)−500]x(3)=00≤x(1),x(2),x(3)≤500
使用lingo解释模型:
model:
sets:
var1/1..4/:y; !这里的y(1)=x(11),y(2)=x(12),y(3)=x(21),y(4)=x(22);
var2/1..3/:x,c;
endsets
max=4.8*(y(1)+y(2))+5.6*(y(3)+y(4))-@sum(var2:c*x);
y(1)+y(3)<@sum(var2:x)+500;
y(2)+y(4)<1000;
0.5*(y(1)-y(2))>0;
0.4*y(3)-0.6*y(4)>0;
(x(1)-500)*x(2)=0;
(x(2)-500)*x(3)=0;
@for(var2:@bnd(0,x,500));
data:
c=10 8 6;
enddata
end
得出结果,最后购买1000t原油A,与库存的500t原油A和1000t原油B一起,生产2500t汽油乙,利润是5000元。
本文介绍了如何使用MATLAB解决两个0-1整数规划问题:1) 指派问题,通过实例展示最优解;2) 生产销售计划问题,构建分段线性函数的利润模型,并设定约束条件,最终得出最佳生产和采购策略。
2326





