管系统仿真与GPSSJAVA

上传人:飞*** 文档编号:52247934 上传时间:2018-08-19 格式:PPT 页数:49 大小:3.48MB
返回 下载 相关 举报
管系统仿真与GPSSJAVA_第1页
第1页 / 共49页
管系统仿真与GPSSJAVA_第2页
第2页 / 共49页
管系统仿真与GPSSJAVA_第3页
第3页 / 共49页
管系统仿真与GPSSJAVA_第4页
第4页 / 共49页
管系统仿真与GPSSJAVA_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《管系统仿真与GPSSJAVA》由会员分享,可在线阅读,更多相关《管系统仿真与GPSSJAVA(49页珍藏版)》请在金锄头文库上搜索。

1、第五章 GPSS/Java 仿真调度程序北京市高等教育精品教材管理系统仿真与GPSS/JavaGPSS/JAVA 仿真调 度程序实现了建模方法 的内部算法。其核心部 分封装在名为 Diaodu 的类中。调度程序主要实现的 操作是:对模型进行初 始化、完成模型的输入 、修正时钟和修正系统 的状态、启动和控制模 型的运行。GPSS/JAVA 在模型 的 run() 方法中, 通过setModel 语句创 建调度程序对象并开始 模型的初始化操作。通 过第1个start 语句开始 模型的输入操作和运行 。第5章 GPSS/Java 仿真调度程序 setModel 被调用模型输入操 作与首次时 钟修正时

2、钟修正和 系统状态修 正交替进行第1个 start 被 调用第5章 GPSS/Java 仿真调度程序 完成模型的初始化 操作,该方法被 setModel语句间 接调用即系统 状态修 正模型输 入操作即模型 输入与 首次 时 钟修正系统状 态修正首次时 钟修正时钟修 正5.1 模型初始化5.2 模型的输入操作5.3 时钟修正与系统状态修正5.4 调度程序的组织与模型运行的控制5.5 动态实体优先权与priority模块第5章 GPSS/Java 仿真调度程序 模型的初始化在Diaodu类对象构造方法中实现,主要完成以下操作; (1)对系统所有全局变量赋初始值。 (2)在一个初始化循环中,依次执行

3、模型每一模块语句的初始化部分,完 成以下操作1)对每个模块语句操作数作语法检查。2)为每一模块语句编号,依据模块的先后顺序依次编号,并确定每一编 号 所对应的case标号。生成一个一维数组中。数组下标对应模块编号 ,下标元素值对应case标号。3)如果当前执行的是generate模块,则将其对应的模块编号记录在一个 数组中,下标为generate模块的序号,元素值为其模块的编号。4)使用一数组标记需要在以后操作中进行特殊处理的模块。5)捕捉有关的异常 (3)当模型的end模块语句被执行时,初始化循环结束。 (4)初始化随机数发生器。5.1 模型初始化 5.1.1 模型初始化过程 void in

4、it() ref.simulate(); GPSS/JAVA对模型的初始化中, 模型的每一模块语句都要被执行一次。 若模块有操作数,那么操作数的求值 可能会引发如下问题: 问题1 :随机数序列被干扰(随机数发生器被generate以外 的模块语句的操作数调用) - 初始化完毕后重置随机数 发生器种子值,然后开始模型输入操作 问题2 :操作数表达式中若出现标准属性,由于模型没有 开始运行,这些属性值均为初始值,可能引起算术异常 。- 由系统控制语句setDebugOff 或模块控制语句 dbon 与dboff 解决 5.1.2 与模型初始化有关的控制语句 void init() ref.simu

5、late(); 被调度对象构造方法 所调用完成模型初始化(1)系统控制语句setDebugOff作用:模型初始化时,将模型所有模块设置为非调试状态。对模块 操作数表达式求值产生的异常不作处理,继续模型初始化的进程。2) 操作符与操作数: setDebugOff()setDebugOff语句作为系统控制语句应在模型的run方法中,先 于模型控制语句使用,例如: public void run() setDebugOff(); setModel(this); start(1); 5.1.2 与模型初始化有关的控制语句(2)模块控制语句 dboff 1) 作用:模型初始化时,将模型的某一模块设置为非

6、调试状态;对该模块 操 作数表达式求值产生的异常不作处理,继续模型初始化的进程。 2) 操作符与操作数: dboff()dboff语句应在模型的case标号与模块语句之间调用, 例如: public void simulate() switch(nextBlock) case 10: generate(16,5); case 20: dboff(); advance(14,6); case 30: terminate(1); case 40: end(); 5.1.2 与模型初始化有关的控制语句(3)模块控制语句dbon 1 作用:模型初始化时,将模型的某一模块设置为调试状态;对该模块操 作

7、数表达式求值产生的异常作报错处理,模型初始化的进程被终止 。 2 操作符与操作数 dbon()dbon语句应在模型的case标号与模块语句之间调用,例如: public void simulate() switch(nextBlock) case 10: generate(16,5); case 20: dbon(); advance(14,6); case 30: terminate(1); case 40: end(); 5.1.2 与模型初始化有关的控制语句通常模型应设置为调试状态(缺省 为调试状态),如果产生初始化 的出错提示信息,确认是否是 模块操作数求值产生的算术异常, 若是,则可

