2' 'ư>HELPA\NhNN:l&CONTINUE n((`&EXIT&%p=lHALTމPl&`&dSTEP 1 4߉lg STOP߉X^F%EFSTOP ,,OFFg^w@߉UT߉WO gp߉.Od Cg|߉ C|ŻOdg CModelsSchr6b.gpsLFeCFEOiLi*iE(((((((((({\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fmodern Courier New;}} {\colortbl\red0\green0\blue0;} \deflang1033\pard\tx1200\tx2400\tx4450\plain\f2\fs20 * Adapted from "Simulation Using GPSS", by Thomas J. Schriber \par * Library Study \par * \par *Loc Operation A,B,C,D,E,F,G Comments \par * \par * Equivilence Definitions \par * \par Slip EQU 10 \par * \par * Storage Capacity Definitions \par * \par Busy STORAGE 3 ;Set storage capacity for 3-clerk \par * \par * Table Definitions \par * \par Delay TABLE M1,360,60,26 ;Time spent at checkout dest \par Slips TABLE X$CountA,1,1,5 ;Number of slips picked up \par * \par * Variable Definitions \par * \par Doubl BVARIABLE X$CountA'E'4+W$Wait'E'0 \par * \par * Model Segment 1 \par * \par GENERATE (Exponential(1,0,120)),,,,1 ;People arrive at \par ; checkout desk \par Wait ADVANCE ;Dummy advance block \par GATE LS Slip ;Wait until clerk has \par * opened 'slip-pickup' gate \par ASSIGN 1,X$Clerk ;Set P1 = clerk I.D. no. \par SAVEVALUE CountA+,1 ;Update count of slips clerk now h \par TEST E BV$Doubl,1,Bypas ;Is this clerk done picking up \par * slips? If not, bypass the next \par * block \par LOGIC R Slip ;Yes, close the 'slip-pickup' gate \par Bypas GATE LS P1 ;Wait until clerk has opened \par * 'checkout-finished' gate \par LOGIC R P1 ;Close 'checkout-finished' gate \par TABULATE Delay ;Record time spent at checkout des \par TERMINATE 1 ;Leave the checkout desk \par * \par * Model Segment 2 \par * \par Bloka GENERATE ,,,3 ;Provide 3 clerks \par ASSIGN 1,N$Bloka ;Set P1 = clerk I.D. no. \par Blokb TEST G W$Wait,0 ;Anyone waiting for slip-pickup? \par ENTER Busy ;Yes, enter busy status \par SAVEVALUE CountA,0 ;Zero out 'slips picked up' counte \par SAVEVALUE Clerk,P1 ;Communicate clerk I.D. no. to \par * people about to be served \par LOGIC S Slip ;Open slip-pickup gate \par BUFFER ;Restart scan to let people throug \par * the just-opened gate \par ASSIGN 2,X$CountA ;Set P2 = no. of slips picked up \par TABULATE Slips ;Record no. of slips picked up \par ADVANCE 60,30 ;Travel into the stacks \par ADVANCE (Normal(1,180#P2,36#P2)) ;Locate the books \par ADVANCE 60,30 ;Return from the stacks \par Blokc ADVANCE 120,60 ;Finish checking out next person \par LOGIC S P1 ;Open 'checkout-finished' gate \par BUFFER ;Restart scan to let this next \par * person through the just-opened gate \par LOOP 2,Blokc ;Loop back to finish checking out \par * next person (if any) \par LEAVE Busy ;Otherwise, clerk leaves busy stat \par TRANSFER ,Blokb ;Go start next service cycle \par \par \par }