1

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

“学生每 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)
4

1 回答 1

0

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

你总是必须计算接下来会发生什么:

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

正如我所说,“全球时间”只是一个派生量,对于每个动作总是很容易计算(更新)。

于 2018-08-27T21:04:52.060 回答