GPSSJAVA中级建模技术.ppt

上传人:小飞机 文档编号:5432383 上传时间:2023-07-06 格式:PPT 页数:105 大小:1.07MB
返回 下载 相关 举报
GPSSJAVA中级建模技术.ppt_第1页
第1页 / 共105页
GPSSJAVA中级建模技术.ppt_第2页
第2页 / 共105页
GPSSJAVA中级建模技术.ppt_第3页
第3页 / 共105页
GPSSJAVA中级建模技术.ppt_第4页
第4页 / 共105页
GPSSJAVA中级建模技术.ppt_第5页
第5页 / 共105页
点击查看更多>>
资源描述

《GPSSJAVA中级建模技术.ppt》由会员分享,可在线阅读,更多相关《GPSSJAVA中级建模技术.ppt(105页珍藏版)》请在三一办公上搜索。

1、第七章 GPSS/JAVA中级建模技术,北京市高等教育精品教材管理系统仿真与GPSS/JAVA,任毅 教授 孙健 讲师,7 GPSS/JAVA中级建模技术,7.1 标准属性7.2 动态实体参数7.3 动态实体的驻留与传输7.4 表实体与队列表实体7.5 GPSS变量实体的表达方式7.6 保存值实体(Savevalue)7.7 test模块7.8 loop gate 与buffer模块7.9 select模块7.10 标准属性IN及用户控制的输出7.11 表的间接引用的处理,7.1 标准属性,1)什么是标准属性标准属性由GPSS/JAVA以方法的形式提供,用以返回在模型运行的某个时刻,仿真模型的

2、状态属性(当前队长、设备忙闲状况、存储器利用率)以及某动态实体的属性值(如动态实体的驻留时间、动态实体某参数的值等)。2)标准属性(SA Standard Attribution)的分类:a.标准数值属性(简称SNA Standard Numberic Attribution)返回数值 b.标准逻辑值属性(简称SLA Standard loginic Attribution)返回逻辑值c.和标准实体属性(简称SOA Standard Object Attribution)返回实体对象,7.1 标准属性,在模拟的过程中,模型处于一个动态变化的过程中,模拟结果文件中仅输出模拟结束时系统的状态,通过

3、标准属性可获得模拟过程中,某个时刻系统自身的状态以及某个动态实体的数值特性。,系统状态,系统本身状态属性,动态实体数值特性,1.当前队长、当前最大队长、当前平均队长2.设备当前状态、设备当前利用率、设备当前被 占用次数、设备当前平均服务时间3.存储器利用率、存储器当前容量、当前空闲容量4.当前相对时钟、绝对时钟读数,动态实体各种参数的值,7.1 标准属性,1.设备类中封装了如下标准属性(),7.1 标准属性,1.设备类中封装了如下标准数值属性(节选),2.设备类中封装了如下标准逻辑值属性(节选),7.1 标准属性,1.队列类中封装了如下标准数值属性(节选),2.队列类中封装了如下标准逻辑值属性

4、(节选),7.1 标准属性,模块计数器SNA(全局属性),标准实体属性SOA(全局属性),7.1.1 系统标准属性,1.系统标准属性可分为资源实体标准属性和全局标准属性。1)与资源实体直接关联的标准属性称为资源实体标准属性,它们以方法的形式封装在各个资源实体类中,例如设备类中封装了如下标准属性,7.1.1 系统标准属性,2)其它与资源实体无直接关联的标准属性称为全局标准属性。,7.1.1 系统标准属性,设备实体类封装的方法,其中包括设备实体的相关属性,7.1.1 系统标准属性,1.作为模块操作数2.作为函数自变量,标准属性的作用,7.1.2 应用举例,1.问题陈述有一汽车冲洗站,只有一个冲洗工

5、。汽车平均到达时间为5分钟,指数分布。冲洗一辆汽车的时间也服从指数分布,但平均冲洗时间取决于队列长度,等待冲洗的汽车较少时,则服务时间较长,等待的车辆较多时,服务时间加快。观测得到如下统计数据:队列长度 平均服务时间(秒)0 330 1.2 300 3、4或者5 270 6或者更多 240建立模型,模拟冲洗1200辆车,确定冲洗一辆车平均所需时间。,7.1.2 应用举例,2.实体定义,7.1.2 应用举例,3.模型程序,冲洗一辆车平均需要281.99 秒。,7.2 动态实体参数,任一动态实体具有两组可读写的标准数值属性,称为动态实体参数,一组为标准整型,一组为双精度实型。7.2.1 动态实体参

