您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > arena中文教程第10章
第10章Arena的集成和定制本章我们将介绍Arena和其他应用程序的集成问题以及如何构建定制的Arena模块。我们将通过一个非常简单的呼叫中心的模型来阐述这些概念。第一节介绍第一个主题,在这里我们设计了一个模型,从一个外部文件中将预定的到达时间读入模型,然后将性能测度数据写入一个文件中。这说明可以采用多种不同方法从外部数据源(如文本文件)将数据集成到Arena模型中来;第二节我们将介绍两种微软的Windows操作系统技术,即ActiveX自动化技术和VBA(VisualBasicforApplications)技术。Arena利用这些技术直接和其它程序集成。在这一节中我们还将介绍Arena是如何与VBA集成的。我们假定读者已经熟悉VBA编程,或者读者会通过学习其它有关资料来达到这一要求,本节的重点只是阐明在Arena中如何使用VBA;第三节介绍怎样使用这些技术来创建一个定制的用户界面;第四节继续讨论VBA,并对呼叫中心模型进行了扩充,使其能够纪录有关呼叫数据并且在微软的Excel中将呼叫周期信息用图像表示出来;最后一节即第五节我们将从整体上介绍如何设计读者自己的模块,从而增加Arena的标准建模结构。通过这一章的学习,读者将对Arena的核心特点有一个初步的了解,并且能够将Arena和其它桌面应用程序相集成,以及采取多种方式创建定制的Arena界面。10.1模型10-1:读写数据文件我们先从一个非常简单的呼叫中心模型开始,然后在多个我们感兴趣的方面逐步对它进行扩展。我们的呼叫中心有一个随机产生的呼叫到达流和一个处理呼叫的事务中心,呼叫在经过事务中心处理之后即离开系统。呼叫中心经理估计,呼叫的到达服从均值为1.1的指数分布,呼叫的处理时间服从均值为0.75、最小值为0.3、最大值为1.1的三角分布。如图10-1所示,建立本系统的仿真模型,我们使用了一个Create模块、一个Process模块和一个Dispose模块。原书P401图10-1.简单的呼叫中心模型这三个模块的数据如图10-2所示,仿真实验的参数通过菜单RunSetupReplicationParameters设置成图10-3所示。建好模型之后,我们就可以运行并察看仿真结果了。原书P402图10-2.Create、Process和Dispose模块原书P402图10-3.仿真实验参数尽管这个呼叫中心模型很简单,我们依然可以使其更加符合实际。呼叫中心经理正好告知我们,他有某天呼叫到达时间的历史数据。那就让我们使用收到的这一段时间的实际呼叫记录来产生模型实体,而不是使用概率分布的抽样数据,这样可以更好地确认我们所构建的模型。通过这些实际数据驱动模型进行仿真运行,如果其仿真结果和那段时间系统的实际性能非常贴近,我们就可以更加相信该仿真模型的逻辑的正确性了。或者我们也可以使用同样的方法对具有特定到达模式的系统进行仿真运行,例如,卡车按照一个固定的但是不规则的日程时间安排到达一个分销中心的装载码头运送货物。我们在10.1.1小节开始一个简单的实例,即从文本文件中读取实体到达数据;在10.1.2小节我们将介绍从其它数据源读取类似数据的方法。10.1.1模型10-2:从文本文件中读取实体的到达数据为了对呼叫中心模型作这样的修改,我们需要一个包含所要研究时间段的到达时间数据的文件,用它来替换产生实体的模型逻辑。方便起见,假定仿真运行从第0分钟开始,我们构造了一个包含相应仿真时间值的ASCII类型的文本文件,该文件(Model10-02Input.txt)的前几个数值如图10-4所示。在这里我们不详细介绍这个ASCII文本文件是如何产生的。实际上,读者很可能会发现,读者所能获取的信息很难如此方便地存储起来,但是通过电子数据表格或者数据库软件的有效使用,通常读者还是能够将原始数据转化成可以直接用于仿真的值并导出到文本文件中。原书P403图10-4.修改后的呼叫中心模型的呼叫时间数据我们需要决定如何使用存储在文本文件中的历史数据,这涉及到两个方面的问题:一是将数据从文件传至模型的机制;二是如何使这些数据在适当的时间产生实体。我们先看看在适当的时间产生实体的逻辑,这包括当到达模型逻辑的相应部分时读取数据的细节问题。到目前为止,我们都是用Create模块来产生实体,在仿真运行的整个过程都是基于间隔时间来产生新的实体。我们知道,手工仿真的(还记得第二章的有关内容吗?)每一个实体到达的时候,当前到达的实体都被送至模型中,而下一个到达的实体则被放入未来事件表以便在将来的某个适当时间到达,对话框中TimeBetweenArrivals项的数据决定了下一个实体到达的时刻,更一般的,这和概率分布的抽样结果有关。然而,我们不能通过构造一个简单的TimeBetweenArrivals项的表达式来从我们的数据文件中建立呼叫的到达信息,相反的,如图10-5所示,我们将直接在模型中使用一个控制实体(controlentity)来模仿当前到达和下一个到达的实体逻辑。原书P404图10-5.从文件产生实体的逻辑图如图10-6所示,Create模块只产生一个实体。对于这个Create模块,Arena只会在每次仿真实验开始时产生一个实体,然后就停止实体产生的流程,因为这已经达到了在MaxArrivals项设置的产生实体的最大数量(即1)。产生的实体进入ReadWrite模块,如图10-7所示,从数据文件中读取下一个值并将它赋给实体属性CallStartTime。ReadWrite模块可以在高等运送面板中找到,它能从外部数据源读取一个或多个数值到Arena中,并且将这些值赋给模型变量。Arena的文件名ArrivalsFile用作文件的模型标识符,这个名称千万别和存储在硬盘上(或者任何其它地方)的实际文件名混淆了,我们后面将介绍在File数据模块中定义这个实际的文件名称。原书P404图10-6.修改后的Create模块原书P405图10-7.ReadWrite模块实体从数据文件读取数值之后到达Delay模块(图10-8)等待CallStartTime长的时间,以使代表呼叫的实际实体能在适当的时间到达逻辑模型。由于数据文件中的数值代表从仿真运行开始后每一个呼叫的绝对时间而不是间隔时间,所以DelayTime项被赋值为CallStartTime-TNOW,这样实体将被延迟到存储在CallStartTime属性里的时间值。原书P405图10-8.Delay模块当控制实体完成必要的延迟之后,即可产生实际的呼叫实体进入逻辑系统,基本操作面板中的Separate模块可以很好地满足这个需要,如图10-9所示。Separate模块一方面将控制实体(标有Original的模块退出点)传送回ReadWrite模块,再从数据文件中获取下一个呼叫时间;另一方面,Separate模块产生控制实体的一个副本,并通过标有Duplicate的退出点(如图10-5所示)将其传送至逻辑模型,这个复制实体代表一个新的呼叫,它将完成所有剩余的模型逻辑。原书P406图10-9.Separate模块修改模型的最后工作就是要指定数据文件的必要信息,如图10-10所示,编辑高等操作面板中的File数据模块。当我们在ReadWrite模块的ArenaFileName项中敲入ArrivalsFile时,Arena将自动在File数据模块中产生一个相应的输入栏,我们在该输入栏的OperatingSystemFileName项中输入Model10-02Input.txt,不管模型文件保存在什么地方,也不管ReadWrite模块什么时候引用Arena的ArrivalsFile,Arena都会去访问Model10-02Input.txt。读者也可以给出文件的完整路径,如C:\MyDocuments\CoolStuff\Model10-02Input.txt,但是如果读者决定把这个模型和数据文件发给其他人,他们也必须有同样的文件夹结构,才能保证正确读取数据。File数据模块的其它选项都保留默认值,包括文件类型FreeFormat(表示Model10-02Input.txt文件包含文本值),以及end-of-fileaction选项也保留Dispose值,这样控制实体读完文件的最后一个值后就会离开系统,从而有效地终止模型的实体到达。原书P407图10-10.File数据模块让我们使用图10-4的数据值来描述前两个呼叫的仿真逻辑,在仿真时刻0(即仿真实验开始的时刻),控制实体先读取一个值1.038并将其赋给CallStartTime属性,然后延迟(1.038-0)时间单位。在1.038时刻控制实体离开Delay模块,并产生一个副本进入Queue模块开始呼叫的实际处理过程。控制实体返回ReadWrite模块,从数据文件中读取下一个值2.374并将其赋给CallStartTime属性,然后进入Delay模块,延迟(2.374-1.038=1.336)时间单位,Arena将在未来事件表中产生一个与控制实体有关的新的事件,该事件在未来的1.336个时间单位发生,即在实际的未来时刻2.374发生,该事件发生之后控制实体将到达Separate模块,在那里产生一个呼叫实体,该实体的CallStartTime属性值2.374表示第二个呼叫进入系统的时刻。当控制实体将Model10-02Input.txt文件的全部数据读取完成之后,这个过程即告结束。有两个条件可以终止仿真的运行。第一,数据文件中列出的呼叫还没有发生完,如果仿真已经达到了RunSetup对话框中所设定的运行终止时间,Arena将在该时刻终止仿真运行,因为任何一个模型的运行时间都不可能超过事先设定好的仿真终止时间;第二,还没有达到事先设定好的仿真终止时刻,但是数据文件中列出的呼叫都已经产生,并且处理完成离开系统,未来事件表变空,此时Arena就会在事先设定好的终止时刻之前停止仿真运行(还记得控制实体读取完数据文件的最后一个数据之后就离开系统吗?),因为在未来事件表中没有实体并且没有额外的基于时间的控制需要处理的时候,Arena将在最后一个实体离开模型之后终止仿真运行。10.1.2模型10-3和10-4:读和写Access和Excel文件如果保存呼叫到达数据的不是文本文件,而是微软的Access数据库或者Excel电子表格,那该怎么办呢?下面的介绍将使读者认识到,在Arena中处理这些问题是很简单的。首先假定保存呼叫到达信息的是Access数据库文件,并且相关数据存储在名叫ArrivalTimes的表中,图10-11显示了该文件(Model10-03Input.mdb)的前面一些数据值。原书P408图10-11.Access表中的呼叫时间数据从上节我们建立的模型Model10-02.doe开始,只需做少量的改动即可完成读取数据库的功能。读取和使用数据来控制实体产生过程的模型逻辑依然有用,我们只需改变获取数据的一些细节。这次从描述新的数据文件开始。编辑高等操作面板中已经存在的File数据模块,如图10-12所示。保留Name项为ArrivalsFile,回顾一下,这项内容是在模型逻辑(本例中为ReadWrite模块)里用来标识文件的,没有必要改变它,但是我们必须将OperatingSystemFileName项改为Model10-03Input.mdb1,而其它大多数选项都保留默认值,包括EndofFileAction的值Dispose,这就像以前一样,控制实体读完文件的最后一个值就离开仿真系统。读者将注意到AccessType项有一个可供选择的下拉列表,在这里选择MicrosoftAccess(*.mdb),有关字段(列)和以前不一样了,这是因为读取数据库文件需要和文本文件不同的信息。特别是出现了一个标有初始值为0rows的按钮,在该按钮上方有一个新的列,标1使用扩展名为.mdb(Access文件的默认格式)的文件时请注意,不要和Arena模型重名。Arena自动将其输出信息保存在文件ModelName.mdb中(其中Mod
本文标题:arena中文教程第10章
链接地址:https://www.777doc.com/doc-2901737 .html