8、在该模块语句前使用 dboff语句 然后重新编译和运行模型。 用户在模型类定义的成员变量,在模型类的范围 内是全局变量。如果这些变量在模块操作数表达式中作 为只读变量被引用,则模型初始化操作不会对其有任何 影响。但是,如果这些变量在模块操作数表达式中存在 赋值的写入操作,那么仿真模型在初始化过程中,有可 能已经改变了全局变量的值。如果在模型运行时,要使 用其初始值,则必须在模型类的run方法中调用 start 语 句来启动一轮模型的运行前,重新为其赋初始值。请参 见模型 Demo5_1。5.1.3 模型初始化与用户定义的模型类成员变量5.2 模型的输入操作 初始 化输入 操作运行 部分对模型各

9、模块做语法检查和编号,生成一个generate模块编号数组等1.根据模型初始化时所获得的信息,可以在一个循环中,使模型所有 generate模块的输入子模块被依依执行。 2.将由generate模块产生的第一个动态实体,标记各种属性后(当前所在 模块为-1,下一要进入该模块,移动时间为0+抽样值),放入未来事件链 3.模型的输入操作之前,未来事件链为空;输入操作完成后,未来事件链 不再为空;根据未来移动时间的从小到大的顺序,从其链头至其链尾, 依次放置由各个generate模块各自产生的一个动态实体。 是一个系统状态修正和时钟修正操作的循环过程,循环结束的条件是 模拟终止计数器的当前数值是否小

10、于或等于 0。模拟终止计数器初始 值由start语句a操作数控制,而当前值由terminate模块a操作数控制。Init()start( )1. 模型输入操作过程二次初始化即为 模型输入操作2.举例说明 假设有一加油站,各类车辆到达间隔时间和加油所 需时间皆为均匀分布,车辆的平均到达间隔时间为 1224分钟,每辆车加油平均需要1220分钟,模 拟94分钟,输出未来事件链和当前事件链(以后定 义)信息。 (1)产生两组均匀分布的随机数序列各5个,分别 代表5辆车到达加油站的间隔时间和对应的加 油所需时间(时间取整数值)。5.2 模型的输入操作 5.2 模型的输入操作 uniformInt(int

11、 r,int l,int h )为标准随 机函数,使用 r 号随机数发生器,产生 一整型随机数,其值在 l 至 h 范围内。 print(int line,String name,double)为 一操作模块语句,向输出文件以不换行或 换行方式输出一个字符串和一个实型数值。在初始化时,case 30 执行了 一次n+操作,故在模型运行 前,需重新设置n的初值为 1产生两组均匀分布的整型随机数各5个:模型程序Demo5_1.java的输出结果:r1 =21.00 s1 =18.00r3 =17.00 s3 =16.00r4 =18.00 s4 =17.00r5 =20.00 s5 =19.00r

12、6 =18.00 s6 =19.00其中,r代表到达间隔时间,s代表加油所需时间,n (取值1至5)代表编号。例如 r1和s1分别表示1号动态实体(1号顾客)的到 达间隔时间和加油所需时间。 5.2 模型的输入操作5.2 模型的输入操作问题的模型程序3.结果 产生的两组随机数如下:模型初始化后模块被顺序编号 1 generate(uniformInt(4,12,24); 2 queue(line); 3 seize(station); 4 depart(line); 5 advance(uniformInt(6,12,20); 6 release(station); 7 terminate()

13、; 8 generate(94); 9 terminate(1);setModel间接调用init() void init()ref.simulate(); 仅执行每 个模块语 句的初始 化部分5.2 模型的输入操作动态实体属性标记:编号,未来移动时间,当前所在模块,下一进入的模块,优先权,装配集 例如,2,94.0,-1,8,0,2 模型输入操作:执行模块1(generate)的输入操作部分执行模块8(generate)的输入操作部分模型输入操作后:绝对时钟当前时间为 0未来事件链的状态为:5.3 时钟修正与系统状态修正 5.3.1 GPSS链的概念(1)未来事件链(FEC Future E

14、vent Chain)未来事件链放置某些动态实体,这些动态实体在模拟时钟未来某一 确定时刻发生运动。满足这一条件的动态实体仅有如下两种情况:在未来事件链上,动态实体是按照其未来移动时间的先后顺序,自 其链头至其链尾排列的。一个动态实体被放入未来事件链时,必须 将其插入正确的位置,即其前端的动态实体的未来移动时间应小于 或等于该动态实体的未来移动时间,而其后端的动态实体的未来移 动时间应大于该动态实体的未来移动时间。 1) 动态实体计划在未来某一确定时刻进入generate模块2)动态实体进入advance模块,在未来某一确定时刻进入该 advance模块的紧后模块5.3.1 GPSS链的概念(

15、2)当前事件链(CEC Current Event Chain )当前事件链放置某些动态实体。这些动态实体符合如下条件:1) 在模拟时钟当前时刻能够在模型中移动 2)在模拟时钟当前时刻暂时受阻停止移动,未来移动时间不能确定,一旦受阻条件不存在,立即可以移动。在当前事件链上,动态实体的未来移动时间属性被标记为ASAP(as soon as possible),代表条件允许随时可以移动。 动态实体在当前事件链按优先权水平排列,优先权高,排在前端, 在同一优先级水平内,先来者排在前面。动态实体沿模型路径移动,当停止移动的三个条件之一发生时,动态 实体要么被放至未来事件链,要么被放回当前事件链,要么被排出模 型。5.3.2 时钟修正模型输入

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号