第6章 中级GPSSWorld 程序设计 本章主要内容: 6.1 一家电修理部模型的建立及其模拟 6.2 中级 GPSSWorld 语言模块 6.1 一家电修理部模型的建立及其模拟 6.2 中级 GPSSWorld 语言模块 6.2.1 LOGIC 逻辑开关 6.2.2 INITIAL 初始化语句 6.2.3 GATE 测试模块 6.2.4 TEST 比较测试模块 6.2.5 SAVEVALUE 保存值模块 6.2.6 LOOP 循环模块 6.3 中级 GPSSWorld 语言程序举例 中级 GPSSWorld
第6章 中级GPSSWorld 程序设计 6-1 一家电修理部模型的建立及其模拟 已知一家电修理部, 除管理人员外, 有一名普通修理工干各种另活,以及二个有经验的专家负责较难的工作. 普通修理工能完成 70% 的修理工作, 其余 30% 难一些的工作由专家完成. 修理部原始记录表明: 1. 顾客到达间隔时间为 11 (5) 分钟, 均匀分布. 2. 不用专家服务顾客的服务时间为 13 (5) 分钟, 均匀分布. 3. 需要专家服务的顾客应先由普通修理工修 4 (2) 分钟, (均 匀分布) 再由专家修 62 (20) 分钟, 均匀分布. 4. 模拟60000分钟。
求解 模型的建立 6-1 一家电修理部模型的建立及其模拟 A.普通修理工及专家的平均利用率 B. 普通修理工及专家队列的平均等待时间 C. 普通修理工及专家队列的平均队长 D. 普通修理工修理一件设备的平均时间 模型的建立 1. 设施 普通修理工 HANDYM 2. 存储器 二名专家 SPCLST 3. 队列 A. 普通修理工队列 GENQ B. 专家队列 SPECQ 4. 模拟模拟60000分钟
模型示意图 6-1 一家电修理部模型的建立及其模拟 70% 到达 离开 30% 专家 普通修理工 需要专家修理的设备 GENQ SPECQ HANDYM SPCLST 离开 需要专家修理的设备 需要普通修理工修理的设备
模型程序 6-1 一家电修理部模型的建立及其模拟 SPEC SEIZE HANDYM DEPART GENQ ADVANCE 4, 2 RELEASE HANDYM QUEUE SPECQ ENTER SPCLST, 1 DEPART SPECQ ADVANCE 62, 20 LEAVE SPCLST, 1 DONE TERMINATE 1 SPCLST STORAGE 2 GENERATE 11, 5 QUEUE GENQ TRANSFER .7, SPEC, HANDY HANDY SEIZE HANDYM DEPART GENQ ADVANCE 13, 5 RELEASE HANDYM TRANSFER , DONE
模拟输出结果 6-1 一家电修理部模型的建立及其模拟 FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY HANDYM 5456 0.937 10.301 1 5457 0 0 0 0 QUEUE MAX CONT. ENTRY ENTRY(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY GENQ 9 0 5456 864 1.597 17.559 20.863 0 SPECQ 13 4 1628 393 1.600 58.953 77.713 0 STORAGE CAP. REM. MIN. MAX. ENTRIES AVL. AVE.C. UTIL. RETRY DELAY SPCLST 2 0 0 2 1624 1 1.671 0.835 0 4
模拟结果: 6-1 一家电修理部模型的建立及其模拟 A.普通修理工的平均利用率 0.937 B. 专家的平均利用率 0.835 C. 普通修理工队列的平均等待时间 17.559 D. 专家队列的平均等待时间 58.959 E. 普通修理工队列的平均队长 1.597 F. 专家队列的平均队长 1.600 G. 普通修理工修理一件设备的平均时间 10.301
第6章 中级 GPSSWorld 程序设计 6-2 中级GPSSWorld 语言模块 6.2.1. LOGIC 逻辑开关的设置 对于系统中具有二态性质的设施或设备可用逻辑开关 表示。逻辑开关为 1 时表示合,逻辑开关为 0 时,表示断。 逻辑开关的置位或变位由 LOGIC 模块完成。 LOGIC 模块的基本结构为: LOGIC 辅助码 A 其中: 辅助码表示逻辑开关的置位情况,A 表示逻辑开关变量名 R 表示逻辑开关变量置 0 S 表示逻辑开关变量置 1 I 表示逻辑开关变量反转
6-2 中级GPSSWorld 语言模块 例: LOGIC S LOGIC2 将逻辑开关 变量LOGIC2 置 1 LOGIC R LOG3 将逻辑开关 变量LOG3 置 0 LOGIC I PowerSwitch 将逻辑开关 变量PowerSwitch反转
6.2.2 SAVEVALUE 保存值模块 6-2 中级GPSSWorld 语言模块 SAVEVALUE A, B SAVEVALUE 模块可将任一个值 (包括 SNA) 存放在指定变是名中, SAVEVALUE 模块的格式: SAVEVALUE A, B 其中: A ---- 保存值的地址号及 +, - 号, +, - 号表示要在原 值上增加或减少的要求 B ---- 要存放的值或 SNA 码
SAVEVALUE The_Bard,“Arose by any other name …“ 6-2 中级GPSSWorld 语言模块 例: SAVEVALUE Account,99.95 SAVEVALUE The_Bard,“Arose by any other name …“ SAVEVALUE Account+,88.5 SAVEVALUE Account-,55.4
6-2 中级GPSSWorld 语言模块 6.2.3 INITIAL 初始化语句 基本格式如下: A:矩阵, 逻辑,保存值或矩阵的一个元素。 INITIAL A,B A:矩阵, 逻辑,保存值或矩阵的一个元素。 B: 必须是Null(空), Number(数字), String(字符串), Name(变量名), 或者UNSPECIFIED(未定义)之一。 例如: INITIAL X$Power_X, 100.98 INITIAL X$Note_X, “Note Message!” INITIAL MX$MyMartix(3,6), 33.5 INITIAL LS$L_Power, 1 ;将逻辑开关实体L_Power的初值设为1.
6-2 中级GPSSWorld 语言模块 6.2.4 GATE 实体状态的测试模块 GATE 模块是用来测试各类实体的当前状态的。其格式 如下: GATE 辅助码 A, B 其中: 辅助码 表示实体类型及状态,如: NU 表示设施没有处于使用状态 U 表示设施在使用状态 SE 表示存储器空状态 SF 表示存储器满状态
6-2 中级GPSSWorld 语言模块 SNE 表示存储器不空状态 SNF 表示存储器不满状态 LR 表示逻辑开关处于 0 状态 LS 表示逻辑开关处于 1 状态 …… 等等 A 要测试的实体变量名 B 当测试结果为假时流动实体应去的模块标号 例: GATE SE Storege2 测试Storege2号存储器是否空 ? GATE NU F_1, CON 测试 f_1设施 是否在空闲?若不空则去 CON 语句
6.2.5 TEST 比较测试模块 6-2 中级GPSSWorld 语言模块 通过测试来比较二个标准数字属性码 SNA 的大小. 格式: TEST 辅助码 A, B, C 其中: 辅助码有: E 相等 NE 不相等 L 小于 LE 小于或等于 G 大于 GE 大于或等于
A , B 二个相比较的 变量名或SNA以及表达式 C 比较结果为假时动态实体所要进入 的模块号 6-2 中级GPSSWorld 语言模块 A , B 二个相比较的 变量名或SNA以及表达式 C 比较结果为假时动态实体所要进入 的模块号 例: TEST GE P$MY_1, 2, D1 TEST LE Q$q_1, P$MY_2, ABC TEST L FN$FUN_1, P$MY_3, DONE 注意: 在Windows版本中下划线 _已取消,不再需要
6-2 中级GPSSWorld 语言模块 6.2.6 LOOP 循环模块 循环是各类程序编制中所不可缺少的。GPSSWorld 语 言的循环过程是由LOOP模块完成的。GPSSWorld 语言的循 环过程是由计数和转向二个动作完成,它总是先确定循环 次数,并将循环次数存在活动实体的某个参数中,然后当 活动实体进入LOOP模块后,就开始了循环的进程,因此对 于不同的活动实体,在同一个循环中的循环次数有可能是 不相同的。循环模块LOOP的基本格式是: LOOP A, B 其中: A 控制循环次数的参数号。 B 当 A 场参数的值大于零时,活动实体应转去的语句标号,同时将A的值减去 1。
6-2 中级GPSSWorld 语言模块 举例: GENERATE 10 ASSIGN par_1,5 设定循环次数par_1 L_P ASSIGN par_2,P$par_1 ;循环开始 LOOP par_1,L_P ;循环计数 TERMINATE 1
6.3 中级 GPSSWorld 语言程序举例 例 6.2 假设有一个募捐站点接受各类民众的现金募捐。在募捐的人中大约有50%的人捐10元,有30%的人捐50元,有20%的人捐100元,请通过模拟实验来统计以上各类人的捐款数及总捐款数。(到达的人平均间隔5分钟) FUN1 FUNCTION RN3,D3 0.5,10/0.8,50/1,100 FUN2 FUNCTION P$vx_1,E3 10,PAR_1/50,PAR_2/100,PAR_3 INITIAL X$PAR_1,0 INITIAL X$PAR_2,0 INITIAL X$PAR_3,0 INITIAL X$ACC_MONEY,0 GENERATE 5 ASSIGN vx_1,FN$FUN1 SAVEVALUE FN$FUN2+,P$vx_1 SAVEVALUE ACC_MONEY+,P$vx_1 TERMINATE 1
6.3 中级 GPSSWorld 语言程序举例 上面的程序模拟了100个捐款人,有关保存值部分的标准输出如下: SAVEVALUE RETRY VALUE PAR_1 0 620.000 ( 10元的捐款总数 ) PAR_2 0 1550.000 ( 50元的捐款总数 ) PAR_3 0 2600.000 ( 100元的捐款总数 ) ACC_MONEY 0 4770.000 ( 全部捐款总数 ) CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE 121 0 600.000 121 0 1 FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE 122 0 1200.000 122 0 6 从输出中可见,一类捐款人为62人,捐款620元; 二类捐款人为31人,捐款1550元; 三类捐款人为26人,捐款2600元; 合计119人总捐款4770元。
6.3 中级 GPSSWorld 语言程序举例 例 6.3 一单理发师的理发店,顾客到达时间为 18(6),理发时间 例 6.3 一单理发师的理发店,顾客到达时间为 18(6),理发时间 为 16(4),理发店营业 8 小时关门,但关门之前进入的顾客 要理完发才走。 提示: 1. 设置一逻辑开关,控制关门 及顾客的进入 2. 理发店不许顾客进入后,测 试已进入的顾客是否都理发 完毕?都完后关门。
6.3 中级 GPSSWorld 语言程序举例 GENERATE 18,6 GATE LR LOG_1 ; 测试 LOG_1 号逻辑开关是否关闭 TRAN QUEUE L_1 ; 若已关则不再进人 SEIZE F_1 DEPART L_1 ADVANCE 16,4 DONE RELEASE F_1 TERMINATE GENERATE 480 ; 理发店营业 8 小时 LOGIC S LOG_1 ; 使 1 号逻辑开关关闭 TEST E N$TRAN,N$DONE ;测试最后关门条件 TERMINATE 1 ;所有顾客理发完毕,关门
理发店模型输出结果 RELATIVE CLOCK 493 ABSOLUTE CLOCK 493 FACILITY AVERAGE NUMBER AVERAGE SEIZING PREEMPTING UTILIZATION ENTRIES TIME/TRAN TRANS.NO. TRANS.NO. 1 0.88 27 16.11 LOGIC SWITCH - SET (ON) STATUS SWITCH NAME NAME NAME NAME NAME NAME NAME NAME NAME 1 QUEUE MAXIMUM AVERAGE TOTAL ZERO PERC. AVERAGE $AVERAGE TABLE CURRENT CONTENT CONTENT ENTRIES ENTRIES ZERO TIME/TR TIME/TR NUMBR CONTENT 1 2 0.33 27 10 37.04 6.11 9.71 0
6.3 中级 GPSSWorld 语言程序举例 例 6.4 一露天矿模拟模型 例 6.4 一露天矿模拟模型 已知一露天矿剥离和采煤分别由二台电铲来完成。 一台以 4 (2) 分钟间隔时间装满一车矿石, 另一台以 5 (2) 分钟间隔时间装满一车煤,卡车各运行 15 分钟后分别卸入矿石场和储煤仓, 卸矿时间为 8分钟, 矿石场和储煤仓的容量分别为 20000 吨及 2000 吨, 矿石卡车载重量为 35 吨, 而运煤卡车载重量为 18 吨。 模拟这一过程, 并记录矿石和煤的产量。 模型: 动态实体 ---- 运矿石卡车和运煤卡车 存储器 ----- S_1 号 矿石场 S_2 号 储煤仓 保存值 ------ V_1 号 产煤量 V_2 号 矿石剥离量
模型示意图 4/2 35 吨 5/2 储矿场 18 吨 15 20000 储煤仓 2000
例 6.4 一露天矿模拟模型 本例题用三个方式编程: 1. 详细方法 即每一步都表示清楚 (程序 A) 例 6.4 一露天矿模拟模型 本例题用三个方式编程: 1. 详细方法 即每一步都表示清楚 (程序 A) 2. 使用流动实体的参数 (程序 B) 3. 使用 SNA 码简化程序 (程序 C)
一般方法 (程序A) S_1 STORAGE 2000 S_2 STORAGE 20000 GENERATE 5,2 ;装煤 ADVANCE 15 ENTER S_1,18 ADVANCE 8 ;卸煤 SAVEVALUE V_1+,18 ;统计煤产量 LEAVE S_1,0 TERMINATE GENERATE 4,2 ;装矿石 ENTER S_2,35 ADVANCE 8 ;卸矿石 SAVEVALUE V_2+,35 ;统计矿石产量 LEAVE S_2,0 GENERATE 480 TERMINATE 1
使用参数 (B) 将代号或码用 SNA 表示. V_1参数表示煤或矿石车,V_2号参数表示载重量,V_3表示T_1或T_2存储值。 S_1 STORAGE 2000 S_2 STORAGE 20000 INITIAL X$T_1,0 INITIAL X$T_2,0 GENERATE 5,2 ;装煤 ASSIGN V_1,S_1 ;S_1表示目的仓库 ASSIGN V_2,18 ASSIGN V_3,T_1 ADVANCE 15 ENTER P$V_1,P$V_2 SAVEVALUE P$V_3+,P$V_2 ;统计煤产量 ADVANCE 8 ;卸煤 LEAVE P$V_1,0 TERMINATE GENERATE 4,2 ;装矿石 ASSIGN V_1,S_2 ASSIGN V_2,35 ASSIGN V_3,T_2 ENTER P$V_1,(P$V_2) SAVEVALUE P$V_3+,P$V_2 ;统计矿石产量 ADVANCE 8 ;卸矿石 GENERATE 480 TERMINATE 1
利用 SNA 码将相同程序段合并可简化程序: 利用 SNA 码 (C) S_1 STORAGE 2000 S_2 STORAGE 20000 INITIAL X$T_1,0 INITIAL X$T_2,0 GENERATE 5,2 ;装煤 ASSIGN V_1,S_1 ASSIGN V_2,18 ASSIGN V_3,T_1 TRANSFER ,NEXT_C GENERATE 4,2 ;装矿石 ASSIGN V_1,S_2 ASSIGN V_2,35 ASSIGN V_3,T_2 NEXT_C ADVANCE 15 ENTER P$V_1,(P$V_2) SAVEVALUE P$V_3+,P$V_2 ;统计矿石产量 ADVANCE 8 ;卸矿石 LEAVE P$V_1,0 TERMINATE GENERATE 480 TERMINATE 1
6.3 中级 GPSSWorld 语言程序举例 例6.5 一零件加工过程的模拟 有一零件加工车间,主要是进行零件的钻孔工作。零件的到达间隔时间为10±3分钟,但零件在进入车间后应先进行打毛刺F_1等光滑处理,然后在进行画线F_2工作,最后才能钻孔F_3。上述每道工序都可能进行排队,我们分别用L_1、L_2、L_3表示这3个队列。为了简单起见,我们仍假设所有的过程都呈均匀分布,其均值和方差分别为: 打毛刺等光滑处理 10±2 分钟 画线 9±3 分钟 钻孔 8±1 分钟
初步结构6_5A GENERATE 10,3 ;零件到达 QUEUE L_1 ;排队打毛刺等光滑处理 SEIZE F_1 DEPART L_1 ADVANCE 10,2 RELEASE F_1 QUEUE L_2 ;排队画线 SEIZE F_2 DEPART L_2 ADVANCE 9,3 RELEASE F_2 QUEUE L_3 ;排队钻孔 SEIZE F_3 DEPART L_3 ADVANCE 8,1 RELEASE F_3 TERMINATE 1
使用系统数字属性码简化程序 MEAN FUNCTION P$S_T,D3 ;服务间隔时间均值,,S_T为工序代码 1,10/2,9/3,8 DEF FUNCTION P$S_T,D3 ;服务间隔时间方差,,S_T为工序代码 1,2/2,3/3,1 W_Q FUNCTION P$S_T,E3 1,L_1/2,L_2/3,L_3 W_F FUNCTION P$S_T,E3 1,F_1/2,F_2/3,F_3 GENERATE 10,3 ASSIGN Loop_C,3 ;设循环次数 B_ACK ASSIGN S_T+,1 ;设置 P$S_T 为工序代号 QUEUE FN$W_Q SEIZE FN$W_F DEPART FN$W_Q ADVANCE FN$MEAN,FN$DEF RELEASE FN$W_F LOOP Loop_C,B_ACK ;循环判断 TERMINATE 1
课 后 练 习 1. 读懂上述例题 2. 上机练习及实验 3. 改动部分参数, 多次实验, 分析结果 4. 若煤仓或储矿场满了怎么办?