《《管理系统仿真与GPSSJAVA》第三章PPT课件.ppt》由会员分享,可在线阅读,更多相关《《管理系统仿真与GPSSJAVA》第三章PPT课件.ppt(28页珍藏版)》请在三一办公上搜索。
1、第三章 从GPSS 到 GPSS/Java,北京市高等教育精品教材管理系统仿真与GPSS/Java,第3章 从 GPSS 到 GPSS/Java,3.1 GPSS建模基础3.2 基于GPSS的GPSS/Java,3.1 GPSS 建模基础,3.1.1 GPSS处理程序 也称为GPSS处理器,它是实现了GPSS算法的计算机解释程序。3.1.2 GPSS描述模型的方法模块图:描述模型的逻辑结构,相当于程序框图或流程图,一共有50块左右,不同形状的模块代表不同的模拟功能。模块之间用箭线连接,箭头所指模块表示当前模块执行完后下一个要执行的模块。由箭线及其指向定义了模块执行的顺序,也称为模块图路径。模型
2、程序:由按一定的逻辑排列并遵守一定语法规则的GPSS语句组成的文本文件,可由GPSS解释器执行。,3.1 GPSS建模基础,例如: 某理发馆只有一位理发师,顾客到达时间间隔平均为18分钟,偏差 6分钟,均匀分布。理发师为一个顾客理发平均所需时间为16分钟,偏差 4分钟,均匀分布。顾客到达后,若理发师闲,则立刻接受服务,否则按先来先接受服务的规则排队等待,模拟8小时。,模块图,模型程序,3.1.3 动态实体、服务实体和辅助实体,仿真系统,动态实体,流动性,暂驻性,真实系统 动态实体代表的实际事物超级市场 顾客高速公路 汽车货运系统 卡车加工车间 零件就诊医院 病人,服务实体,固定实体,分为单服务
3、台服务实体多服务台服务实体,真实系统 服务实体代表的实际事物 超级市场 收费员 高速公路 收费站 货运系统 仓库 加工车间 加工机床 就诊医院 医生与化验师,辅助实体,不对应实际系统的具体事物,1、 动态实体,动态实体在模型中总是试图从一个模块流入另一个模块,具有以下行为特点:1 根据需要按一定时刻或一定间隔时间进入模型2 在某一时刻可以离开模型3 众多动态实体可以同时存在于模型中4 在任一时刻,若有多个动态实体都要在模型中向前移动,那么要采取依次处理的机制动态实体在模型中停止运动的条件: 动态实体总是试图从一个模块流入另一个模块,只有下列条件之一发生时停止运动。1 流入的模块具有使动态实体停
4、留某一事先确定的间隔时间的功能2 流入的模块具有拒绝动态实体流入的功能,此时动态实体停留在紧前模块。3 动态实体流入TERMINATE模块,便被排出模型之外,2、服务实体,1. 服务实体映射为实际系统中能够提供服务的实体, 它们通常不会随着时间的变化,而发生移动或消失 。2. 服务实体有一定的容量。3. 服务实体提供的服务要持续一定的时间(可为随机值)4. 每个服务实体都有一对与动态实体相耦合的模块语句,代表服务的发生与结束。,与动态实体相耦合的模块,3、辅助实体,GPSS定义了若干不同类型的辅助实体,大都不对应实际系统的具体事物。这类实体有:1. 排队实体(简称队列)2. 函数实体(简称函数
5、)3. 保存值实体(简称保存值或保留值)4. 表实体(简称表或统计表)5. 逻辑开关实体(简称逻辑开关或开关)6. 变量实体(简称变量)7. 用户链实体(简称用户链) 它们为建模提供逻辑、计算、统计和输出等方面的辅助功能。从定义这些辅助实体的数据结构方面来看,类似于服务实体,因此模型中将服务实体和辅助实体统称为资源实体。,模拟时钟 模拟时钟为一全局变量,初值为 0 时间单位:由用户隐含定义 模拟时间与实际时间:实际系统从一个状态过渡到另一个状态,需要一个较长的时间,在GPSS中,仅仅是对时间变量和一系列有限个状态变量重新赋值所需时间。,3.1.4 模拟时钟和仿真算法 - 最短时间步长事件模拟法
6、,3.1.4 模拟时钟和仿真算法 - 最短时间步长事件模拟法,在某个时间点上,该发生的事件依次发生(事件的发生与系统状态修正一一对应),全部发生完毕,也就完成了该时刻下系统状态的修正,于是时钟被调整到下一事件发生的时刻,3.1.5 动态实体与事件,在GPSS中,动态实体进入或流出某一模块就意味某一事件(普通事件或关键事件)的发生或结束,动态实体的流动路径就是一系列事件发生的顺序。 关键事件:在某一未来的确定时刻所发生,只有以下两种情况。1)动态实体由GENERATE模块产生后通过该模块进入模型时,代表 接受服务的实体到达服务系统的事件发生了。2)动态实体进入ADVANCE模块滞留一段时间后,代
7、表接受服务的实体接受服务后离开服务实体的事件发生了。普通事件:由关键事件引发的事件为普通事件。事件三要素: 1. 事件类型,即发生了什么事2. 事件发生时间,是否确定3. 事件发生的主体,即事件发生在哪一个动态实体上,3.1.5 动态实体与事件,动态实体映射为内存中的一个连续的存储区,动态实体有自己的属性:如编号、当前所在模块编号、下一个要进入的模块编号、未来移动时间等。未来事件链:存放在未来某个确定时刻会发生关键事件的动态实体,按照从小至大的未来发生时间依次从链头至链尾排列。时钟修正:根据未来链前端第一个动态实体的未来移动时间调整时钟,并把未来事件链上移动时间等于当前时刻的动态实体一一移入模
8、型。 时钟修正后,处理器立即启动系统状态修正程序。,3.1.5 动态实体与事件,系统状态修正:处理器依次移动在当前时刻每一个可以移动的动态实体,使之在模型中尽可能向前运动。直到以下3个条件之一发生为止:(1)动态实体进入ADVANCE模块,获得未来移动时间后,被重新放到未来事件链。(2)动态实体被类似SEIZE的模块所拒绝时,停留在紧前模块。(3)动态实体进入TERMINATE模块被排除模型。 若在当前时刻所有动态实体都停止了运动,则系统状态修正的操作结束;处理器立即启动时钟修正程序。系统状态修正和时钟修正交替进行,直到仿真结束的条件发生。,3.1.5 动态实体与事件,关键事件:在未来一个确定
9、的时间会发放生的事件,如顾客到达理发馆和滞留一段确定的时间后释放理发师事件。,发生关键事件,触发,调整当前时钟,触发,系统状态修正,对应,发生普通事件,循环,直到普通事件全部发生为止,再次发生关键事件,普通事件:发生时间不确定,因关键事件的触发而发生。如,顾客到达可以触发排入队列事件、占用理发师事件(可能)、离开队列事件;释放理发师关键事件可以触发当前顾客离开理发馆事件,正在等待的顾客占用理发师、离开队列、开始理发事件等。,动态实体由 GENERATE 模块产生。 GENERATE模块每被执行一次,便产生一个动态实体,并为其编号,记录其未来移动时间和下一移入的模块,然后将其放至未来事件链(该动
10、态实体当前所在模块为-1,下一要进入的模块就是该GENERATE 模块)。在以后的某个时钟修正时刻(等于该动态实体的未来移动时间),这一动态实体被送入模型。由某 GENERATE 模块产生的动态实体在模型中开始移动时,首先将进入的是产生它的 GENERATE 模块,于是,该 GENERATE 模块又被执行一次,而以上的过程又被重复一次,即又由该 GENERATE 模块,产生一个新的动态实体,它被标记后,又被放至未来事件链,然后引发这一事件的动态实体进入紧后模块,开始其运动。 模型输入的作用就是使模型的所有GENERATE模块按其排列的顺序,各被执行一次,且仅仅一次。于是模型输入完成后,未来事件
11、链依次按未来移动时间的先后从头至尾排列着每个GENERATE 模块产生的第一个动态实体。,3.1.6.动态实体的产生与模型输入,3.2 基于GPSS的GPSS/Java,3.2.1 什么是GPSS/Java :GPSS/JAVA是用 JAVA实现的GPSS专用仿真系统。 GPSS/JAVA 是使用 JAVA 来实现建模接口和仿真算法的若干程序模块 ,并将这些程序模块以类的形式集中封装在一仿真类库(gpssjv)中,以供用户使用。用户在建立仿真模型时,只需引入仿真类库,便可调用仿真类库提供的仿真算法和建模接口,来构建实际系统的仿真模型。,3.2.1 GPSS/Java的优点,(1)仿真系统完全向
12、用户开放,用户可以根据需要任意向仿真类库添加实现某种功能的新接口。 (2)GPSS/JAVA类库(gpssjv)结构高度模块化,模块由JAVA类组成。(3)建模语言功能的极大丰富与扩展,用户可以在模型程序中使用JAVA的语言部分的所有功能,并且可以使用JAVA本身提供的标准类库及其他开发人员提供的非标准的类库,来实现任何满足构造复杂模型所需要的操作。,仿真类库,仿真基础类,仿真支持类,BlockOp类资源实体类操作模块类,动态实体类、仿真调度类、链表操作类、异常处理类、辅助操作符、常量定义接口和公用消息类,封装了建模所需的模块语句和标准属性,封装了模型程序界面接口和模型控制语句等,3.2.2.
13、 Java简述,(1)对象与类 客观存在的具体事物就是对象性质和行为相似的事物的总称为类 要先定义类,然后用其产生对象。类含有两种属性:成员变量,描述对象的性质或状态成员方法,描述对象的行为或执行的操作 Java 使用关键词class定义一个类,每个类要有一个类名,类名必须是合法的Java标识符。 例如,以下定义了一个名为Facility的类,它有3个成员变量和5个成员方法。,类,公有成员,私有成员,又称接口,可以通过对象调用,仅能被类内部的程序访问,成员变量成员方法,3.2.2.Java简述,3.2.2. Java简述,(2)创建对象 使用类,创建对象。例如: Facility b1=new
14、 Facility(“Barber Wang”); Facility b2=new Facility(“Barber Zhang”); b1和 b2代表使用 Facility类创建的两个对象,称为引用变量。对象在创建时会自动调用其构造方法,构造方法与类名相同,且无返回类型,常用以初始化对象的成员变量。 一个类中,可以定义多个同名方法,但方法参数的类型或个数不同,这称为方法的重载;构造方法是特殊的方法,也可以重载。(3)this引用 关键词 this 为一引用变量,在某一方法中代表当前对象,即调用该方法的对象。,3.2.2. Java简述,(4)继承与覆盖 Java使用关键词 extends 来
15、描述两个类的继承关系,例如: class A extends B 则,A为B的子类。子类继承父类的非私有属性,可以重写(覆盖)父类签名相同的方法。(5)抽象方法与抽象类 用关键词abstract 修饰的方法和类,分别称为抽象方法和抽象类。BlockOp 类封装了抽象方法run() 和simulate() ,称为模型程序界面接口,模型类必须实现这两个方法。(6)异常及其捕捉 GPSS/JAVA提供了异常处理类gpssException.java等,用以处理模型运行时的常见异常。,3.2.2. Java简述,(7)包及其引用一个包中可以含有多个类,但只有公有类能够被该包以外的程序所访问。一个源程序
16、文件可以定义多个类,但只能定义一个类是公有的,该程序文件必须以公有类的类名命名,扩展名为java。使用包语句 package 包名;将类定义在一个包中。GPSS/JAVA提供的所有类封装在gpssjv包中,仿真模型类必须引入该包,才能引用包中提供的建模接口。在对引用此包的模型程序进行编译和运行时,系统需要通过包的绝对路径访问包中被引用的类。JAVA约定由环境变量 CLASSPATH 提供此信息,即包路径的直接父目录的绝对路径。,3.2.2. Java简述,(7)包及其引用 例如,若包gpssjv的路径为 d:myjavagpssgpssjv,则应设置 CLASSPATH=.;d:myjavag
17、pss在完成包的安装和正确设置后,若要在程序中使用包中的类,可以在程序首部使用包引入语句,例如: import gpssjv.*; (8)主类与主方法 含有主方法的类称为主类。 一个基于桌面的JAVA应用程序,程序从主类的主方法开始执行,主方法执行完,程序结束。,3.2.3 GPSS/JAVA描述模型的方式,GPSS/JAVA仍旧使用模块图描述系统模型的逻辑结构。 GPSS/JAVA 模型程序是由按一定的逻辑排列, 遵守JAVA语法规则的GPSS/JAVA类库接口语句组成的 JAVA 程序文件,编译后生成模型类文件,由 JAVA解释器执行。GPSS/JAVA语句与GPSS模块语句和控制语句几乎
18、一一对应。 用 GPSS/JAVA (桌面应用完全版)编写的 Demo3_1 模型的程序具有如下形式:,3.2.3 GPSS/JAVA描述模型的方式,3.2.3 GPSS/JAVA描述模型的方式,GPSS/JAVA模型程序有如下书写和语法要求:(1)必须引入gpssjv仿真包(类库)(2)定义一个模型公有类(简称模型类),模型程序文件名必须与模型类名相同,扩展名为 java(3)模型类必须继承类库中定义的 BlockOp 类(4)主方法中创建一个模型类对象,通过此对象调用 run 方法(桌面应用学生版不需要定义主方法)(5)模型类必须实现父类的run方法,在此安排GPSS/JAVA的模型控制语句(6)第一个模型控制语句必须是 setModel()语句,该语句创建仿真调度程序对象(7)所有GPSS的资源实体必须作为模型类成员变量,先定义,后使用(8)模型类必须实现父类的 simulate方法,在此安排 GPSS/JAVA的模块语句(9)模型每一个模块语句必须前导一个 case 标号,标号可以不连续,但必须为非负递增(10)不允许有case标号,而无模块语句。,谢 谢 ,欢迎使用管理系统仿真与GPSS/JAVA,