6、数的定义与使用1.个数的定义 由generate模块的操作数f和g定义,f操作数定义了所产生的动态实体的整型参数的个数,取值0代表缺省,缺省则定义12个整型参数g用来定义实型参数的个数。动态实体可定义的整型和实型参数的个数都不能超过100个。2.参数的引用动态实体整型参数的标准属性的原型为:int P$(int num):其中,num为参数编号,编号从1开始。double PD$(int num):返回动态实体某号实型参数的值 3.参数的初始值由generate模块产生的动态实体的参数初始值一律为0。,7.2 动态实体参数,4.参数的意义动态实体每个参数的值为动态实体的一个属性的值,其意义由用

7、户隐含指定。例如,某模型中动态实体代表实际系统的汽车,则动态实体(汽车)1号和2号整型参数,及3号实型参数的意义可由用户说明为:P$(1)(汽车颜色)P$(2)(制造厂家)PD$(3)(载重量)1 棕色 1 上海 10 10吨 2 蓝色 2 长春 20 20吨 3 绿色 3 湖北 40 40吨 4 灰色 4 北京 60 60吨 动态实体参数作为一种标准数值属性,可作为模块的操作数和函数的自变量等来使用。,7.2.2 assign模块与动态实体参数的赋值,1.作用 动态实体进入该模块,其某号参数的数值被修改。2.操作符、操作数与模块图(1)标准模式assign(int a,int b):为整型参

8、数赋值参数 a:整型,代表要修改的参数编号,缺省则出错参数 b:整型,代表要修改的参数为整型及其修改后的数值,缺省则出错 例如,assign(3,25);assign(int a,double b):为实型参数赋值参数a:整型,代表要修改的参数编号,缺省则出错参数b:双精度实型,代表要修改的参数为实型及其修改后的数值,缺省则出错 例如,assign(3,25.0);,7.2.2 assign模块与动态实体参数的赋值,动态实体参数赋值的递增模式(整型)assignPlus(int a,int b)assignPlus模块有2个操作数,其含义如下:a:整型,整型表达式或SNA,代表要修改的参数编号

