2011年国赛高教杯数学建模
D题 天然肠衣搭配问题
天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。传统的生产方式依靠人工,边丈量原料长度边心算,将原材料按指定根数和总长度组装出成品(捆)。
原料按长度分档,通常以0.5米为一档,如:3-3.4米按3米计算,3.5米-3.9米按3.5米计算,其余的依此类推。表1是几种常见成品的规格,长度单位为米,∞表示没有上限,但实际长度小于26米。
为了提高生产效率,公司计划改变组装工艺,先丈量所有原料,建立一个原料表。表2为某批次原料描述。
根据以上成品和原料描述,设计一个原料搭配方案,工人根据这个方案“照方抓药”进行生产。
公司对搭配方案有以下具体要求:
(1) 对于给定的一批原料,装出的成品捆数越多越好;
(2) 对于成品捆数相同的方案,最短长度最长的成品越多,方案越好;
(3) 为提高原料使用率,总长度允许有± 0.5米的误差,总根数允许比标准少1根;
(4) 某种规格对应原料如果出现剩余,可以降级使用。如长度为14米的原料可以和长度介于7-13.5米的进行捆扎,成品属于7-13.5米的规格;
(5) 为了食品保鲜,要求在30分钟内产生方案。
请建立上述问题的数学模型,给出求解方法,并对表1、表2给出的实际数据进行求解,给出搭配方案。
整体求解过程概述(摘要)
天然肠衣制作加工是我国的一个传统产业,出口量占世界首位,研究肠衣如何的搭配对提高原料使用率、降低成本、提高经济效益是非常有意义的。本文针对肠衣搭配问题,建立了优化模型,给出了相应启发式算法,较完善的解决了本问题。
针对要求(1),本文将求装出成品捆数最多分解为分别求规格1、规格2和规格3装出成品捆数最多的问题。在3种规格成品的根数和总长度都固定不变且每种原料长度和根数都已知的条件下,基于规划思想,首先对各规格用于组装的原料根数和长度进行了约束,继而建立了优化模型,并求得装出的成品最大捆数之和为182捆。
针对要求(2),首先在规格成品装出捆数最多的前提下,在相同最大捆数下的方案,对要求(1)通过lingo软件求得了每个方案中每捆最短的原料和原料数量。然后比较每个方案中最短原料中最长的数量。最终每种规格取最短原料中最长的数量最多的方案见表2,3,4。
针对要求(3)(4),在基于放宽成品规格的总长度和根数的条件下,使得组装出成品的捆数增加,再对剩余原料采用降级处理,进而可达到捆数最大的理念下。首先,对在不降级组装条件下,重新对用于组装的原料根数和长度进行约束,继而求出了不降级组装时各规格组装出的捆数。然后,在假设剩余原料只能降一个等级的条件下,得到放宽条件下原料降级组装的捆数。最后,由放宽条件下的组装成品捆数和降级组装的成品捆数求得了装出的成品捆数最多为208捆。最终每种规格取最短原料中最长的数量最多的方案见表5,6,7,8,9
针对时间限制的要求(5),在基于对肠衣搭配问题下,建立的整数规划模型求解规模较大,编程运行时间超过30分钟的情况下,本文创造性的引入了一个基于肠衣搭配的启发式算法,并由此算法求得了上述4个要求的近似解。由启发式算法编写的程序可在1118秒内(小于30分钟)得到结果,求得满足所有5个要求的较优搭配方案,工人可以根据这个方案“照方抓药”进行生产。
同时本文还给出了改进的邻域整点搜索算法求解本问题,对两种启发是算法的结果和复杂度进行了分析比较。本文还做了模型推广、模型改进、结果分析等工作。
模型假设:
1假设原料最多只能降一级使用;
2假设每档长度的原料都以0.5米为一档,如:3-3.5米按3米计算;
3假设每次肠衣制作加工,分割成的原料对应长度与根数统计是正确的;
4假设本次的肠衣制作加工完剩余的原料不能用于下次的组装。
问题分析:
问题背景
天然肠衣制作加工是我国的一个传统产业,出口量占世界首位。研究肠衣的搭配问题对促进我国经济发展建设是非常有意义的。
问题分析
肠衣在经过清洗整理后被分割成长度不等的小段(原料)后,再将原料按指定根数和总长度组装出成品(捆)。在给出了对应3种成品规格和原料数据情况下,公司对要设计的搭配方案提出了5个要求。根据公司对搭配方案提出的要求,可知道是要在装出的成品捆数最多的前提下,再对相同最大捆数的搭配方案进行比较,最终选出最好的搭配方案。
对于要求(1)(2),因为每种规格成品在捆数最多的条件下,都可能出现存在多种方案,所以在这里应该分别求出规格成品(1)、规格成品(2)和规格成品(3)的最大捆数。由于每种规格成品可能在最大捆数下有多种搭配方案,在这种情况下可以分别列出3种规格的每个方案中每捆长度最短的原料,再算出每种方案中长度最短中长度最大的原料的数量,那么此数量最多的方案也就最好的方案。
对于要求(3)(4),是为了提高原料使用率,也就是对3种成品规格的根数、总长度和每种成品规格的原料长度区间增加了范围。因为对每种产品规格的根数、总长度和原料长度区间增加范围,显然装出的成品捆数会比没有增加范围前的捆数多,在每种规格成品捆数变多情况下,可以再对每种规格的成品进行要求(1)(2)的处理,那么最终求出的方案即为最好的。
对于要求(5),为了食品保鲜,要求在30分钟内产生方案,在这里可以考虑是否对肠衣如何搭配给出一种启发式算法,并借助这种算法编写的程序运行时间不能超过30分钟,那么对于此问题就归结于构造算法了。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:
程序1
方案1规格1:
!方案1;
!规格1;
model:
sets:
a/1..8/:x,t,y,f;
endsets
data:
y=43 59 39 41 27 28 34 21;
t=3 3.5 4 4.5 5 5.5 6 6.5;
enddata
max=m;
@sum(a(i):x(i))=20;
@sum(a(i):t(i)*x(i))=89;
@for(a(i):m*x(i)<=y(i));
@gin(m);
@for(a(i):@gin(x(i)));
!剩余原料;
@for(a(i):f(i)=y(i)-x(i)*m);
End程序2
方案1规格2:
!方案1;
!规格2;
model:
sets:
a/1..14/:x,t,y,f;
endsets
data:
y=24 24 20 25 21 23 21 18 31 23 22 59 18 25;
t=7 7.5 8 8.5 9 9.5 10 10.5 11 11.5 12 12.5 13 13.5;
enddata
max=m;
@sum(a(i):x(i))=8;
@sum(a(i):t(i)*x(i))=89;
@for(a(i):m*x(i)<=y(i));
@gin(m);
@for(a(i):@gin(x(i)));
!剩余原料;
@for(a(i):f(i)=y(i)-x(i)*m);
end程序2
方案1规格3:
!方案1;
!规格3;
model:
sets:
a/1..24/:x,t,y,f,x0;
endsets
data:
y=35 29 30 42 28 42 45 49 50 64 52 63 49 35 27 16 12 2 0 6 0 0 0 1;
t=14 14.5 15 15.5 16 16.5 17 17.5 18 18.5 19 19.5 20 20.5 21 21.5 22 22.5 23 23.5 24 24.5 25 25.5;
enddata
submodel zh:
max=m;
@sum(a(i):x(i))=5;
@sum(a(i):t(i)*x(i))=89;
@for(a(i):m*x(i)<=y(i));
@gin(m);
@for(a(i):@gin(x(i)));
!剩余原料;
@for(a(i):f(i)=y(i)-x(i)*m);
@for(a(i):@gin(f(i)));
@abs(@sum(a(i):x(i)-x0(i)))>0.5;
endsubmodelcalc:
n=1;aa=2; !或aa=4,2;
@while(aa#ge#0:
@solve(zh);
@for(a(i):x0(i)=x(i));
aa=aa-0.1;
);
endcalc
end%改进的领域整点搜索算法
clear
clc
Y=dlmread('f:/shuju.txt');
Y=reshape(Y,14,8);Y=Y'
Yx=floor(Y);
Ys=ceil(Y);
a=3:0.5:6.5;%a=7:0.5:13.5;
%a=14:0.5:25.5;
[m1 n1]=size(Y);
kk=1;
for i=1:n1sx=Yx(:,i);ss=Ys(:,i);t=find(sx>0);p=[sx(t) ss(t)];p=reshape(p',1,2*length(t));pp=combntns(p,length(t));for j=1:length(pp)z=zeros(m1,1);z(t)=pp(j,:);if ismember(sum(z(t)),[19 20])&&ismember(a*z,[88.5 89 89.5])a*zZ(:,kk)=z';kk=kk+1;endend
end
dlmwrite('f:/z.txt',Z);
size(Z)x=dlmread('f:/x.txt');
xlswrite('f:/x.xls',x)
xlswrite('f:/z.xls',Z)