编辑: 梦三石 | 2019-07-10 |
服务员的状态为 S(t),服务员 工作时令 S(t)=1,服务员空闲时令 S(t)=0.引起系 统状态改变的行为称为事件.在这里只有两类事件即 "顾客到达"事件和"顾客离开"事件. (1)顾客到达事件 E1.E1 的事件例程见图 3. (2)顾客离开事件 E2.E2 的事件例程见图 4. 记第 k 位顾客的到达时刻为 ak,离开时刻为 dk, 在前面我们提到时间间隔为 ik 和服务时间为 sk,则存 在递推公式: ak = ak-1 + ik dk = max (ak, dk-1) + sk,k=1,2,…(设a0=d0=0) ak,dk 分别是顾客到达和顾客离开事件的发生时 刻,系统状态只在这些时刻才有变化.所以在模拟系 统的运行过程中,可以设置时钟 t,让t依事件发生的 先后顺序,从一个事件的发生时刻跳到下一个事件的 发生时刻.这种模拟方式称下一事件时间推进法.
4 基于 Matlab 的仿真实现与结果 不妨设 t=0 是第
1 位顾客到达时刻,此时服务员 处于空闲状态.设第 n 位顾客离开系统的时刻为终止 时刻. 设当前时钟为 t,队长 L(t)记作 WL,服务员状态 S(t)记作 SS,t 以后下一个"顾客到达"事件的发生时 刻记作 AT,t 以后下一个"顾客离开"事件的发生时 刻记作 DT, 在每一个事件发生时, 都要设置 (或计算) 、 记录这
4 个量的数值.仿真程序流程如图
5 所示. 按照图
5 的流程,采用 Matlab 来仿真实现,其主 程序框架为 Function Main % 定义全局变量 INPUT;
%参数输入子程序 闲 预定下一到达事件 该顾客排队等待时间为
0 置服务员状态为忙 服务顾客数加
1 预定离开时间 排队人数加
1 保存该顾客到达时间 计算 ai 服务员忙? 进入 返回 忙否将下一离去时间置为无穷大 置服务员状态为闲 预定顾客离开时间 排队人数减
1 完成服务的顾客数加
1 计算 ai 队列空否? 进入 空 计算 di 返回 队列空否? 空否对队列重新排队 Figure 4. Customer leaving event flow char 图4. 顾客离开事件例程 Figure 3.Customer arrival event flow char 图3. 顾客到达事件例程 INIT;
%执行初始化过程 while(num_custs_delayed