9、,不能缺省b:整型,整型表达式或SNA,代表要修改的参数为整型及其修改后递增的数值,不能缺省 例如,assignPlus(3,Q$(line);,假设某动态实体进入该模块前,其3号整型参数值为25,进入时队列line当前队长为4,则该动态实体在进入后其3号整型参数值被修改为29。动态实体参数赋值的递增模式(实型)assignPlus(int a,double b),7.2.2 assign模块与动态实体参数的赋值,递减模式1 整型参数赋值assignMinus(int a,int b)assignMinus模块共有2个操作数,其含义如下:a:整型,整型表达式或SNA,代表要修改的参数编号,不能

10、缺省b:整型,整型表达式或SNA,代表要修改的参数为整型及其修改后递减的数值,不能缺省 例如,assignMinus(3,Q$(line);,假设某动态实体进入该模块前,其3号整型参数值为25,进入时队列line当前队长为4,则该动态实体在进入后,其3号整型参数值被修改为21。动态实体参数赋值的递减模式(实型)assignMinus(int a,double b),7.2.3 应用举例,1.问题陈述:有一小超市由三个商品区组成,摆放不同类型商品,超市出口设有一收银台,只有一个服务员收付款。顾客到达超市的平均间隔为75妙,指数分布,到达后由入口处取一个装货的手推车,然后去三个商品区挑选商品。顾客

11、去三个商品区的概率,在每区停留的时间和所选商品个数如下所示:商品区 概率 停留时间(秒)选中商品个数 分布 1 0.75 12060 31 均匀分布 2 0.55 15030 41 均匀分布3 0.82 12045 51 均匀分布 顾客选完商品后去收银台排队付款,付款处有一小商品货架,顾客排队时会选21个小商品(均匀分布),服务员收款时间取决于顾客所买商品数量,平均每件需要3秒钟,顾客交款以后将装货小车放回入口处。构造模型,模拟40小时,确定该超市最多需要配多少台装货手推车。,7.2.3 应用举例,2.实体定义:,假设小车充足,取一很大成员数目(容量)的存储实体代表所提供的小车服务,根据此存储

12、实体的最多同时忙的成员数(在超市中最多时的顾客数)可以确定最多需要的小车数量,7.2.3 应用举例,2.定义实体:,7.2.3 应用举例,1.问题陈述:有一小超市由三个商品区组成,摆放不同类型商品,超市出口设有一收银台,只有一个服务员收付款。顾客到达超市的平均间隔为75妙,指数分布,到达后由入口处取一个装货的手推车,然后去三个商品区挑选商品。顾客去三个商品区的概率,在每区停留的时间和所选商品个数如下所示:商品区 概率 停留时间(秒)选中商品个数 分布 1 0.75 12060 31 均匀分布 2 0.55 15030 41 均匀分布3 0.82 12045 51 均匀分布 顾客选完商品后去收银

13、台排队付款,付款处有一小商品货架,顾客排队时会选21个小商品(均匀分布),服务员收款时间取决于顾客所买商品数量,平均每件需要3秒钟,顾客交款以后将装货小车放回入口处。构造模型,模拟40小时,确定该超市最多需要配多少台装货手推车。,存储实体carts的最大同时服务数为14。因此超市提供14辆小车,最忙时也能应付。,7.3 动态实体的驻留与传输,动态实体的驻留与传输是指其在模型中的驻留与传输。驻留:动态实体从进入模型到其流出模型所耗费的整个过程 传输:动态实体从模型的一个模块到另一个模块的运动过程。7.3.1 动态实体驻留时间动态实体驻留时间是指从动态实体进入模型开始到当前时刻在模型中停留的时间。

14、标准数值属性M1$()返回某动态实体的驻留时间。start(2);generate(25);advance(30,10);print(NEW,“Resident time=”,M1$();terminate(1);,7.3.2 动态实体的传输时间,动态实体传输时间是指动态实体从模型的一个模块移动至另一模块所需时间。因此可见,动态实体驻留时间是其传输时间的一个特例,即其起始模块是产生它的generate模块。确定一个动态实体的传输时间要按照以下三步来实现。1.指定动态实体的某号参数(设为n),用于记录时间在起始点,使用mark(n)模块将绝对时钟时间复制到n号实型参数 在终点,调用标准数值属性M

15、P$(n),获得当前绝对时钟时间与该动态实体的n号实型参数值之差,即为该动态实体由起始点到终点的传输时间,7.3.2 动态实体的传输时间,Mark模块的用法Mark:操作模块,动态实体流入时,将当前绝对时钟时间值复制到该动态实体指定的n号实型参数。mark(int a)a:整型,代表动态实体的某实型参数的编号,不能缺省double MP$(int a):属性返回值为绝对时钟的当前值与a号实型参数值之差。其中,a为动态实体的a号实型参;mark(1);enter(line);advance(30,5)leave(line);print(NEW,”trans time=”,MP$(1);termi

16、nate();可以获得每个动态实体由enter到leave模块的传输时间。,注意:mrak是模块语句,有模块图MP$()是全局标准属性,没有模块图。,7.4 表实体与队列表实体,表实体属于辅助实体,用于获得一组随机样本值的频率和频数的分布表,并计算出这组样本分布的特征值。7.4.1 表实体的定义Table类构造方法:。(1)public Table(doublea,doubleb,intc)其中,a为表下界值,b为表间隔值,c为表间隔数,表的输出名自动命名为TABL1(2)public Table(Stringname,doublea,doubleb,intc)例如:Table resi=ne

17、w Table(“Resident time”,20,2,8);,7.4.1 表实体与队列表实体的定义,对列表实体:队列表实体是一种特殊的表实体。它是使用类库gpssjv的类QTable创建的一个队列表对象。QTable类重载的构造方法:public QTable(Queue q,doublea,doubleb,intc)其中,q为队列对象,表示该表统计的对象是动态实体在队列q的等待时间,表的输出名自动命名为QTABL1,其它同上。public QTable(Stringname,Queue q,doublea,doubleb,intc)例如,QTable waitq=new QTable(“

18、Wait time”,line,20,2,8);定义了队列表实体waitq,输出名为Wait time,该表统计的对象是动态实体在队列line的等待时间。,7.4.3 表实体统计数据,(1)名称:表输出名,若为QTable类型则另输出对应的排队实体输出名(2)统计总数:输入表实体的样本总数(3)平均值:样本平均值(4)标准差:代表样本值的离散性(5)样本值总和:所有输入变量值的总和(6)表字段(1)行间隔值 若某间隔内样本数为0,则各字段输出为空,行间隔最小值为表定义时指定的下界值,行间隔值为上一行值加上表间隔值(2)频数 为样本值落入该间隔行的样本数(3)频率 样本值落入该间隔行的样本数/统

19、计总数(4)累积频率 第一行累积频率等于本行样本频率,其它行累积频率等于紧前行累积频率与本行频率之和(5)1累积频率 1本行累积频率,7.4.4 应用举例,1.问题陈述对于7.2.3 应用举例中的小超市问题,假设其它条件不变,除了要确定该超市最多需要配多少台装货手推车之外,还要求确定顾客在此小超市的停留时间的分布,以及顾客在收银台等待时间的分布。2.实体定义 其它实体与相同,新模型只增加二个表实体。,3.建模提示表实体wTime是Qtable类型,只需定义,无需用户安排调用,表实体rTime应在顾客付帐后离开系统前调用,7.4.3 表实体统计数据,7.4.3 表实体统计数据,7.4.3 表实体

20、统计数据,以上输出表明,顾客在小超市平均停留时间为315.1956秒,近似正态分布,标准差为119.1760。顾客在收银台平均等待时间为11.3382秒,近似指数分布。比较通过表实体wTime和排队实体girlQ所获得的顾客在收银台处的排队的平均等待时间稍有差异:前者未将模拟结束时仍在队列中的顾客记入总数,而后者两项数据在计算平均等待时间时都予以了考虑。,7.4.5 表调用语句的包装与重载,调用表的第二种方式:为了保持GPSS的语法习惯,GPSS/JAVA提供了表调用语句的包装方法,resiTAB()包装了resi.tabulate(M1$(),7.4.5 表调用语句的包装与重载,调用表的第三

21、种方式:重载tabulate方法,7.4.5 表调用语句的包装与重载,调用表的第三种方式:重载tabulate方法,7.5 GPSS变量实体的表达方式,7.5.1 GPSS变量1.定义变量 PROFIT VARIABLE 5*N(PATH)-102.在模型中使用变量实体而不直接使用表达式具有如下好处:(1)意义明确 通过变量名我们可以概括表达式的意义(2)程序简洁。如果表达式很长,或模型多处要引用同一表达式,使用变量调用比直接使用表达式不仅意义明确而且十分简洁。,7.5.2 用java方法包装GPSS变量表达式,GPSS变量的上述功能完全可以直接由JAVA的方法来实现。这个方法作为模型类的成员

22、方法,可以被同一类的成员方法simulate内的各个模块语句所访问,方法的返回值可以是一个数值表达式也可以是一个逻辑表达式。int profitV()return 5*N$(PATH)10;变量类型 变量名()return 表达式;1.变量实体的标准属性名为:变量名()。建议变量名的最后一个字符为V,以便识别。2.变量所表示的表达式必须是一个合法的JAVA算术表达式或关系表达式或逻辑表达式。3.模型运行结束时,输出结果文件中不包含变量实体的标准输出。,7.5.3 算术、关系和逻辑表达式,JAVA常用的算术运算符有:+、-、*、/和%JAVA关系运算符有:、=、与或以上运算符的优先级别是:先!、

23、后算术、次关系、再与、最后或。,7.5.4 GPSS/JAVA的变量实体,GPSS/JAVA使用类似其它资源实体的数据结构定义了变量实体类(Variable),目的是使变量的调用能够以更标准的GPSS的形式进行,用户可以使用Variable类创建变量实体对象。,7.5.5 变量调用方法的标准形式,GPSS/JAVA,7.6 保存值实体,保存值实体简称保存值或保留值,是辅助实体,属于资源实体。保存值实体存放一个数值并且允许在模型运行过程中被修改。保存值实体与变量实体的不同点1.保存值实体自被定义时,始终存放某个值,变量值仅在调用时返回2.变量的值仅能通过调用获得(只读),保存值的值可读可写。因此

24、GPSS的保存值类似于JAVA等高级语言中的数值型变量,而GPSS的变量则类似于JAVA等高级语言的方法或函数。,7.6.1 保存值的定义和使用。,保存值实体的构造方法:Savevalue(Strings)其中,s为输出名,保存值实体初始值缺省为0Savevalue()其中,输出名缺省,系统自动命名为SAVA1,保存值实体初始值缺省为0Savevalue(.Strings,doublev)其中,s为输出名,保存值实体初始值为vSavevalue(doublev)其中,输出名缺省,系统自动命名为SAVA1,保存值实体初始值为v例如,Savevalue profit=new Savevalue(“

25、Profit”,20.0);,7.6.1 保存值的定义和使用。,保存值的数值类型为双精度实型。保存值实体定义后,在模型中可通过其标准数值属性来引用。保存值类中定了两个方法用户返回保存值实体对象的值:1.double X$()返回保存值对象的当前值2.Int XI$(),将当前保存值对象的值取整后返回保存值对象的包装方法double X$(Savevalue s)其中,s为保存值对象。例如 X$(profit)返回保存值实体profit的值。另一个保存值的标准数值属性的原型为:int XI$(Savevalue s)其中,s为保存值对象,该属性将保存值s的值取整后返回。,7.6.2 saveVa

26、lue模块和保存值的修改,1.作用 动态实体进入该模块,修改指定的保存值实体的数值。2.操作符、操作数与模块图(1)标准模式(包装后)saveValue(Savevalue a,double b)saveValue模块有2个操作数,其含义如下:a:保存值对象,代表要修改的保存值实体,不能缺省b:实型,实型表达式或SNA,代表要修改的保存值实体修改后的数值,不能缺省 例如,saveValue(profit,25);,当动态实体进入此模块时,保存值实体profit的值被修改为25。(面向对象的调用方式)profit.saveValue(25):将保存值对象profit的当前值修改为25.,7.6.

27、2 saveValue模块和保存值的修改,(2)递增模式savePlus(Savevalue a,double b)savePlus模块有2个操作数,其含义如下:a:保存值对象,代表要修改的保存值实体,不能缺省b:实型,实型表达式或SNA,代表要修改的保存值实体修改后递增的数值,不能缺省 例如,savePlus(profit,4);,假设某动态实体进入该模块前,profit值为25,则该动态实体在进入后,其值被修改为29。面向对象的调用方式:porfit.savePlus(4);,7.6.2 saveValue模块和保存值的修改,(3)递减模式saveMinus(Savevalue a,dou

28、ble b)saveMinus模块有2个操作数,其含义如下:a:保存值对象,代表要修改的保存值实体,不能缺省b:实型,实型表达式或SNA,代表要修改的保存值实体被修改后递减的数值,不能缺省 例如,saveMinus(profit,4);,假设某动态实体进入该模块前,profit值为25,则该动态实体在进入后其值被修改为21。以上三模块为资源模块语句,允许使用如下面向对象形式:profit.saveValue(25);profit.savePlus(4);profit.saveMinus(4);,7.6.3 reset和clear语句对保存值的影响,模型控制语句reset()不影响保存值,模型控

29、制语句clear()使所有保存值的数值归0。使用如下clear语句的重载方法,可以使指定的保存值实体保持原值,而不被归0。clear(inta)其中,a为不被归0的保存值实体编号列表。保存值实体依照在模型中定义的先后顺序被依次编号,编号从1开始。例如,clear(5,2);或者使用如下clear语句的重载方法,也可以使指定的保存值实体保持原值,而不被归0。clear(Savevaluea)其中,a为不被归0的保存值实体对象列表。例如,clear(count,profit);表示模型清除时将保持count和profit保存值实体值不变,而其它保存值实体的值被归0。,7.6.4 保存值的重新定义,

30、使用模型控制语句redefine如下的重载形式,可以在新的一轮模拟开始时对模型的原有保存值的初始值进行重新定义。redefine(Savevalue name,double v)其中,name为重定义值的保存值对象名,v为重新定义的初始值,为一实型表达式。例如,redefine(profit,45);重新定义保存值profit初值为45。保存值的重定义语句应置于clear语句之后。面向对象的书写方法:profit.redefine(45);,7.6.5 保存值的输出,模拟结束时,变量和动态实体参数的值不包含在输出结果文件的标准输出中。但保存值作为标准输出包含在输出文件中,其形式如下。保存值实体

31、输出名 保存值实体值.,7.6.6 应用举例,1.问题陈述对于中的设备装配与包装问题,要求将利润计算安排在模型中,使输出结果直接显示不同雇工人数的日均生产利润。中给出的利润计算条件为:工人的工资为 10¥/小时/人,包装机的耗电、维修和折旧费用为280¥/8小时,设备的另配件和包装费用 12¥/台,设备售价 40¥/台。要求:建立计算机模型,在结果文件中包含利润的计算结果。,7.6.6 应用举例,2.实体定义,7.6.6 应用举例,3.模型程序,7.7 test模块,Test模块语句有两种模式:关系模式和逻辑模式关系模式:1.关系模式(1)作用 根据模块辅助操作符指定的操作数a和b的关系成立与

32、否,决定动态实体是进入该模块,还是转移至某指定模块;如果辅助操作符指定的关系成立,则动态实体流入该模块,否则转入c操作数指示的模块。(2)操作符、操作数与模块图c ab testx转移模式test(intx,doublea,doubleb,Addrc)关系转移模式的test模块有4个操作数,其含义如下:a:实型,SNA或算术表达式,不能缺省b:实型,SNA或算术表达式,不能缺省,C,7.7 test模块-关系模式,1.关系模式test(intx,doublea,doubleb,Addrc)a:实型,SNA或算术表达式,不能缺省b:实型,SNA或算术表达式,不能缺省x:辅助操作符,表示操作数 a

33、 和 b 的关系,有效的辅助操作符及其意义如下:辅助操作符 代表的关系 G a b GE a b L a b LE a b E a b NE a bc:标号对象,若 x 定义的关系不成立,所转入的模块的标号对象,不能缺省,7.7 test模块拒绝模式,以上为test模块的关系转移模式,其拒绝模式采取如下的重载形式:test(intx,doublea,doubleb)其中,辅助操作符 x 和操作数 a 与 b 意义同上。当辅助操作符 x 定义的操作数 a 与 b 的关系成立时,动态实体被允许进入该模块,否则停留在其紧前模块,直到关系成立。例如,test(GE,X$(line1),X$(line2

34、);,表示若保存值line1的值大于或等于保存值line2时,动态实体将流入此模块,否则将停留在其紧前模块。test模块的关系模式还提供了用于两个整型表达式比较的如下重载形式:test(intx,inta,intb,Addrc)test(intx,inta,intb)这两个重载模块分别对应test模块的关系转移和关系拒绝模式,区别仅仅在于 a 和 b 操作数代表的是整型表达式。,7.7 test模块逻辑模式,(1)作用 根据模块辅助操作符指定的操作数a的值为真还是假,决定动态实体是进入该模块,还是转移至某指定模块;如果辅助操作符指定的关系成立,则动态实体允许流入该模块,否则转入b操作数指示的模

35、块。(2)操作符、操作数与模块图test(intx,booleana,Addrb)x:辅助操作符,表示操作数 a 的值为真还是为假的成立关系,有效的辅助操作符及其意义如下:T 操作数 a 返回真,则为真 F 操作数 a 返回假,则为真a:boolean类型,关系表达式、逻辑表达式或逻辑变量b:标号对象,若 x 定义的关系不成立,所转入的模块的号对象,不能缺省。例如:test(T,Q$(line1)Q$(line2)|Q$(line1)Q$(line3),bybye);,,7.7 test模块逻辑拒绝模式,以上为test模块的l逻辑转移模式,其逻辑拒绝模式采取如下的重载形式:test(intx,

36、booleana)其中,辅助操作符 x 和操作数 a 意义同上。当辅助操作符 x 定义的操作数 a 的关系成立时,动态实体被允许进入该模块,否则停留在其紧前模块,直到关系成立。例如,test(T,Q$(line1)Q$(line2),表示若队列line1的当前队长既大于队列line2的当前队长又大于line3的当前队长时,动态实体将流入此模块,否则停留在其紧前模块。逻辑模式用于构造复杂的关系,建议在模型中先定义逻辑变量实体来表达这种关系,然后将其作为 test 模块逻辑模式的 a 操作数。,7.7 test模块3)应用举例,(1)问题陈述有一书店,某种书籍的日销量为均匀分布,平均日销量为9到1

37、5本。当该书库存量低于最低库存点时,书店须发出订货单,每批订货量为150本。从订货至到货需要一段时间,所需时间为6到8天,均匀分布。若某日销量大于库存量时,则产生脱销,书店根据过去经验,该种书籍最低库存点应为50本。若每次订货量较少,则会产生脱销,若订货量过大,则积压资金。建立仿真模型,确定订货量分别为110、130、150、170和190本时,库存量的分布和日脱销量的分布,以便对订货批量作进一步决策的参考。每轮模拟1000天,假设,书到货当天需要办理各种手续而不上架销售。,7.7 test模块3)应用举例,(2)建模提示 1).书店售货员比书店采购员有较高优先权,某天采购员取货回来时,在当前

38、事件链代表两“同发事件”的动态实体中肯定代表售货员的动态实体排在先,而先被处理,即售货在先,入库在后而不作为当天库存来销售。2).变量实体rLostV()为JAVA方法,返回某日脱销量,定义如下,int rLostV()if(P$(1)X$(sTock)return P$(1)(int)X$(sTock);else return 0;/P$(1)为某日可销量,X$(sTock)为该日售前库存量3).变量实体rStockV()为JAVA方法,返回某日售后库存量,定义如下,int rStockV()if(P$(1)=X$(sTock)return 0;else return(int)X$(sToc

39、k)-P$(1);,7.7 test模块3)应用举例,(3)实体定义,7.7 test模块3)应用举例,(4)模块图,7.7 test模块3)应用举例,(5)源程序(略)(6)仿真结果,Java整数数据类型和实数数据类转换的语法规则,1).JAVA规定,实型数据向整型转换必须采取强制转换的方式,否则编译会报错。例如以上两方法,返回值已经定义为int类型,若返回表达式值的类型为double则会产生编译错误。2).要注意assign模块的使用,assign即可给动态实体的整型参数赋值,也可以给动态实体的实型参数赋值,究竟给哪种参数赋值仅取决于该模块操作数b的类型。若操作数b为实型数,则肯定是给动态

