离散事件系统仿真策略Word文件下载.docx
《离散事件系统仿真策略Word文件下载.docx》由会员分享,可在线阅读,更多相关《离散事件系统仿真策略Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
D(S)=true,表示满足,D(S)=false表示不满足。
TIME模型仿真钟的值,值域为{R(0,)}。
13.1事件调度法(EventScheduling)
事件调度法基本思想:
用事件的观点来分析真实系统,通过定义事件及每个事件发生引起系统状态的变化,按时间顺序确定并执行每个事件发生时有关的逻辑关系。
2
所有事件均放在事件表中。
模型中设有一个时间控制成分,该成分从事件表中选择具有最早发生时间的事件,并将仿真钟修改到该事件发生的时间,再调用与该事件相应的事件处理模块,该事件处理完后返回时间控制成分。
这样,事件的选择与处理不断地进行,直到仿真终止的条件或程序事件产生为止。
策略的非形式描述:
成分集合CA{1,2,n}:
主动成分集
CA{1,2,m}
,被动成分集
CP{m1,m2,n}
描述变量:
描述每一主动成分
CA的变量,的状态s值域S
,
s下一变化时刻的时间变量t
描述每一被动成分CP的变量,的状态s,值域S
(被动成分的状态变化只有在主动成分作用下才能发生,
其发生时间由主动成分来确定,因而不需要时间变量。
)描述所有成分的属性的变量:
参数集合P={p1,p2,,pr}
成分间的相互关系
3
每个主动成分CA的影响受主在作用下其状态变化的描述,称为事件处理流程;
各成分处理的优先级,即同时发生时的处理顺序(解结规则)。
注意,在事件调度法中,一般主动成分也同时具有被动成分属性,以便接受其它主动成分的作用。
推进仿真钟TIME=t(s)While(TIME=t)则执行
Case根据事件类型i
i=1执行第1类事件处理程序*
事件调度法算法如下:
执行初始化操作,包括:
置初始时间t=t0,结束时间t
te
事件表初始化,置系统初始事件成分状态初始化
(*第i类事件处理程序对成分的状态变化进行建模,而且要进行统计计算)
i=2执行第2类事件处理程序。
S((s1,t1),(sm,tm),sm1,sn)
操作事件表,包括
取出具有t(s)min{t修改事件表
CA}事件记录
4
i=m执行第m类事件处理程序
endcase
取出具有t(s)min{tCA}事件记录__
置仿真时间TIME=t(s)endwhile__
(__若具有t(s)min{t若干个,则按解结规则处理)
CA}事件记录有
(__该算法中未包括仿真结束后对结果的分析等内容)
13.2活动扫描法(ActivityScanning)
事件调度法中仿真钟的推进仅仅依据t(s)min{t
CA}准则,而该事件发生的任何条件的测
试必须在该事件处理程序内部去处理。
如果条件满足,该事件发生,否则,则推迟或取消该事件发生。
从本质上来说,事件调度法是一种“预定事件发生时间”的策略。
这样,仿真模型中必须预定系统中下一最先发生的事件。
该策略对于活动持续时间确定性较强(可以是服从某种分布的随机变量)的系统是比较方便的。
当事件的发生不仅与时间有关,而且与其它条件有关,即只有满足某些条件时才会发生。
在这种情况下,事件调度法策略的弱点则表现出来了,由于这类系统的活动持续时间的不确定性,因而无法预定活动的开
始或终止时间。
活动扫描法的基本思想是:
用活动的观点建模。
系统由成分组成,而成分包含着活动,这些活动的发生必须满足某些条件;
每一个主动成分均有一个相应的活动子例程;
仿真过程中,活动的发生时间也做为条件之一,而且是较之其它条件具有更高的优先权。
设D(S)表示成分在系统状态S下的条件是否满足(D(S)=true则表示满足,D(S)=false则表示不满足),t表示成分的状态下一发生变化的时刻,活动扫描法每一步要对系统中所有主动成分进行扫描,当:
(i)t
仿真钟当前值TIME,且(ii)D(S)=true时,执行该成分的活动子例程。
所有主动成分扫描一遍后,则又按同样顺序继续进行扫描,直到仿真结束。
显然,活动扫描法由于包括了对事件发生时间的扫描,因而它也具有事件调度法的功能。
实现措施:
1.设置系统仿真钟TIME与成分仿真钟t
系统仿真钟表示系统的仿真进程的推进时间,而成分仿真钟则记录该成分的活动发生时刻,两者的关系可
能有三种情况:
(i)(ii)(iii)
tTIME表示该活动在将来某一时刻可能发生;
t=TIME表示该活动如果条件满足则应立即发生;
tTIME表示该活动按预定时间早应发生,但因条件未满足,到目前为止实际上仍未发生,当前
是否发生,则只要判断其发生的条件。
2.设置条件处理模块
该模块用于测定D(S)的值及系统仿真钟与成分仿真钟之间的关系,记FUTURE(S)={
tTIME},*****(S)={t=TIME},PAST(S)={tTIME}
该模块将满足下列条件:
(i)*****(S)PAST(S),且(ii)D(S)=true的成分置于可激活(
*****ABLE)的成分集合中,即
*****(S)PAST(S)
*****ABLE(S)=D
(S)true
此时,系统仿真钟不推进,仅仅处理成分活动,包括修改成分仿真钟。
如果可激活的成分集合为空,则将系统仿真钟推进到下一最早发生的活动生成时刻,TIME=min(tFUTURE(S))
算法描述:
S((s1,t1),(sm,tm),sm1,sn)置初始时间t=t0,结束时间tte
设置系统仿真钟TIME=t0
设置主动成分的仿真钟t(i)(i=1,2,,m)While(TIMEt),则执行扫描
成分状态初始化:
forj=最高优先数到最低优先数
将优先数为j的成分置成i
即
If(t(i)TIME且D(S)=true)
i
endifendfor
执行活动子例程i
TIME=min(tendwhile
FUTURE(S))
退出,重新开始扫描
核心是建立活动子例程模型。
包括此活动发生引起的状态变化(自身的),对其它成分的状态产生的作用
等等,而条件处理模块则是这种策略实现的本质,它相应于事件调度法中的定时模块。
13.3进程交互法(ProcessInteractive)
进程交互法采用进程(Process)描述系统,它将模型中的主动成分所发生的事件及活动按时间顺序进行组合,从而形成进程表,一个成分一旦进入进程,只要条件满足,它将完成该进程的全部活动。
系统仿真钟的控制程序采用两张事件表,其一是当前事件表(CEL:
CurrentEventsList),它包含了从当前时间点开始有资格执行的事件的事件记录,但是该事件是否发生的条件(如果有的话)尚未判断,其二是将来事件表(FEL:
FutureEventsList),它包含在将来某个仿真时刻发生的事件的事件记录。
每一个事
件记录中包括该事件的若干属性,其中必有一个属性,说明该事件在进程中所处位置的指针。
当仿真钟推进时,满足tTIME的所有事件记录从FEL移到CEL中,然后对CEL中的每个事件记录进行扫描,对于从CEL中取出的每一个事件记录,首先判断它属于哪一个进程以及它在该进程中的位置。
该事件是否发生则决定于发生条件是否为真。
若Di(S)=True,则发生包含该事件的活动,只要条件允许,该进程要尽可能多地连续推进,直到结束;
如果Di(S)=False或仿真钟要求停止,则退出该进程,然后对CEL的下一事件记录进行处理。
当CEL中的所有记录处理完毕后,结束对CEL的扫描,继续推进仿真钟,即把将来事件表中的最早发生的事件记录移到CEL中,直到仿真结束。
执行初始化操作,包括
设置开始时间t=t0,结束时间t设置初始化事件,并置于FEL中将FEL中有关事件记录置于CEL中
则
While(TIME=t),则执行1.CEL扫描
While(CEL中最后一个记录未处理完)则While(Di(S)=true且当前成分未处理完)
以便决定下一活动是否发生。
如果条件不满足,则该进程退出,并记下断点,置于FEL中。
)
endwhileendwhile
2.推进仿真钟
TIME=FEL中安排的最早时间
执行该成分的活动*
(*一个进程可能有若干个活动,每一个活动有相应的活动子例程来处理该成分在此活动发生时的状态变化及对其它成分的作用)
确定该成分的下一事件__
If(TIME=t)则
将FEL中TIME时刻发生的事件记录移到CEL中
endifendwhile
(为确定该进程的下一事件,必须对Dai(S)求值,
进程交互法既可预定事件,又可对条件求值,因而它兼有事件调度法及活动扫描法两者的优点。
13.5三种仿真策略的比较
1.系统描述
所有策略均提供主动成分及被动成分,每种成分均能接受其它成分的作用。
在事件调度法中,只有主动型成分CA才能施加作用,而在其它两种策略中,主动型成分CA与被动型成分CP均可施加作用。
在事件调度法中,系统的动态特性表现为主动成分不断产生事件,而在活动扫描法中则表现为主动成分产生活动;
在进程交互法中则是通过成分在其进程中一步一步地推进来描述。
2.建模要点
在事件调度法中,用户要对所定义的全部事件进行建模,条件的测试只能在事件处理子例程中进行。
活动扫描法设置了一个条件子例程专用于条件测试,还设置一个活动扫描模块,该模块对所有定义的活动进行建模。
进程交互则将一个进程分成若干步,每一步包括条件测试及执行活动两部分。
3.仿真钟的推进
在事件调度法中,主动成分的下一事件发生时间保存在事件表中,定时模块不断地从事件表中取出具有最早发生时间的事件记录,并将仿真钟推进到该事件发生时间,并转向该事件处理子例程执行。
活动扫描法除了设置了系统仿真钟之外,每一个主动型成分还没有成分仿真钟。
定时模块选择那些大于当前系统仿真钟的值且是所有成分仿真钟最小的那个成分仿真钟,然后将系统仿真钟推进到该时刻,并开始对活动扫描。
进程交互法采用将来事件表及前事件表。
当前事件表中的进程扫描完后,从将来事件表中取出具有最早发生时间的事件记录置于当前事件表中,仿真钟推进到该事件发生时间。
一旦某个进程被执行,则要求尽可能多地走下去,但并不改变系统仿真钟;
如果该进程并未完成,则将其断点记录下来,即将中断时间及事件类型放到将来事件表中,如果当前事件表中有一项或几项的发生时间小于当前系统仿真钟的值,则说明在以前的扫描中,发生该事件的条件未得到满足,本次应再次进行扫描。
4.评述
事件调度法:
建模灵活,可应用范围广泛,但一般要求用户用通用的高级语言编写事件处理子例程,建
模工作量大。
活动扫描法:
对于各成分相关性很强的系统来说模型执行效率高。
但是,建模时,除了要对各成分的活动进行建模外,仿真执行程序结构比较复杂,其流程控制要十分小心。
进程交互法:
建模最为直观,其模型表示接近实际系统,特别适用于活动可以预测,顺序比较确定的系统,但是其流程控制复杂,建模灵活性不如事件调度法。
13.6离散事件系统仿真语言
1GPSS:
GPSS语言推出最早,采用进程交互法。
GPSS特点:
模型可采用一组标准的程序块(block)来表示其逻辑结构,系统的临时实体按程序块图中规
定的方向由某一块流向另一块。
一个程序块对应一条GPSS语句,它相当于一个子程序。
用GPSS进行仿真建模时,要进行如下三个步骤:
(1)将被仿真的系统抽象成为类似于流程图的模型描述;
(2)用GPSS程序块实现流程图中的功能模块;
(3)用GPSS程序块对应的语句编写出仿真程序,形成一个可执行的代码。
例13单台排队系统,顾客到达事件间隔为均匀分布的随机变量,其均值为20分钟,偏差为6分钟;
为每个顾客服务的时间也是均匀分布的随机变量,其均值为15分钟,偏差为3分钟;
服务规则为先来先服务(FIFO)。
图(a),(b)分别给出了该系统的流程图描述及GPSS程序块图描述。
到达一个顾客排进队列WAIT中占用服务台离开队列
服务服务完成
图(a)单排队系统流程图
1个顾客离开系统
图(b)单排队系统GPSS模型图
对这类简单系统,他们之间几乎是一一对应的。
GPSS程序块图旁边是注释。
5
然后就可以写出该系统的GPSS程序如下:
*TheModelofSingle-SeverQueueSystem注释语句
Simulate仿真执行开始*BlockDefinitionCards注释语句
Generate20,6模型定义QueueWAITSeizeSERV
DepartWAIT
Advance15,3ReleaseSERVTerminate1
*ControlCards注释语句
Start100实验控制End程序结束
GPSS语言提供一个处理器以翻译GPSS源程序并加以执行,最终向用户输出仿真结果的标准报告。
2SLAM/SIMAN仿真语言
6
SLAM语言:
可用于离散事件系统,连续系统以及离散-连续混合系统的仿真。
连续系统既可采用微分方程,也可采用差分方程来描述。
它将事件调度及进程交互两种策略结合起来形成了统一的建模框架。
离散部分若采用面向进程的观点建模
则采用网络结构,网络模型中的实体可以触发离散事件的发生及连续状态变量的值发生变化;
若采用面向事件的观点建模,则事件可以改变网络模型中的实体流动并可引起连续状态变量发生变化;
而达到阈值的连续状态变量能激发网络模型中的实体或触发事件。
SLAM共提供了22个网络语句,与GPSS相似,每个语句对应有一个称为“节点”的图形描述或用带箭头的分支符号表示。
如果用户还需要用事件调度的观点来描述系统,SLAM提供了EVENT(I)子程序名,用户可用*****编写各事件处理子程序;
此时还需用户编写主程序(基于*****)并在主程序中执行CALLSLAM,以便进入其网络模型。
SLAM源程度可分为两大部分,一部分是系统模型描述。
另一部分是实验控制语句。
这种将模型语句与实
验控制语句组织在一个仿真程序中,这种做法是早期仿真语言共同的特点。
7
SIMAN语言:
SLAM的作者之一C.DennisPegden对SLAM进行了较为彻底的改造与扩充。
SIMAN语言仿真结构图
SIMAN语言将仿真全过程分成了四个阶段:
8
1).进程模型处理
SIMAN的进程模型与SLAM的网络模型十分接近(增加了某些功能)。
它将该模型描述作为一个单独的文
件――进程模型文件,并有一个模型处理器MODEL对该文件进行翻译,得到一个相应的模型目标文件。
2).实验框架处理
SIMAN将用户的实验要求用实验框架文件来描述,而且与模型完全分离开来。
一个模型文件可用于若干
个不同的实验框架文件。
实验框架处理器EXPMT负责对实验框架文件进行翻译,产生一个相应的实验框架目标文件。
3).仿真运行
连接器LINKER:
将上述两个目标文件连接起来形成一个仿真文件,该文件可提交给SIMAN处理器执行
并自动产生标准输出报告。
如果用户编写了事件处理子程序,则必须事先进行*****编译,SIMAN会将他们与仿真文件连接起来一起执行。
4).仿真输出