排队系统的离散事件模拟-示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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个顾客的到达时间

相关文档
最新文档