40、实体的某号实型参数赋值。3).如果一个模块语句的操作数在其原型中定义为整型,而调用时传递的实参为实型,则会产生数据类型不匹配的编译错误。此时要么实参改为整型数据,要么使用强制类型转换符(int)。如果其操作数在原型中定义为实型,那么实参操作数即可以是整型(系统自动转换)也可以是实型。4).GPSS/JAVA 提供的所有接口语句的参数类型或返回值的类型若为数值型,则只使用JAVA的两种基本类型即int类型的整型(4个字节)和double类型的实型(16个字节)。若接口语句的参数类型或返回值的类型为逻辑值型,则使用的是JAVA的boolean类型,其返回值为true或false。,7.8 逻辑开关

41、实体(switch),逻辑开关实体简称开关实体,是辅助实体,属于资源实体。逻辑开关实体实际上是一种特殊的保存值实体,它的值助记为SET或RESET,代表两种不同的逻辑状态(真或假,假或真),作用类似开关。,7.8.1 逻辑开关的定义与引用,7.7.1 逻辑开关实体的定义与引用开关实体必须先定义后使用。Switch类提供了如下重载的构造方法,用于对开关对象的状态进行初始化。Switch(Strings)其中,s为输出名,初始状态缺省为RESETSwitch()其中,输出名缺省,系统自动命名为SWIT1,初始状态缺省为RESETSwitch(.Strings,int state)其中,s为输出名,

42、初始状态为state,state只能为助记符SET或RESETSwitch(int state)其中,输出名缺省,系统自动命名为SWIT1,参数state意义同上例如,Switch ls=new Switch(“Logic swich”,SET);定义了开关实体ls,输出名为Logic swich,初始状态为SET。,7.8.1 逻辑开关的定义与引用,开关实体定义后,在模型中可通过标准属性来引用,以返回对某开关当前状态的判断,其原型为int LS$(Switch s)其中,s为开关对象,表示若开关s当前状态为SET,则返回值为1,否则为0。int LR$(Switch s)其中,s为开关对象,

43、表示若开关s当前状态为RESET,则返回值为1,否则为0。boolean LS(Switch s)其中,s为开关对象,表示若开关s当前状态为SET,则返回值为true,否则为false。boolean LR(Switch s)其中,s为开关对象,表示若开关s当前状态为RESET,则返回值为true,否则为false。例如,若开关ls当前状态为RESET,则LS$(ls)返回值为0。面向对象的表示方法ls.LS$();ls.LR$();ls.LS();ls.LR();,7.8.2 lgoic模块与逻辑开关状态的改变,1.作用 动态实体进入该模块,将指定的逻辑开关实体的状态改变为指定的状态。操作符

44、、操作数与模块图logic(Switch a,int b)a:开关对象,代表要改变状态的开关实体,不能缺省b:助记符,代表开关实体被设置的状态,不能缺省,合法的助记符如下,SET RESET REV,其中,REV表示将开关设置为与原状态相反的状态。例如,logic(ls,SET);将开关 ls 状态设置为SET,再执行语句 logic(ls,REV);则使开关 ls 状态变为RESET。logic模块为资源模块语句,允许使用面向对象形式 ls.logic(REV);来书写。,7.8.3 逻辑开关的重新定义,使用模型控制语句redefine如下的重载形式,可以在新的一轮模拟开始时对模型的原有开关

45、状态进行重新定义。redefine(Switch name,int state)其中,name为重定义的开关对象名,state为重新定义的初始状态,例如,redefine(ls,SET);重新定义开关ls初始状态为SET。开关重定义语句应置于clear语句之后使用,clear语句使所有开关状态设置为RESET。,7.9 loop、gate和buffer模块,loop、gate和buffer模块都属于操作模块。7.9.1 loop模块1.产生动态实体的循环 在模型中可以使用assign和test模块的配合来产生动态实体的局部循环流动,例如,1 generate(0,0,0,1);2 assign

46、(2,5);3 A(next);seize(barber);4 advance(5);5 release(barber);6 assignMinus(2,1);7 test(E,P$(2),0,next);8 terminate();,7.9 loop、gate和buffer模块,2.使用loop模块产生循环(1)作用 动态实体进入该模块时,处理程序会将该动态实体的某号整型参数的值减少1,然后检验该整型参数的值是否为0,若为0,则该动态实体流入紧后模块,否则转入具有指定标号的模块。(2)操作符、操作数与模块图loop(int a,Addr b)a:整型,代表动态实体的某整型参数的编号,不能缺省

47、b:标号对象,代表循环时要转入的模块的标号对象,7.9 loop、gate和buffer模块,例如,的程序片段的循环可以使用loop模块来实现:1 generate(0,0,0,1);2 assign(2,5);3 A(next);seize(barber);4 advance(5);5 release(barber);6 loop(2,next);7 terminate();可见使用loop模块实现循环更为简单和明了。,7.9.2 gate模块,gate模块具有转移和拒绝两种模式。1.作用 根据模块辅助操作符指定的操作数a代表的资源实体状态存在与否,决定动态实体是进入该模块,还是转移至某指定

48、模块。如果辅助操作符指定的状态存在,则动态实体流入该模块,否则转入c操作数指示的模块。2.操作符、操作数与模块图gate(intx,Objecta,Addrb)a:或逻辑开关或设备或存储器对象或标号对象,不能缺省b:标号对象,若辅助操作符所定义的状态不存在,动态实体所转入的模块的标号对象,不能缺省x:辅助操作符,代表操作数 a 表示的资源实体的当前状态,若此状态存在则返回真,否则返回假,有效的辅助操作符及其意义如下:,7.9.2 gate模块,x:辅助操作符,代表操作数 a 表示的资源实体的当前状态,若此状态存在则返回真,否则返回假,有效的辅助操作符及其意义如下:辅助操作符 代表的实体的当前状

49、态 LS 逻辑开关为SET LR 逻辑开关为RESET U 设备正被占用 NU 设备未被占用 I 设备当前被抢占 NI 设备当前未被抢占 SF 存储器剩余容量为0 SNF 存储器剩余容量大于0 SE 存储器空 SNE 存储器未空其中,设备被抢占或未被抢占的状态将在第8章讨论。例如:gate(NU,barber,bybye);gate(NU,barber);,7.9.3 buffer模块,1.作用 动态实体进入该模块,立即停止运动,标记其属性:当前所在模块编号为该buffer模块编号,下一流入的模块编号为紧后模块编号,然后将其放回当前事件链。如果在停止前未流经priority模块,则该动态实体放

50、回原来位置,如果流经 priority 模块而未改变优先权,则被插入当前事件链的原优先权组作为其最后一员,否则被插入新的优先权组作为最后一员。处理程序立即从其链头开始重新扫描当前事件链,当扫描至该动态实体时,将其移入该buffer模块的紧后模块。2.操作符、操作数与模块图buffer模块没有操作数。buffer 能引起当前事件链重新扫描的条件发生,但它与release等模块有所不同。重新扫描后,暂停在buffer模块(实际在CEC)中的动态实体又开始了移动。暂停和重新扫描当前事件链是因为在此模型位置上的此刻有其它事件要先于处理。,7.9.4 应用举例(一),1.问题陈述 有一小图书馆,借书人平

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号