日常生活中的各种配对问题,是队列应用的典型例子.以加油站为例,假设某加油站有两台有泵,每台油泵的加油时间为d分钟,若已知该站的到车率为g分钟一辆,则该加油站的工作情况可用以下列队模型描述.
定义一个循环队列,容量为M(足够大,不发生队列满的问题),用语组织等待加油的汽车序列.按照先到先加油的原则进行处理;整个模拟过车工内的时间为Time,每隔t分钟见空一次,获取并输出实际情况.
出事状态设为:队列为空(front=rear=M),每台油泵为空闲(pump(1)=pump(2)=0),油泵未服务过(auto(1)=auto(2)=-1).
整个问题可分为三部分:
1) 汽车排队:已知一分钟来一辆车的概率为1/g,则每隔t分钟来一辆车的概率为t/g.由于来车的问题是随机的,因此,实际处理时,每隔t分钟产生一个随机数rnd,若它小于等于t/g,则认定有一辆车进站,应将它加入队列中.
2) 油泵工作状态:用pump(i)表示第i(i=1,2)每抬油泵工作进程,用auto(i)表示第i台油泵的服务对象.则当第i台油泵开始为一辆车工作时,置pump9i0=d-t,以后每t分钟,令pump(i)=pump(i)-t.若pump(i)<0,说明第i台已完成加油工作,可以继续为下一辆车服务,因此,应从队列中取出一个元素继续处理;若队列为空,置pump(i)=0,表示空状态.
3) 监控结果输出:每隔t分钟输出一次汽车队列现状和每台油泵的工作状态.输出空闲状态.
- 当auto(i)>0时,若pump(i)>0表示油泵i正在为auto(i)加油;若pump(i)<0表示油泵i刚为auto(i)加完油;若pump(i)=0表示油泵i已经为auto(i)加完油.
- 当auto(i)= -1时,表示油泵i尚未工作过.