作业调度和资源估算制造工厂
概述
这个例子展示了如何建模一个制造厂。植物由装配线流程工作基于预先确定的时间表。这个例子走你通过工作流程:
分析工作安排对吞吐量的影响
评估员工的数量
模型的结构
40种不同的制造厂满足生产产品变体基于预定义的时间表。每个变量都需要两个部分,PartA PartB,对应于特定的变体。每个部分经过一系列的制造步骤。下面的建模细节中指定一个Excel文件中读取模型初始化:
时间表的一部分到达工厂
操作时间为变量在每个站在生产线
不同的工人池的工人数量
报废率检查区
下面的脚本将读取excel文件,初始化所有的参数。
%初始化的变量在模型中使用excelFile =“seEstimatingAssemblyLineThroughput.xlsx”;时间= xlsread (excelFile,“MfgSchedule”);optim = xlsread (excelFile,“OperationTimes”);参数= xlsread (excelFile,“参数”);numMfgWorkers =参数(1);%的工人数量在制造业领域numInspectWorkers =参数(2);%的员工数量检验区域discard_rate =参数(4)/ 100;%质量报废率种子= 12345;%随机数种子modelname =“seEstimatingAssemblyLineThroughput”;open_system (modelname);范围= find_system (modelname,“LookUnderMasks”,“上”,“BlockType”,“范围”);cellfun (@ (x) close_system (x)范围);
制造厂主要包括两个方面:
生产区域
检验区域
生产面积:工厂收到工作订单要实现。一个工作订单指定ID和变体所需数量的特定的变体。发电机产生的实体部分基于预定义的序列满足工作订单。在这个例子中序列是由MATLAB生成脚本或读取excel表。下面的脚本读取工作订单需求从excel文件。
需求= xlsread (excelFile,“需求”);
制造一个特定的变体,PartA和PartB对应变体是将在一起带入生产区域。部分通过以下步骤在离开之前生产面积:
PartA经过下料操作
PartB经过铣操作
部分都系
组装然后经过精加工
平均操作完成时间为每个变体在excel表列表。4%的变异操作完成时间。工人从制造业工人池加载和卸载部分从铣和紧固机器。
open_system ([modelname' /铣削Operation1 ']);
close_system ([modelname' /铣削Operation1 ']);
检查面积:成品进入检测区域,产品认证是好的或被拒绝和报废。这个例子假定废品率5%检验区域。工人从检验工人池加载和卸载部分从三个检查机器。
open_system ([modelname' /检查机器的]);
close_system ([modelname' /检查机器的]);
分析工作安排对吞吐量的影响
以满足工作订单需求与最佳的吞吐量,可以生成不同的时间表。在这个例子中,吞吐量是好产品的总数产生的植物。下载188bet金宝搏表名为“MfgSchedule”给出了一些日程安排满足工作订单。以下脚本生成工作时间表基于某些标准:
计划1:最短的工作首先在冲裁机:
这个计划将操作在冲裁机第一次运行时间最短和最长的一个。这里的想法是将尽可能多的部分尽可能早地进入工厂。然后检查吞吐量:
idx = 1;S1 = sortrows (optim (:, (1 2)), 2);为i = 1:长度(S1)重复= (S1 (i), 2)需求;为j = 1:重复newSchedule (idx) = S1(我);idx = idx + 1;结束结束scheduleID =大小(时间表,2)+ 1;日程安排(:,scheduleID) = newSchedule ';sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);
计划2:最短的工作首先在铣床上:
这个计划将操作在铣床上的最短运行时间,最长的一个。再次的想法是把尽可能多的零件到工厂尽可能早地开始从其他植物的分支。然后检查吞吐量:
idx = 1;S2 = sortrows (optim (: 1 [3]), 2);为i = 1:长度(S2)重复= (S2 (i), 2)需求;为j = 1:重复newSchedule (idx) = S2(我);idx = idx + 1;结束结束scheduleID =大小(时间表,2)+ 1;日程安排(:,scheduleID) = newSchedule ';sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);
表3:最短工作首先在紧固机器上:
这个计划将操作在第一紧固机器运行时间最短和最长的一个。这里的想法是,推动部分的瓶颈机器尽可能早。然后检查吞吐量:
idx = 1;S4 = sortrows (optim (: [1 5]), 2);为i = 1:长度(S4)重复= (S4(我),2)需求;为j = 1:重复newSchedule (idx) = S4(我);idx = idx + 1;结束结束scheduleID =大小(时间表,2)+ 1;日程安排(:,scheduleID) = newSchedule ';sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);% %
表4:最短工作首先使用累计生产时间:
这个计划考虑累计运行时间在所有的机器。操作有最短的累计运行时间是把第一和最长的一条到最后。然后检查吞吐量:
idx = 1;cumulativeSum = sortrows ([optim(: 1)之和(optim (: [2 3 5 6]), 2)), 2);为i = 1:长度(cumulativeSum)重复=需求(cumulativeSum(我),2);为j = 1:重复newSchedule (idx) = cumulativeSum(我);idx = idx + 1;结束结束scheduleID =大小(时间表,2)+ 1;日程安排(:,scheduleID) = newSchedule ';
sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);
安排5 - 8:随机时间表:
安排5到8在excel表都是随机安排满足工作订单。这些计划可以从生成的任何安排和使用RANDPERM函数生成一个随机排列。下面是“安排8”的结果:
scheduleID = 9;sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);
模拟上述策略表明时间表与“最短的工作首先在紧固机器”,“安排3”给了我们最好的吞吐量。
评估员工的数量
在选择最好的安排,估计所需的工人数量的两个工人池。我们从三个工人在生产工作区域和三个检验区域。
numMfgWorkers = 3;numInspectWorkers = 3;sim (modelname);open_system ([modelname' /制造业工人使用的]);open_system ([modelname/检验工人使用的]);open_system ([modelname/好的部分生成的]);
close_system ([modelname' /制造业工人使用的]);close_system ([modelname/检验工人使用的]);close_system ([modelname/好的部分生成的]);
的范围我们看到的最大数量的工人制造和检验池使用在任何给定的时间点很少超过两个。减少工人的数量两个显示没有更好地利用工人对吞吐量的影响。
numMfgWorkers = 2;numInspectWorkers = 2;sim (modelname);open_system ([modelname' /制造业工人使用的]);open_system ([modelname/检验工人使用的]);open_system ([modelname/好的部分生成的]);
close_system ([modelname' /制造业工人使用的]);close_system ([modelname/检验工人使用的]);close_system ([modelname/好的部分生成的]);
结论
这个例子展示了如何使用SimEvents模型店工作。使用MATLAB脚本允许我们实验和到达最好的安排。
%以下脚本关闭和清除模型bdclose (modelname);清晰的numMfgWorkersnumInspectWorkersmodelnameexcelFile…scheduleIDdiscard_rate作用域时间表需求…种子optim参数;
另请参阅
实体发电机|实体服务器|队列|资源池|资源收购方|资源发布人