arena仿真中文教程第4章.docx
《arena仿真中文教程第4章.docx》由会员分享,可在线阅读,更多相关《arena仿真中文教程第4章.docx(47页珍藏版)》请在冰豆网上搜索。
![arena仿真中文教程第4章.docx](https://file1.bdocx.com/fileroot1/2023-1/30/911d481f-e0ab-4a4f-a78b-64c55dcb0741/911d481f-e0ab-4a4f-a78b-64c55dcb07411.gif)
arena仿真中文教程第4章
第四章建立基本操作及输入模型
上两章介绍了一种简单加工系统(模型3-1),其中第二章介绍了一个手工完成的仿真,第三章检验了这一Arena模型。
本章将开始介绍如何建立与实际系统更加接近的Arena模型,包括如何在简单模型的基础上,通过增加复杂度和引入一些新概念,来建立几种不同版本的模型。
本章还讨论了怎样为实际系统确定合理的输入概率分布。
4.1节对电子器件装配与测试系统进行了描述,在此基础上介绍了如何对简单模型进行扩展,引入了一些新的Arena概念,建立了新模型,并展示了如何运行所建立的模型以及观察输出结果。
现在,读者应该开始着重留意建模技巧了。
4.2节对上述模型进行了扩展:
在模型中增加了调度、故障、资源状态等要素,并且介绍了不同的结果分析方法。
4.3节讲解了如何进一步完善动画效果。
4.4节概述了实体如何运动,并介绍了“站”(Stations)、非零传送时间的实现以及传送过程的动画表示。
最后,4.5节介绍了如何确定输入数据,包括如何选择驱动仿真的随机数概率分布模型。
完成本章学习之后,读者应能自己建立具有一定细致程度的模型,并能合理确定与符合实际的随机数作为模型输入。
4.1模型4-1:
电子装配与测试系统
这里描述的电子装配与测试系统(如图4-1所示),表示的是两种需要封装的电子产品的最后一道工序。
到达产品需进行预处理,然后再装配。
第一种产品(即PartA)是由模型之外的另一临近部门生产的,它按照均值为5的指数分布时间间隔到达(所有时间单位为分钟)。
产品达到后,它们被立即送往产品A的预处理区域,并在这一区域内完成保证封装作业的匹配及产品清理工作,产品A的预处理操作时间满足三角分布TRIA(1,4,8)。
之后,产品被立即送往封装台。
第二种产品(即PartB)是由本模型外的另一工厂生产,它以每批4件的方式成批输送进入模型。
批量的到达间隔时间服从均值为30的指数分布。
产品到达产品B的的预处理区域时,被分解为四个单件产品后分别进行处理。
在产品B的预处理区域的操作与产品A类似,处理时间服从三角分布TRIA(3,5,10)。
之后,产品被送往封装台。
原书P104
图4-1电子装配与测试系统
在封装操作中,首先将电子产品插入箱盒,再进行箱体组装与封装,然后对封装后产品进行检测。
所有这些操作的处理时间因产品不同而异:
对产品A的操作服从三角分布TRIA(1,3,4),而对产品B的操作服从威布尔分布WEIB(2.5,5.3)的(其中,比例参数
,形状参数
,其含义参见附录D)。
91%的产品能顺利通过检测,并被立即运送;产品能否通过检测与其他产品通过与否无关。
未通过检测产品被送往返工区域进行拆卸、修理、清理、组装及重新检测。
80%的返工产品能通过检测,并作为返工合格产品发运,其余不合格产品则被送往废品区。
无论返工产品最终合格与否,每件产品返工花费的时间服从均值为45的指数分布。
我们希望通过仿真获得每个工作区域的资源利用率、队长、排队时间,以及产品的系统逗留时间等统计数据。
仿真开始时,设置模型的终止运行条件为连续运行8小时(即1920分钟)。
4.1.1建模方法的扩展
搭建仿真模型仅仅是一个完整仿真项目的一个组成部分,仿真项目的两个首要问题为设定研究目标及系统定义,本书将在第13章专门讲述仿真项目整体方面的内容。
本书将教你学会如何使用Arena来建立自己的仿真模型。
尽管上面已经给出了系统定义,但在实际问题中,需要扩展这种定义,并且还需要收集和分析那些与指定输入参数及其分布(参见4.5节)相关的数据。
下面将介绍模型扩展的方法。
对于实际问题,首先需要定义数据结构,系统的模型分解,或者控制逻辑的扩展。
这里我们仅需选择哪个Arena模块能够提供我们所需要的功能,并确定系统的细致程度。
此外,我们还需要确定不同零件封装操作的不同操作时间。
为简化这一操作,可以将模型分解为如下几部分:
到达部分,预处理区域,封装操作,返工,离开及动画部分。
并且,我们可以假设所有系统中的实体代表了正在被加工的产品。
因为模型中存在两类到达实体,每种产品的到达服从不同时间分布,所以分别采用两个独立的Create模块来生成到达的产品。
各类产品的封装操作时间因产品不同而异,因此我们使用两个“赋值”模块来定义“封装时间”(SealerTime)属性,这一属性在Create模块生成零件的同时给封装操作时间赋以相应的值。
当产品接受封装操作时,就可以使用与SealerTime属性关联的时间值,而不像模型3-1中那样在操作时刻才生成这个时间值。
与模型3-1类似,两个预处理区域和封装操作都有各自的Process模块。
封装操作完成后要实施检查,通过“投币”选择来决定产品下一步进入哪个区域。
这里使用一个基于投币原理的“决策”(Decide)模块,因此返工区域拥有Process和Decide两个模块,以及“通过”和“未通过”等选项。
模型中使用三个单独的“记录”(Record)和“处理”模块(装运、返工合格、废料处理),这样就可以按照装运、返工合格以及废品处理等几部分进行分类统计。
所有这些模块都包含在“基本操作”面板中。
4.1.2建立模型
建立模型时,首先打开一个新的模型窗口,将需要建立的模块放置于屏幕上:
两个Create模块、两个Assign模块、四个Process模块、两个Decide模块、三个Record模块以及三个Dispose模块。
当你将这些模块按照一定顺序放置好之后,如果你建立了连接或选择了“自动连接”(Object菜单中),则建立的模型窗口应与图4-2相似。
不同模块的内部编号根据你放置模块的先后顺序不同而异,因为这时所有模块的连接关系是“空白”,因此不影响模型的最终连接关系。
完成之后,点击File>Save将模型保存到你选择的目录下。
完成上述工作后,分别打开每个模块,输入模型所需的信息。
首先是产品A的实体到达模块Create1。
输入界面4-1提供了完成这一模块需要的信息(关于“输入界面”的介绍详见3.4.4节的描述)。
这一步骤与模型3-1的Create模块非常相似。
原书P106
图4-2建立模块的视图
我们给这个模块命名,并指定实体类型为PartA。
设置到达间隔时间为均值5的随机数(即服从指数分布),单位设置为分钟(Minutes),其余项采用默认值,完成后点击OK键接受模块设定。
原书P106
输入界面4-1完成后的产品ACreate模块对话框
原书P106
输入界面4-2完成后的产品BCreate模块对话框
产品B到达的Create模块设置与产品A类似,如输入界面4-2(由于步骤几乎相同,因此不再敖述)。
由于产品B是以每4个为单位成批到达,因此需要填充一个附加字段(每批到达的实体)来体现批量数为4,这一项将使得每次到达的是4个单独实体而非1个实体。
原书P107
输入界面4-3指定产品A的封装时间和到达时间
创建了到达产品之后,紧接着给它定义一个SealerTime属性,并给封装操作时间赋值,操作时间因产品类型不同而异。
我们在先前放置的Assign1和Assign2模块中进行赋值。
产品A的赋值如输入界面4-3所示,我们定义一个新的属性并给它赋值为TRIA(1,3,4)的三角分布函数。
我们还需定义ArriveTime属性,这个属性用来记录实体的到达时间。
Arena的TNOW变量用来提供仿真时钟当前值,这个时间就是产品到达的时间。
(TNOW又称当前仿真时钟,观察TNOW值的方法是:
鼠标右键点击Assign模块Assignment对话框中的NewValue域,选择BuildExpression,点击DateandTimeFunctions,它在列表中被描述为CurrentSimulationTime。
)
为产品B的SealerTime和ArriveTime属性赋值的过程如输入界面4-4所示。
尽管前述模块为产品到达创建了四个实体,但每个实体都在赋值模块中的SealerTime分布属性中分别赋予不同(相互独立)的值。
原书P107
输入界面4-4确定产品B的封装时间和到达时间
创建了两种产品到达模块并给封装时间赋值之后,接下来可以利用先前放置的两个Process模块来建立两个预处理区域的模型了。
PrepAProcess区域的完成对话框如输入界面4-5所示。
Process模块有四个可能的活动类型选项:
Delay,SeizeDelay,SeizeDelayRelease以及DelayRelease。
Delay会产生一个经历指定时间延迟的活动,这个活动不需要占用资源。
由于预处理区域需要占用机器或资源,因此需要一个活动来实现排队等待,直到获得预处理区的资源,然后延迟至操作时间完成为止。
SeizeDelay活动提供了等待和延迟功能,但它在操作完成后并不释放资源给下一实体使用,使用这个活动的前提是,资源必须在下游的某一个模块中能得到释放。
SeizeDelayRelease选项提供了准确建立预处理区域的各种活动的组合。
DelayRelease活动假设实体先前占用了一种资源,在此处经历一段延迟后,释放了这种资源。
原书P109
输入界面4-5产品A的预处理操作对话框
当选择最后三个选项之一时,会在活动(Action)选择框下面的空白处出现一个列表框。
单击Add按扭来输入资源信息。
在输入数据时,希望尽可能使用下拉式列表功能。
因为当你输入一个名称时,必须与先前输入的名称完全一致。
Arena中的名称不区分大小写,而是根据名称拼写或插入空格来区分的。
因此从下拉式列表中选取名称可以保证你所使用的名称和先前输入名称的一致性。
如果在输入名称中稍微出错,则Arena会在首次运行模型时给出错误信息(更糟糕的情况是,尽管模型可以运行,但结果却是错误的)。
当新建一个模块时,Arena会自动为这个模块赋上默认名和默认值。
这些默认名是带有附加序号的对象名称(如模块、资源等)。
同一对象名称的附加序号是依次递增的,如Progress1,Progress2,…。
这样做是基于以下两个原因:
其一是方便起见你既可以接受默认资源名称,也可以修改它;其二是因为Arena中无论对象类型一致与否,所有的对象名称都必须是确定唯一的。
为帮助使用,Arena做了许多自动命名工作,而其中的大多数读者都不必理会。
例如,当你单击查看队列数据模块就会发现,Arena将零件A预处理区域的队列命名为PrepAPrecess.Queue。
大多数情况下,你可以自己命名,而不必使用默认的名称。
当你选择两个包含Seize活动中的任意一个,并确认接受时,Arena会在相关Process模块附近自动弹出一个动画队列(一个在右端带有小竖线的水平线)。
这种功能可以使你在仿真运行时动画显示队列中等待的实体。
如果单击此队列,就可以显示出该队列的名称。
第二个Process模块除了名称(PrepBProcess)、资源名(PrepB)和操作时间参数(3,5,10)外,建立过程都与前一模块一样。
因此没有给出其输入界面。
下一步工作是给封装操作输入数据,这是我们放置的第三个模块。
输入的对话框如输入界面4-6所示。
由于我们在上游的赋值模块中创建到达产品时,给它定义了SealerTime属性,因此当实体占用(Seizes)资源时,就会产生一个数值上等于SealerTime属性值的时间延迟。
输入界面4-6.封装对话框
我们利用第一个Decide模块实现封装操作之后的检测。
由于只有“通过”或“未通过”两个选择,因此我们选用默认的类型—2-waybyChance。
这里需要在对话框中输入一个逻辑为“真”(True)值的百分比,通过它来决定离开模块实体的去向。
这个例子中,我们将真值百分比输入为9,这样就会有9%的实体流向真值对应的分枝(这里的“真”值对应的是未通过检测的产品),其余的91%流向逻辑“假”(False)值对应的分支(即通过检查的产品)。
通过检查的产品直接送去装运,而未通过的产品则被送去返工。
Decide模块的数据输入如输入界面4-7所示。
原书P111
输入界面4-7.封装检查对话框
接下来是建立返工活动的Process模块,Process模块的数据输入如输入界面4-8所示。
这个模块除名称、资源名和表达式外,其余部分都与产品A和产品B的Process模块相似。
输入界面4-8.返工操作对话框
输入界面4-9.返工产品检查对话框
第二个Decide模块是用来分离返工合格产品与废品,模块中的数据输入如输入界面4-9所示。
我们用“真”值表示废品(20%),“假”值表示返工合格产品。
在定义了上述操作模块之后,接下来应该完成Record和Dispose模块了。
我们仿真的目的之一是获取资源利用率、队长、排队时间等统计数据。
这三个统计数据可以利用每个需要资源的带有活动选项的Process模块来实现(假设模块中的ReportStatistics框被选中,这可在Run>Setup>ProjectParameter菜单中定义)。
我们还需要获得直接合格产品、返工后合格产品以及废品的系统逗留时间(cyclictime),Record模块可通过累加器完成这些量的统计。
从下拉菜单中选择TimeInterval类型,累加器默认名称与模块名称相同,这样Arena就会自动进行累加统计:
统计产品到达时间(ArriveTime)属性值与它到达Record模块的时间之差(即实体在系统中的时间)。
完成输入后的废品累加器对话框如输入界面4-10所示。
剩下的两个模块分别是RecordSalvagedParts和RecordShippedParts。
由于它们几乎与输入界面4-10中的RecordScrappedParts模块完全相似,此处不再敖述。
原书P112
输入界面4-10.废品记数对话框
最后的三个模块是对实体离开系统时做后续处理的模块。
当我们建立这个模块时,可以将所有实体都指向同一个后续处理模块(Dispose)。
后续处理模块的特征之一是在模块的右下脚处有动画变量,动画变量将显示仿真运行中通过这个模块的实体数量,并且还可以显示通过这个模块的实体在整个系统实体中所占的比例。
Scrapped后处理模块的数据输入如输入界面4-11所示。
我们默认选中RecordEntityStatistics框,但当我们仅需要保留装运产品(包括返工后合格品)的实体流统计数据时,就必须清除这个框的选项(选中保留其它两个后处理模块相应选项)。
这样操作后就可以只选中需要进行自动统计的产品。
只有确保Entity框是按照Run>Setup>Project参数进行选择的前提下,才能获得这些统计结果数据。
原书P113
输入界面4-11.废品Dispose对话框
可按照类似方法完成其他两个Dispose模块Salvaged和Shipped的设置。
你可能已经准备好运行这个模型了吧,尽管你已经完成了不少工作,但等你习惯Arena的使用后就会明白,在运行模型之前还必须花些时间完成其他一些准备工作。
这时候的模型的确可以运行,但开始运行后,Arena不知道何时停止仿真!
你必须通过Run>Setup为模型设定运行参数。
RunSetup对话框用五个表页的参数来控制仿真的运行。
第一个表是ProjectParameters(如输入界面4-12所示)。
在这个表中输入项目标题和分析员姓名后,在ProjectDescription部分可输入简要的项目描述。
在StatisticsCollection区,去掉Entities选项,因为在我们的分析中不需要这些数据(我们不需要按照实体类型对系统进行统计)。
你也可以选中这个框来观察选择前后输出报告的差异。
原书P114
输入界面4-12.项目运行参数的设置
设置仿真运行长度是在ReplicationParameters表中完成的,这里我们将ReplicationLength设为32小时(4个连续的8小时轮班),BaseTimeUnits选取Minutes,其他域使用默认值,设置完成后的结果如输入界面4-13所示。
对Run>Setup中的其它三个参数表则使用默认值:
RunSpeed,RunControl和Reports。
你可以打开这些参数表来了解其中的参数选项。
在运行新模型前,还必须进行最后的调整。
由于我们有两种不同类型的产品,因此如果在动画显示中能加以区别则效果就更好了。
在基本操作面板中的Entity数据模块中,你会发现两类产品的初始图像都定义为Picture.Report上,因此当我们运行模型时,所有产品在实体的动画显示中都会出现同样的图标。
原书P115
输入界面4-13.重复运行的参数表设置
单击产品A的初始图像单元格(InitialPicture),从列表中选择一个别的图片。
这里我们给产品A选择是蓝色球,而产品B选择的是红色球,以便在动画显示时可以方便地分辨出两种产品,完成后的效果如输入界面4-14所示。
如果你还想进一步了解这些图标的形状,从屏幕上面的主菜单中选择Edit>EntityPictures选项来打开实体的图形窗口,这样就可以从当前屏幕的左下栏中观察到图标的形状。
我们在后续章节中还将对这一功能作进一步介绍。
最终建立的模型如图4-3所示。
原书P115
输入界面4-14.实体模块
原书P116
图4-3模型4-1的最终形式
4.1.3运行模型
在运行模型之前,必须进行对模型加以检验,单击运行交互工具栏中Check按扭(√),或选择Run>Check命令,或用键盘上的F4键都可以对模型进行检验。
如果庆幸的话,检验完毕后会弹出一个小的消息窗口显示“模型中无错误或警告”(“Noerrorsorwarningsinmodel”);否则会弹出一个描述错误的消息窗口,这时你就需要选择Find选项(如果它可选的话)。
这些功能将提示你Arena“认为”可能出错的地方。
建议读者有意往模型中加入一个错误来验证这些功能。
对这些功能的使用会随你所建立模型复杂程度的提升而增多。
如果模型检验无错,现在就可以准备开始运行仿真了。
运行仿真的方式有四种,但我们只讲解其中的三种。
第一种是动画仿真,点击标准工具条中的“运行”按扭(
),或Run>Go命令,或使用F5键都可以启动动画仿真。
如果你还未检验模型,或是在检验之后又做了修改,Arena会首先检验模型,然后使用你的数据对模型进行初始化,再开始运行模型。
为使你的注意力集中于动画显示,Arena在运行过程中隐藏了一些图形。
不过没关系,这些图形在运行结束前会重新出现(或者你可以在仿真过程中通过View>Layers命令来查看这些图形)。
如果你激活了屏幕底部的状态栏,就可以观察Arena当前的执行操作了。
状态栏中主要包含以下三方面信息:
重复仿真次数,当前仿真时钟以及仿真状态。
仿真运行开始后,如果你想改变仿真运行速度,可以按“<”键来减慢仿真运行速度,或者按“>”键来加快仿真运行速度。
如果你按了其中一个按键的话,在状态栏左端就会出现当前动画速度因子值。
你还可以通过RunSetup对话框中的RunSpeed表来控制动画速度因子(AnimationSpeedFactor):
在这个表的选项中键入精确的速度因子数值。
在仿真运行过程中,可以使用运行工具条中的“暂停”按扭(
)来暂停运行,或者使用Run>Pause命令,或者直接用Esc键来暂停。
这样可以暂时中断仿真运行,同时状态栏中会显示“用户中断”(Userinterrupted)的消息。
在暂停模式下,可以双击一个实体动画打开一个EntitySummery对话框,这个框中罗列着每个实体的属性值,因此暂停功能对于调试模型来说非常有用。
此外,你还可以使用运行工具栏中的“单步运行”按扭(>|)来实现实体在系统中的单步运行(即每步只运行一个时间单位)。
如果想恢复仿真的“正常”运行,只需按下“运行”按扭即可。
上述的这种仿真手段尽管提供的信息量非常巨大,但却需要较长的仿真时间,而仿真运行时间取决于动画速度因子。
可以选择暂停并按下运行工具栏中的“快进”按扭(
)加快仿真速度,或者通过Run>Fast-Forward命令来实现这一功能,这样做可以使仿真在不更新动画图象的情况下大大提高运行速度。
还可以在按下暂停按扭后,重新返回到动画模式的运行。
使用快进模式可以大大缩短仿真运行时间,但如果你仅仅对仿真结果的数值感兴趣,那么可以干脆连动画效果一起关掉,选择Run>RunControl>BatchRun(NoAnimation)命令就可以实现这个功能。
通过Run>RunControl选项还可以设置其它一些运行时间选项。
当选择BatchRun(NoAnimation)选项并重新观察上级选项时,你会发现在左侧多了个复选项:
选中此项并点击Run键,仿真运行速度会非常快。
这种设置的唯一不足之处是当你想要恢复动画显示时,必须终止仿真运行,重新设置动画显示后才能恢复。
如果你的模型比较大且仿真运行时间较长,并且你仅对数值结果感兴趣的话,选用这个功能就非常合宜了:
这种模式比快进模式的运行速度更快。
当你建立模型时,可能希望多数的工具栏在窗口中方便可见,但当你运行模型进行仿真时,这些工具栏就会白白占用空间:
因为仿真运行时并不激活这些工具栏。
为此,Arena专门附带了组织工具栏:
它会记录你建立每个模型时对工具栏的设置,因此当你开始运行后,可以暂停运行后移去这些工具栏,仿真运行结束后,它们会重新出现在原先的位置上。
4.1.4观察结果
如果选择Run>Go菜单(或者点“运行”按扭
),你会发现仿真运行中,系统中除了蓝球和红球(分别代表产品A和产品B)之外,还会出现几个不断变化的计数器。
每个Create模块、Process模块和Dispose模块都各有一个计数器,而每个Decide模块会有两个计数器。
Create模块、Dispose模块以及Decide模块的计数器在实体离开该模块时自动增加一个单位;而Process模块的计数器则代表了当前模块中的实体数,包括排队等待资源的实体数与当前接受操作的实体数之和。
如果你选择的是Run>Fast-Forward模式(或者使用Fast-Forward按扭
),这些计数器就不再更新,直至仿真运行结束或你暂停并改变模型运行的观察模式时才会更新。
本模型计数器的最终运行结果如图4-4所示。
模型运行结束时,Arena会“询问”你是否想查看结果。
如果你选择Yes,系统会弹出一个总结报告的窗口(默认报告)。
当报告的首页出现时,你会发现一条内容为“无法获得总结统计”(NoSummaryStatisticsAreAvailable)的奇怪消息。
这是因为在Arena系统中,系统总结统计的是实体,而我们在“运行设置”对话框(输入界面4-12)中的“项目参数”表中没有选择Entity选择,也就自动放弃收集这些统计数据。
因此,当你改变这些选项时,请留意输出报告内容的改变。
原书P118
图4-4模型4-1的动画结果
当你需要浏览报告内容时,可以通过左侧的“报告”窗口查看表内的树形列表,或是通过报告窗口左上角的方向按扭(
)来实现。
这个报告提供了RunSetup对话框选项中的分类统计量(在“项目参数表”,“统计收集区”中定义)。
在我们所建模型中,你可以找到操作、排队、资源和用户指定等选项区域,之所以会出现用户指定区,是因为我们的模型中包含了用于离开类型的Record模块的缘故。
同第三章一样,我们的统计报告中出现了三种类型的统计量:
tally,time-persistent和counter类型。
当多次重复仿真时会出现第四个统计量(outp