资源描述
学习-----好资料
关于漆包线排产优化的数学模型
摘要
对于漆包线排产的优化安排,我们通过分析与模拟并使用计算机编程得到问题所需求的合理估计值,对于工厂的排产安排有一定的指导作用。本文旨在通过合理假设得出工厂排产的利益最大化模型,在现实生活中有一定的意义。
对于问题一,题目要求制定业务员工作量额度以最大化工厂与业务员的利益。我们根据十个业务员的订单情况以及在机器不空转的情况下,对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
250
2
30
50
55
25
60
220
3
100
30
30
50
55
55
320
4
60
20
20
100
200
5
110
120
60
50
80
420
6
80
60
80
100
120
440
7
30
70
80
80
260
8
90
70
80
60
30
50
380
9
100
50
60
210
10
60
60
50
30
200
总计
380
260
445
210
260
265
260
290
195
335
2900
在三月份,如果机器不空转的情况下,最多能生产2700吨,但是三月份业务员的订单总额却是2900吨,根据附件可得超出订单量可在4月份生产,不影响本月的销售计划。我们仅对三月份的销售员的订单情况通过MATLAB计算方差运算,程序如下:(详见附录2)
a=[250 220 320 200 420 440 260 380 210 200];
b=sum(a)/size(a,1);
c=0;
for i=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、DIY手工艺市场状况分析
2. www。cer。net/artide/2003082213089728。shtml。七.参考文献
[1] 韩中庚,数学建模方法及其应用,北京: 高等教育出版社, 2009
[2] 卓金武,MATLAB在数学建模中的应用,北京:北京航空航天出版社 2011
在上海, 随着轨道交通的发展,地铁商铺应运而生,并且在重要商圈已经形成一定的气候,投资经营地铁商铺逐渐为一大热门。在人民广场地下的迪美购物中心,有一家DIY自制饰品店--“碧芝自制饰品店”
现在是个飞速发展的时代,与时俱进的大学生当然也不会闲着,在装扮上也不俱一格,那么对作为必备道具的饰品多样性的要求也就可想而知了。
标题:大学生究竟难在哪?—创业要迈五道坎 2004年3月23日
据介绍,经常光顾“碧芝”的都是些希望得到世界上“独一无二”饰品的年轻人,他们在琳琅满目的货架上挑选,然后亲手串连,他们就是偏爱这种DIY的方式,完全自助。
300元以下 9 18%
§8-2购物环境与消费行为 2004年3月20日
他们的成功秘诀在于“连锁”二字。凭借“连锁”,他们在女孩们所喜欢的小玩意上玩出了大名堂。小店连锁,优势明显,主要有:
标题:大学生“负债消费“成潮流 2004年3月18日
附录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
250
2
30
50
55
25
60
220
3
100
30
30
50
55
55
320
4
60
20
20
100
200
5
110
120
60
50
80
420
6
80
60
80
100
120
440
7
30
70
80
80
260
8
90
70
80
60
30
50
380
9
100
50
60
210
10
60
60
50
30
200
总计
380
260
445
210
260
265
260
290
195
335
2900
附录2:
a=[250 220 320 200 420 440 260 380 210 200];
b=sum(a)/size(a,1);
c=0;
for i=1:10
c=(a(i)-b)^2+c;
end
d=sqrt(c/(size(a,1))-1);
disp(d);
附录3
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
int t[25][11], k[25][11];
int u[25][11], v[25][11];
int temp1[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};
int temp2[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};
double m[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};
double s[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};
//随机生成数据
double random(double start,double end)
{
return start + (end - start) * rand() / (RAND_MAX + 1.0);
}
int main() {
//随机生成t[ ][ ]
int x;
srand( unsigned( time(0) ) );//srand(time(NULL));
for(int i = 1; i <= 24; i++) {
u[i][1] = temp1[i];
v[i][1] = temp2[i];
for(int j = 1; j <= 10; j++) {
u[i][j] = u[i][1];
v[i][j] = v[i][1];
int d = v[i][j] - u[i][j];
x = random(v[i][j], u[i][j]);
t[i][j] = x % d + u[i][j];
}
}
for(int i = 1; i <= 24; i++) {
for(int j = 1; j <= 10; j++) {
printf("%d ", t[i][j]);
}
printf("\n");
}
int flag, sumk, sumt;
srand( unsigned( time(0) ) );//srand(time(NULL));
while(!flag) {
for(int i = 1; i <= 24; i++) {
for(int j = 1; j <= 10; j++) {
int d = v[i][j] - t[i][j];
int sumt = 0, sumk = 0;
x = rand();
k[i][j] = x % d + t[i][j];
}
}
for(int i = 1; i <= 24; i++) {
for(int j = 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(int i = 1; i <= 24; i++) {
for(int j = 1; j <= 10; j++) {
printf("%d ", k[i][j]);
}
printf("\n");
}
//生成p[ ], 生成q[ ]
int p[25][11], q[25][11], min = 0;
for(int i = 2; i <= 24; i++) {
for(int j = 1; j <= 10; j++) {
if(k[i][j] == t[i][j]) q[i][j] = 0;
else q[i][j] = 1;
if(s[i] == s[i - 1]) p[i][j] = 0;
else p[i][j] = 400;
min += q[i][j] + p[i][j];
}
}
printf("%d\n", min);
return 0;
}
附录4:
更多精品文档
展开阅读全文