排队系统的离散事件模拟-示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.4 M/M/1排队系统的模拟
这个排队系统的服务员为一人。顾客到达系统的间隔时间为平均值等于1分的指数分布随机变量。单位顾客服务时间为平均值等于0.5分的指数分布随机变量。单列排队,采取先进先出的规则,排队行列的最大容量为100。模拟的终止条件为有1000个顾客服务结束离开系统。
2.4.1 系统的实体、属性和事件
事件类型有顾客到达事件、服务开始事件以及服务结束事件。但是,服务开始事件一般与顾客到达事件或服务结束事件相互重合,所以决定有两类事件:
a. 第1类事件——顾客到达事件;
b. 第2类事件——顾客在服务结束后离开系统。
2.4.2 系统模拟程序
为了进行模拟,除了主程序外,还编制了一系列的子程序或函数,它们的功能如表1.2.3所示。
表1.2.3 排队服务系统模拟的子程序和函数
表1.2.4列举模型的变量的名称和定义。
表1.2.4 本模型的变量
图1.2.8是本模拟模型的主程序,它的主要功能如下:
MAIN PROGRAM
NEVNTS = 2 //事件类型
READ 10, MARRVT, MSERVT //到达间隔时间为1,服务时间为0.5
10 FORMA T(2F10.0)
READ 20, TOTCUS //结束服务顾客总数1000
20 FORMA T(I 10)
CALL INIT
30 CALL TIMING
GO TO (40, 50), NEXT //NEXT = 1, GO TO 40; NEXT = 2, GO TO 50 40 CALL ARRIVE
GO TO 60
50 CALL DEPART
60 IF(NUMCUS .LT. TOTCUS) GO TO 30
CALL REPORT
STOP
END
图1.2.8 排队服务系统模拟的主程序
SUBROUTINE INIT
TIME = 0.0
STATUS = 0.0 //服务员状态
NIQ = 0 //系统中的停留人数
TLEVNT = 0.0 //上次事件时间
NUMCUS = 0 //已结束服务的顾客数
TOTDEL = 0.0 //顾客停留时间总和
ANIQ = 0.0 //系统中人数的时间积分值
TNE(1)= TIME + EXPON(MARRVT) // TNE(1)为事件1的发生时间,设置模拟
的首次事件时间
TNE(2)= 1.E + 30
RETURN
END
图1.2.9 INIT子程序
SUBROUTINE TIMING
RMIN = 1.E + 29 //最近事件的时间
NEXT = 0 //下一事件类型
DO 10 I = 1, NEVNTS // NEVNTS在主程序中定义为2
IF(TNE(I).GE.RMIN) GO TO 10 //第1次运行时,RMIN=TNE(1),I=1
RMIN = TNE(I)
NEXT = I
10 CONTINUE
IF(NEXT .GT. 0) GO TO 30
PRINT 20
20 FORMA T(1H1, 5X, ‘EVENT LIST EMPTY’)
STOP
30 TIME = TNE(NEXT) //当前模拟时钟推移到最近事件时间
RETURN
END
图1.2.10 定时子程序
ARRIVE子程序是处理第1类事件即顾客到达事件的子程序。图1.2.11表示了这个子程序的流程图。图1.2.12是ARRIVE子程序的源程序。
图1.2.11 ARRIVE子程序流程图
SUBROUTINE ARRIVE
TNE(1) = TIME + EXPON(MARRVT) //安排下一个到达事件时间
IF(STATUS .EQ. 1) GO TO 10 //如果服务员忙,则转到10,去排队
DELAY = 0.0 //顾客排队等待时间
NUMCUS = NUMCUS + 1 //已结束服务的顾客数
STATUS = 1 //使服务员变忙
TNE(2) = TIME + EXPON(MSERVT) //安排离去时间
TOTDEL = TOTDEL+ TNE(2) //已结束服务的所有顾客的停留时间
RETURN
10 ANIQ = ANIQ + NIQ*(TIME - TLEVNT) //系统中排队数目的时间积分值,TLEVNT为
上次事件的时间,本式为
q,时间持续变量
TLEVNT = TIME
NIQ = NIQ + 1 //排队等待的顾客数目
IF(NIQ .LT. 100) GO TO 30
PRINT 20
20 FORMA T(1H1, 5X, ‘OVERFLOW OF THE ARRAY TARRVL’)
STOP
30TARRVL(NIQ) = TIME //排队等待的第NIQ个顾客的到达时间
RETURN
END
图1.2.12 ARRIVE子程序的源程序
DEPART子程序处理顾客服务结束离开系统事件,其流程图见图1.2.13。图1.2.14是它的源程序。
图1.2.13 DEPART子程序流程图
SUBROUTINE DEPART
IF (NIQ .GT. 0) GO TO 10 //NIQ为队列中的顾客数
STATUS = 0
TNE(2) = 1.E + 30
RETURN
10 ANIQ = ANIQ + NIQ*(TIME - TLEVNT) //系统中排队数目的时间积分值,TLEVNT
为上次事件的时间,本式为
q,时间持续变量
TLEVNT = TIME //上次事件的时间
NIQ =NIQ – 1 //排队数
DELAY = TIME – TARRVL(1) //DELAY为顾客排队等待时间,TARRVL(1)
为队列中第1个顾客的到达时间