1)实体:主导系统活动的对象(Object)。实体是描述系统的三个基本要素(实体、属性、活动)之一。
在离散事件系统中的实体可分为两大类:临时实体及永久实体。在系统中只存在一段时间的实体叫临时实体,如工件、货物。这类实体由系统外部到达系统后通过系统,最终离开系统。始终驻留在系统中的实体叫永久实体,如缓冲站、仓库。临时实体按一定规律不断地到达(产生),在永久实体作用下通过系统,最后离开系统,整个系统呈现出动态过程。
实体还可以分为主动体(Active)和被动体(Passive)。主动体为系统中具有自主移动能力,如服务系统的顾客、AGV小车、运输系统中的车辆。被动体不具有自主移动的能力,如产品、工件、托盘、容器等。
2)属性:实体所特有的特性称为实体的属性,包括固有属性:大小、颜色、形状、重量等,仿真属性:到达时间间隔、到达批量等。
3)状态:在某一确定时刻,系统的状态是系统中所有实体的属性的集合。
4)资源:系统中活动被执行时必须搭配的载具,通常用来定义由某个实体在什么地方执行活动。资源在系统中为定点设置,但是和实体一样可分为主动体和被动体。主动资源对象为本身具有自我驱动的能力,一般常见的为输送带、售货员、叉车、堆垛机等,一般讲到的资源均指主动资源;被动资源对象如仓库、轨道、道路等。
5)事件:引起系统状态发生变化的行为,系统的动态过程是靠事件来驱动的。例如,在物流系统中,工件到达可以定义为一类事件。因为工件到达仓库,进行入库时,仓库货位的状态会从空变为满,或者引起原来等待入库的队列长度的变化。
事件一般分为两类:必然事件和条件事件。只与时间有关的事件称为必然事件。如果事件发生不仅与时间因素有关,而且还与其他条件有关,则称为条件事件。系统仿真过程最主要的工作就是分析这些必然事件和条件事件。
6)活动:离散事件系统中的活动,通常用于表示两个可以区分的事件之间的过程,它标志着系统状态的转移。例如,等待活动。
7)进程:进程由若干个有序事件及若干有序活动组成,一个进程描述了它所包括的事件及活动间的相互逻辑关系及时序关系,如图2-1所示。例如,工件由车辆装入进货台,经装卸搬运进入仓库,经保管、加工到配送至客户的过程。
图2-1 事件、活动与进程
8)仿真时钟:仿真时钟用于表示仿真时间的变化。在离散事件系统仿真中,由于系统状态变化是不连续的,在相邻两个事件发生之间,系统状态不发生变化,因而仿真时钟可以跨越这些“不活动”区域。从一个事件发生时刻,推进到下一个事件发生时刻,仿真时钟的推进成跳跃性,推进速度具有随机性。由于仿真实质上是对系统状态在一定时间序列的动态描述,因此,仿真时钟一般是仿真的主要自变量,仿真时钟的推进是系统仿真程序的核心部分。
仿真时钟的推进有两种经典的方法:固定步长推进法和变步长推进法(或称为下一事件推进法)。变步长推进法应用较多,目前大多数仿真软件都采用变步长推进法。
①固定步长推进法。
确定一个固定的时间增量,以此增量逐步推进仿真时钟。每推进一个增量,就在被推进的时刻观察有无事件发生。如果没有事件发生,则继续以相同的增量推进仿真时钟;如果有事件发生,则根据事件类型进入事件处理程序,对事件发生后的状态变化进行相应处理,然后再推进仿真时钟。
如果恰好在推进的增量的中间时刻有事件发生,一般采取简化的方法,把该事件假定为是在增量推进的时刻发生的。
②变步长推进法。
变步长推进法即事先没有确定时钟推进步长,而是根据随机事件的发生而进行随机步长的推进,推进的步长为最后易发生事件与下一事件之间的间隔时间。由于离散事件系统的状态多数是随时间离散变化的,在仿真时不需要考虑没有发生状态变化的时段。因此,这种变步长的推进方法,其节奏性与系统状态变化更加吻合。
应当指出,仿真时钟所显示的是仿真系统对应实际系统的运行时间,而不是计算机运行仿真模型的时间。仿真时间与真实时间将设定成一定比例关系,使得像物流系统这样复杂的系统,真实系统运行若干天、若干月,计算机仿真只需要几分钟就可以完成。
(1)分析理发店的实体、状态、事件、活动
实体:顾客、服务员;状态:服务员个数、顾客数、服务员忙闲;事件:顾客到达、服务完毕;活动:顾客等待、理发员服务。
(2)分析柔性制造系统实体、状态、事件
实体:工件、加工中心;事件:(待加工工件)到达、机床完成加工;状态:各加工中心的繁忙程度、各加工中心的等待队列;活动:工件等待、加工。
仿真可以用来研究千差万别的现实世界,但是不同实际系统的离散事件仿真模型却具有一些相同的组成部分和组成部分之间的逻辑组织关系。对于大多数采用变步长推进机制的离散事件系统仿真模型,通常都包含有如下几个组成部分。
1)系统状态:在特定时间用来描述系统的状态变量集。
2)仿真时钟:表示仿真时间当前值的变量。
3)事件列表:将发生各类事件时用来存放下次事件发生的时间和事件其他属性的表。
4)统计计数器:用来存放有关系统性能统计数据的各个变量。
5)初始化子程序:在仿真开始时(即仿真时间为零时)初始化仿真模型的子程序。
6)时间推进子程序:从事件列表中确定下次事件,然后将仿真时钟推进到该事件发生的时刻。
7)事件发生程序:指用来更新系统状态的子程序。当某类型的特定事件发生后,根据该事件的类型,进行相应的系统状态更新。
8)报告生成器:用来计算各种所期望的性能测度的量,并在仿真结束时输出结果。
9)随机观测生成程序库:是一组用来根据概率分布产生随机观测值的子程序。
10)主程序:用来唤醒时间推进子程序并确定下一发生事件,然后将控制转向相应的事件程序,并对系统状态进行相应的更新。主程序还可检查仿真的终止并在仿真结束时激活报告生成器。
离散事件系统仿真研究的一般步骤与连续系统仿真是类似的,它包括确定仿真目标、数据收集、系统建模、确定仿真算法、建立仿真模型、验证与确认模型、运行仿真模型、仿真结果分析、输出仿真结果。
一个系统的仿真目的可以各不相同。例如,研究一个物流配送中心,可以提出各种不同的问题,如管理调度策略问题、运作流程协调问题等。所关心的问题不同,建立的系统模型、设定的输入变量和输出变量等都各不相同。因此在进行系统仿真时,首先要确定仿真的目标,也就是仿真要解决的问题。这是数据收集和系统建模的依据。
数据收集的对象是仿真建模需要的相关数据。仿真建模的过程是一个从简单到复杂的渐进过程,每个阶段都需要收集整理有关数据。需要收集数据的种类和数量与仿真对象极其复杂程度有关。这些数据大多是仿真模型中各种实体的属性,包括临时实体和永久实体,如客户到达时间间隔及其分布规律、服务时间及其分布规律等。
系统模型由模型和模型参数两部分组成。模型参数是对数据收集结果的整理。系统模型的形式是多样的,有文字叙述型、流程图型、图表型、数学表达式型。离散事件系统仿真模型最常用的是建立系统的流程图模型,也被称为流程模型。流程模型中应包含临时实体到达模型、永久实体服务模型和排队规则。
离散事件系统虽然大多是随机的,但由于仿真模型中采用的是伪随机数,从理论上讲,其状态的转移是确定的,因而也可得到确定性的状态转移函数。但离散事件系统的模型难以用某种规范的形式写出,一般采用流程图或网络图的形式才能准确地定义实体在系统中的活动。在一个较为复杂的离散事件系统中,一般都存在诸多的实体,这些实体之间相互联系、相互影响,然而其活动的发生却统一在同一时间基上,采用何种方法推进仿真时钟,建立起各类实体之间的逻辑联系,是离散事件系统仿真中建模方法的重要内容,也称之为仿真算法或仿真策略。仿真策略决定仿真模型的结构。
前面建立的系统模型只是对系统的抽象化描述,是仿真者对系统深入了解的必经过程。然而这种模型仅仅能够被人脑所接受和理解,还无法在计算机上运行。为此还需建立计算机可运行的模型,即仿真模型。仿真模型是将系统模型规范化和数字化的过程。同时也需要根据计算机运行的情况增加一些必要的部件。仿真模型的主要部件有初始化模块、输入模块、仿真时钟、随机数发生器、状态统计计数器、事件列表、事件处理程序和输出模块等。
对建立的仿真模型必须进行验证,以保证通过仿真软件或者仿真语言所建立的系统模型能够准确地反映所描述的系统模型。模型的验证主要检验所建立的仿真模型(包括系统组成的假设、系统结构、参数及其取值、对系统的简化和抽象)是否被准确地描述成可执行的模型(如计算机程序)。
模型的确认则是考察所建立的模型及模型的运行特征是否能够代表所要研究的实际系统。实际上,没有哪个模型能够完全地代表所研究的实际系统,总是存在这样或那样的简化或者抽象。只要一个模型在研究关注的问题上能够代表实际系统,就是有效的。
运行仿真模型时需要确定终止仿真的时间。一般有两种终止方法:一是确定一个仿真时间长度,如仿真100小时。系统仿真时钟推进100小时后将自动终止仿真,并输出仿真结果。另一种方式是确定仿真事件的数量。以工件到达仓库为例,可以设定100批物品到达后终止仿真。选择哪种方式可依仿真系统的具体情况确定。
由于离散事件系统固有的随机性,每次仿真运行所得到的结果仅仅是随机变量的一次取样。尽管仿真实验要进行多次,系统仿真结果的可信度仍然需要进行分析和判断,不同的仿真方式(终态仿真或稳态仿真)有不同的仿真结果分析方法,详细内容见本章第4节。
仿真结果输出有实时在线输出和仿真结束时输出两种方式。当对系统进行动态分析时,往往需要了解各种中间变量或者输出变量的实时变化情况。对于这些变量可以设定在仿真时钟推进的每一或某一时刻输出该变量的瞬时值,即实时在线结果输出,输出的是仿真阶段性的结果。最后在仿真结束时,需要输出最终的仿真结果。目前成熟的仿真软件一般都可以提供多种仿真结果输出形式,如表格输出、直方图、饼图、曲线图等输出。
离散事件系统仿真与连续系统仿真的方法很不相同。
离散事件系统模型只是一种稳态模型,无须研究状态变量从一种状态变化到另一种状态的过程。而对于连续系统,主要是研究其动态过程,连续系统模型一般要用微分方程描述。
离散事件系统中的变量大多数是随机的,例如实体的“到达”和“服务”时间都是随机变量。仿真实验的目的是力图用大量抽样的统计结果来逼近总体分布的统计特征值,因而需要进行多次仿真和较长时间仿真。
连续系统仿真中采用均匀步长推进仿真时钟的原则;离散事件系统仿真中时间的推进是不确定的,取决于系统的状态条件和事件发生的可能性。
离散事件系统仿真实质上是对由随机系统定义的,用数值方式或逻辑方式描述的动态模型的处理过程。从处理手段上看,离散事件系统仿真方法可分为两类。
面向过程的仿真方法主要研究仿真过程中发生的事件以及模型中实体的活动;这些事件或活动的发生是顺序的。而仿真时钟的推进正是依赖于这些事件和活动的发生顺序,在当前仿真时刻,仿真进程需要判断下一个事件发生的时刻或者判断触发实体活动开始和停止的条件是否满足,在处理完当前仿真时刻系统状态变化操作后,将仿真时钟推进到下一事件发生时刻或下一个最早的活动开始或停止时刻。仿真进程就是不断按发生时间排列事件序列,并处理系统状态变化的过程。
在面向对象仿真中,组成系统的实体以对象来描述。对象有三个基本的描述部分,即属性、活动和消息。每个对象都是一个封装了对象的属性及对象状态变化操作的自主的模块,对象之间靠消息传递来建立联系以协调活动。对象内部不仅封装了对象的属性还封装了描述对象运动及变化规律的内部和外部转换函数。这些函数以消息或时间来激活,在满足一定条件时产生相应的活动。消息和活动可以同时产生,即所谓的并发,但在单CPU计算机上,仍须按一定的仿真策略进行调度。在并行计算机和分布式仿真环境中,仿真策略则可以更加灵活、方便。
面向对象的仿真尤其适用于各实体相对独立、以信息建立相互联系的系统中,如航空管理系统、机械制造加工系统以及武器攻防对抗系统等。