最终版漆包线排产优化的数学模型分析.docx
《最终版漆包线排产优化的数学模型分析.docx》由会员分享,可在线阅读,更多相关《最终版漆包线排产优化的数学模型分析.docx(16页珍藏版)》请在冰豆网上搜索。
最终版漆包线排产优化的数学模型分析
关于漆包线排产优化的数学模型
摘要
对于漆包线排产的优化安排,我们通过分析与模拟并使用计算机编程得到问题所需求的合理估计值,对于工厂的排产安排有一定的指导作用。
本文旨在通过合理假设得出工厂排产的利益最大化模型,在现实生活中有一定的意义。
对于问题一,题目要求制定业务员工作量额度以最大化工厂与业务员的利益。
我们根据十个业务员的订单情况以及在机器不空转的情况下,对3月份的生产排产对接问题进行方差模拟,在保证工厂和业务员的利益最大化的情况下制定合理的工作量额度。
由于本问题没有出现成本价格,只从订单的数量以及生产费用来衡量工厂收益。
对于问题二,基于所有订单都能如期完成的基础上,将订单按照型号0.85mm~1.32mm与2.0mm~3.75mm分为甲和乙两大类,并将各自类中所有订单按照接单日期的先后顺序进行编号,再将3月2号到4月6号细分为0到864个小时,这样就可以设出每台机器在哪个时间段为哪个订单做贡献,在满足多数据不重叠有顺序的前提下,对时刻进行大量次数的随机模拟,从而得出生产费用中转化费用最低的排产波动范围。
关键词:
方差模拟、MATLAB、0-1型整数规划、随机模拟
一.问题重述
在现实生活中,工厂根据业务员的订单情况从工厂和业务员的利益出发,制定业务员的合理工作量额度以及根据订单制订合理的排产方案对现实中制造业的发展有着重要的指导作用。
在实际情况中由于业务员人数众多以及订单的数量之大很难做出协调,所以该模型有很重要的意义。
本文主要从实际例子中抽象出最优排产方案的模型求解。
本论文主要讨论以下问题:
(1).对于给定的来自十名业务员的三月份订单情况,寻求业务员合理的工作量额度,使得工厂与业务员的利益均能保证.。
以业务员三月份的订单为参考,在保证整体业务员有抽成的情况下寻求工厂利益的最大化,从而得出业务员合理工作量额度,最终结果表示为工厂利益与业务员利益同时达到最大值。
(2).对于三月份订单的情况,我们用时间量化、订单顺序化、机器顺序化的思想建立了随机生成模型。
最终结果表示为每台机器在每个时间段对每份订单的开始贡献时刻和结束贡献时刻两张二维表,也即得出贡献时间段。
二.问题分析
2.1问题一的分析
要实现工厂与业务员利益在合理工作额度下达到最大化,我们考虑在总体业务员利益得到保证的情况下,进一步探索工厂利益的最大化。
问题分三个步骤完成,第一步对整体业务员三月份订单进行分析,获得业务员订单的变化。
第二步基于保证业务员订单数量的完成,达到工厂利益最大同时机器不空转。
第三步对十名业务员三月份订单数量进行方差模拟,得到最优解。
2.2问题二的分析
问题二在保证所有订单都能如期交货的情况下,采用随机数法,在大量随机数据下,寻得最优排产使得生产费用最低。
问题分三个步骤完成,第一步,将订单进行排序,量化时间,设出每台机器对不同订单的贡献时段。
第二步,用随机数法,产生足够数量且符合约束条件的每台机器对不同订单的贡献时段。
第三步,综合第二步所生成的结果,以生产费用最低为标准,得出合理的排产计划。
三.模型假设
1.工厂生产机器可24小时运转且不出现故障,不产生废料。
2.客户下单日机器即开始工作,直至交货日期。
3.机器转化生产型号时无需耗时。
4.上个月订单全部完成,不拖欠到本月。
四.符号说明
第i项订单开始的时刻(即接单时间)
第i项订单结束的时刻(即交货时间)
第j台机器开始生产第i项订单的时刻
第j台机器结束生产第i项订单的时刻
判断第j台机器从第i-1项订单转为第i项订单是否对第
记录第j台机器从第i-1项订单转为第i项订单的转化
各型号漆包线订单总吨数
第i项订单对应的铜漆包线类型
i
订单号
五.模型的建立与求解
5.1问题1的模型建立与求解
通过细化额度,我们现在三月份将各个型号的漆包线(0.85mm,0.90mm,0.95mm,1.00mm,1.32mm,2.00mm,2.05mm,2.65mm,3.35mm,3.75mm)进行分析,把业务员的订单情况汇总为表格:
(详见附录1)
表5.1.1:
每个业务员对不同型号的订单数量及总量
业务员(人)
数量(吨)(吨)
型号(mm)
0.85
0.9
0.95
1.00
1.32
2.0
2.5
2.65
3.35
3.75
总计
1
10
80
50
80
20
10
2
30
50
55
25
60
3
100
30
30
50
55
55
4
60
20
20
100
5
110
120
60
50
80
6
80
60
80
100
120
7
30
70
80
80
8
90
70
80
60
30
50
9
100
50
60
10
60
60
50
30
总计
380
260
445
210
260
265
260
290
195
335
在三月份,如果机器不空转的情况下,最多能生产2700吨,但是三月份业务员的订单总额却是2900吨,根据附件可得超出订单量可在4月份生产,不影响本月的销售计划。
我们仅对三月份的销售员的订单情况通过MATLAB计算方差运算,程序如下:
(详见附录2)
a=[250220320200420440260380210200];
b=sum(a)/size(a,1);
c=0;
fori=1:
10
c=(a(i)-b)^2+c;
end
d=sqrt(c/(size(a,1))-1);
disp(d);
最终我们得到业务员在每月275吨左右订量时,方差最小,即收益最高。
同时也符合工厂的最优利益。
5.2问题2的模型建立与求解
我们已知该工厂车间拥有20台机器,由于机器不能在漆包线规格0.85mm~1.32mm与规格2.0mm~3.75mm之间互相转化。
因此,我们将规格种类0.85mm~1.32mm与2.0mm~3.75mm分别记为甲品种漆包线与乙品种漆包线。
现在我们对两种类型的漆包线订单量进行讨论,通过对附录表格的数据进行计算,我们可以轻易地得出,甲类型与乙类型漆包线在3月份的总订单量分别为1555t与1335t.经计算,9台机器在36天(工厂订单共涵盖36天)的产量为1458t,10台机器36天产量为1620t,11台机器36天产量为1782t.由此,我们可以进行合理假设,工厂各指派10台机器分别加工甲类型漆包线与乙类型漆包线.并且可以知道每台机器每小时的工作量为0.1875t.。
对甲类型订单的分析
对附录表格进行分析整理,将所有订单按照接单日期的先后顺序,将天数小时化(3月2号到4月6号细分为0到864小时),并记3月2日0点为时间轴起点,我们可以得到如下时间图表(图5.2.1),并分析得到订单属性(图5.2.2)。
图5.2.1横坐标为时间轴,纵坐标为订单序号
图5.2.2
我们用
表示第j台机器生产第i项订单的时刻,用
第i台机器结束生产第i项订单的时刻。
由订单属性可得不等式:
≤
≤
≤
其中i=1,2,…,24,j=1,2,…,10.
由于机器只有结束第i项订单的生产后,才能转向生产第(i+1)项订单,可得方程:
问题二要求每项订单均能按时完成,并最小化费用,而(
-
)表示第j台机器对第i项订单贡献的小时数,故得方程:
其中i=1,2,…,24.
工厂生产费用考虑三个方面:
生产类型转化的费用、总空转费用、总加工费.由于生产总量固定,故而总加工费为一常数为15378元,且在36天内的总空转天数数也为常数(1620-1555)/4.5=14.45,所以空转费用为34667元.因此只需考虑生产类型转化的费用。
因此可以定义
用以判断第j台机器从第i-1项订单转为第i项订单后,是否对第i项订单有贡献.定义
用以判断第j台机器从第i-1项订单转为第i项订单后,是否需要转化费.故而,
其中i=2,3,…,24,j=1,2,…,10.
于是可以得到第j台机器从第i-1项订单转为第i项订单后所需要的转化费为:
所以总转化费用为:
此即为目标函数,我们希望得到它的最小值。
采用计算机随机生成10000组数据进行模拟(详见附录3),选取其中一组代表性数据置于(附录4)经随机模拟后得到的甲类型大致最小总转化费为88300元,将空转费以及加工费计算进去得到生产最小总费用为88300+15378+34667=138345(元)。
对乙类型订单的分析思路。
方法同甲类型,这里不再赘述。
只将原始数据分析图表
图5.2.2横坐标为时间轴,纵坐标为订单序号
图5.2.3
经计算,B类型生产最小总费用为124600+14388+152000=290988(元)
综上,按照附录中的排产方式,得到最小总费用为138345+290988=429333(元)
六.模型评价与改进
6.1模型评价
(1)本文基于对业务员工作量的规划以及工厂订单的合理安排,采取了方差模拟,MATLAB运算等,表现出了较强的数据处理能力,可以在现实情况使用对应求解方法使得工厂与业务员的利益最大化与平衡化。
(2)充分结合现实生产经验与合理假设,提出了如随机模拟、多目标方程和最优问题求解等思想。
6.2模型改进
(1)计算复杂度的优化
由于前面所采用的算法都基于方差模拟、随机生成数的思想,当工厂订单量递增时,计算复杂度将呈现指数增长。
对此,我们可以采取更加优秀的搜索算法,例如使用分治算法进行二分查找等。
(2)准确度的优化
由于所采用方差模拟与随机数法均存在波动性,所得数据精确度可进一步提高。
对此,我们可以采取深度搜索算法,使之得到更为确切的排产方式,并且可以为之为参考,在其附近寻求更为精确的排产方式。
七.参考文献
[1]韩中庚,数学建模方法及其应用,北京:
高等教育出版社,2009
[2]卓金武,MATLAB在数学建模中的应用,北京:
北京航空航天出版社2011
附录1:
业务员(人)
数量(吨)(吨)
型号(mm)
0.85
0.9
0.95
1.00
1.32
2.0
2.5
2.65
3.35
3.75
总计
1
10
80
50
80
20
10
2
30
50
55
25
60
3
100
30
30
50
55
55
4
60
20
20
100
5
110
120
60
50
80
6
80
60
80
100
120
7
30
70
80
80
8
90
70
80
60
30
50
9
100
50
60
10
60
60
50
30
总计
380
260
445
210
260
265
260
290
195
335
附录2:
a=[250220320200420440260380210200];
b=sum(a)/size(a,1);
c=0;
fori=1:
10
c=(a(i)-b)^2+c;
end
d=sqrt(c/(size(a,1))-1);
disp(d);
附录3
#include
#include
#include
#include
#include
usingnamespacestd;
intt[25][11],k[25][11];
intu[25][11],v[25][11];
inttemp1[25]=
{0,0,0,24,48,48,72,72,96,144,168,192,192,192,312,336,336,360,360,408,432,50
4,528,552,624};
inttemp2[25]=
{0,336,216,336,360,312,432,360,432,504,408,552,456,456,672,600,576,696,672,
720,672,720,768,864,840};
doublem[25]=
{0,10,30,30,60,30,110,60,70,55,60,80,20,100,100,80,80,50,70,80,60,60,50,120
90};
doubles[25]=
{0,0.85,0.9,1,0.95,1.32,0.85,0.95,0.9,0.95,0.85,0.9,1,1.32,0.95,0.85,1,0.9,
1.32,1,0.9,1.32,0.95,0.95,0.85};
//随机生成数据
doublerandom(doublestart,doubleend)
{
returnstart+(end-start)*rand()/(RAND_MAX+1.0);
}
intmain(){
//随机生成t[][]
intx;
srand(unsigned(time(0)));//srand(time(NULL));
for(inti=1;i<=24;i++){
u[i][1]=temp1[i];
v[i][1]=temp2[i];
for(intj=1;j<=10;j++){
u[i][j]=u[i][1];
v[i][j]=v[i][1];
intd=v[i][j]-u[i][j];
x=random(v[i][j],u[i][j]);
t[i][j]=x%d+u[i][j];
}
}
for(inti=1;i<=24;i++){
for(intj=1;j<=10;j++){
printf("%d",t[i][j]);
}
printf("\n");
}
intflag,sumk,sumt;
srand(unsigned(time(0)));//srand(time(NULL));
while(!
flag){
for(inti=1;i<=24;i++){
for(intj=1;j<=10;j++){
intd=v[i][j]-t[i][j];
intsumt=0,sumk=0;
x=rand();
k[i][j]=x%d+t[i][j];
}
}
for(inti=1;i<=24;i++){
for(intj=1;j<=10;j++){
sumt+=t[i][j];
sumk+=k[i][j];
}
if((sumk-sumt)>=m[i]/0.1875)flag=1;
else{
flag=0;
continue;
}
}
}
printf("\n");
for(inti=1;i<=24;i++){
for(intj=1;j<=10;j++){
printf("%d",k[i][j]);
}
printf("\n");
}
//生成p[],生成q[]
intp[25][11],q[25][11],min=0;
for(inti=2;i<=24;i++){
for(intj=1;j<=10;j++){
if(k[i][j]==t[i][j])q[i][j]=0;
elseq[i][j]=1;
if(s[i]==s[i-1])p[i][j]=0;
elsep[i][j]=400;
min+=q[i][j]+p[i][j];
}
}
printf("%d\n",min);
return0;
}
附录4: