,该软件在实现了
GPSS/H功能的基础上,又做了两点改进:一是把面向对象的思想引入到系统建模的过程中;二是实现了GPSS语言与JAVA语言的融合.也就是说GPSS/JAVA在保持了传统GPSS语法特点的基础上,允许与JAVA语言混合编程,从而用户可以自行控制输入和输出,以及为解决特殊问题而加入实现复杂算法的JAVA类或方法,用户也可以在此基础上开发更加专门化的仿真系统,实现特定领域的需要.目前GPSS/JAVA单机版的开发和测试工作已经基本完成.为了
基于新版GPSS/JAVA的仿真模型如下:importgpssjv.*;//引入仿真软件包classBarberextendsBlock_op{//定义仿真模型类publicstaticvoidmain(Stringargs[]){Diaodud=newDiaodu(newBarber());//建立调度类对象dd.start(2,0,0);//设置模拟控制计数器初值为2,开始模拟}Queueq_barb=newQueue("Barber_QueueLine");//建立理发排队队列Facilityf_barb=newFacility("Barber_F");//建立理发师对象Storages_chair=newStorage("Chair",3);//建立凳子对象Addrbybye=newAddr();//建立地址标号对象publicvoidsimulate(){//实现抽象方法,建立模型switch(Common.block){case10:case20:case30:case40:case50:case60:case70:case80:case90:case110:case120:case130:}}从以上可见,基于新版GPSS/JAVA的仿真模型与旧版有以下不同(基于旧版的仿真模型请参阅参考文献[3]):1)系统结构的重新构建,新版GPSS/JAVA把原来的四个包整合到一个包中,用户只需在模型中引入gpssjv包即可.2)仿真模型不用实现gpss接口.新版GPSS/JAVA把原来位于gpss接口中的gpss_block方法改名为simulate,并作为抽象方定义在BlockOp类中.3)旧版GPSS/JAVA要求在那些可能会阻止动态实体向前移动的模块后面加上break语句,以便退出switch-case语句块.这样以来,有些模块需要加,有些模块不需要,很容易造成混乱.新版GPSS/JAVA去掉了这一限制,所有的模块语句都不用加break语句.新版GPSS/JAVA定义了一个异常(BreakException),动态实体一旦在模型中受阻,系统会自动抛出该异常,以跳出本次switch-case循环.通generate(10.0,2.0);//顾客到达transfer(both,bybye);//入座或离开s_chair.enter();//占用其中一个座位q_barb.queue();//排入等待队列f_barb.seize();//试图占用理发师q_barb.depart();//离开等待队列s_chair.leave();//释放座位advance(7.0,3.0);//接受理发服务f_barb.release();//释放理发师generate(1200.0);//间隔三天到达terminate(1);//使模拟控制计数器减1end();//模拟结束的标记
过在系统加入异常的捕捉机制,不仅使建模过程更加简单,而且使仿真模型更加清晰有条理.4)旧版GPSS/JAVA要求case语句的编号必须连续,一旦存在两个case语句的编号相同,系统就会发生致命错误.新版GPSS/JAVA规定case语句的编号可以不连续,这样,用户在修改和编辑模型的时候,可以很方便的在模型中添加和删除若干语句,只要保证case语句的编号没有重复即可.5)在新版GPSS/JAVA中,仿真模型的初始化分为两步进行.因为在初始化过程中,随机数发生器作为操作数,很可能会被非generate模块调用,这样会导致随机数流的不完整性.新版GPSS/JAVA把初始化分为两步进行,在第一次初始化之后重置所有随机数发生器的种子,第二次初始化仅顺序执行generate模块二次初始化部分的代码,这样就能保证每轮模拟都能得到与其他GPSS系统完全一致的随机数流.6)增加了异常捕捉机制.新版GPSS/JAVA定义了数量众多的异常类,可以大大增强仿真模型的健壮性7)地址标号的对象化.在本节的例子中,顾客到达理发店,如果发现三个凳子上全坐满了人,会直接转到terminate模块,离开理发馆.在旧版GPSS/JAVA中用transfer(both,10)表示,其中10代表case编号为10的语句,即terminate语句.这样就给系统带来很大的隐患,一旦修改了模型,terminate模块的编号不等于10,就必须修改transfer语句.在新版GPSS/JAVA中,首先定义一个地址对象bybye,然后通过A(bybye)方法自动取得terminate模块所在行的case编号,组后通过transfer(both,bybye)自动跳转到到terminate语句.8)增加了若干功能模块.如与装配集相关的模块:split,assemble,match,gather;与抢占相关的模块:preempt,return;与用户链相关的模块:link,unlink.新版GPSS/JAVA的详情请参阅参考文献[1].
case100:A(bybye);terminate();//离开理发店
3网络版GPSS/JAVA的系统结构
GPSS/JAVA由动态实体(相当于排队论中的顾客),资源实体(相当于排队论中的服务员)和系统调度三部分组成,其中系统调度是仿真系统的核心.C/S结构的GPSS/JAVA把与系统调度相关的核心
程序放在服务器上,然后把其余的程序封装