使用队列模拟

时间:2018-08-27 20:28:18

标签: python python-2.7 queue simulation exponential-distribution

我正在尝试使用队列模拟以下简单场景:

“学生每隔10分钟就会按比例分配到教授办公室接受一次家庭作业的帮助。帮助学生的时间平均分配为7分钟。按比例分配给学生的期望人数是多少?以及得到帮助之前的平均等待时间?预计在教授办公室中将有两个以上的学生占百分之几的时间?”

我首先创建了以下队列,但是我正在努力创建全局时钟以及如何整合离开队列的学生。

import random as rd

class Queue(object):
    def __init__(self):
        self.officeHasStudent = False
        self.totalTime = 0
        self.numStudentsInLine = 0
    def studentArrives(self, time):
        self.totalTime += time
        if self.officeHasStudent == False:
            self.officeHasStudent = True
        else:
            self.numStudentsInLine += 1
    def __str__(self):
        temp = ''
        temp += 'Time Elapsed: ' + str(self.totalTime) + ' min\n'
        temp += 'number of students in line: ' + str(self.numStudentsInLine)
        return temp

Q = Queue()

for i in range(5):
    Q.studentArrives(rd.expovariate(1/10.0))

print(Q)

1 个答案:

答案 0 :(得分:0)

我猜Queue还必须知道最后一个学生何时进入办公室,何时排行以及何时下一个学生离开。此外,我不会将“全球时间”视为主要数量,相反,我的算法将类似于以下内容。

您始终必须计算接下来会发生什么:

  1. 新学生排到队列的尽头?然后计算下一个学生(在他/她之后)何时到达队列。
  2. 学生从办公室出来吗?然后检查:队列中是否还有学生在等待?
    • 如果是:计算他何时离开办公室。
    • 如果否:计算下一个学生何时到达,何时自动入学,因此也要计算他何时离开办公室以及下一个学生何时到达。
  3. 回去看看接下来会发生什么。

就像我说的那样,“全球时间”只是一个派生的数量,总是很容易为每个动作计算(更新)。