Моделирование с использованием очереди

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)
  • 0
    Вы сосредоточены на создании функционального моделирования или на создании объекта очереди? Если это первое, вы можете создать очередь довольно просто, используя повторение arrival_time = arrival_time + expovariate(arrival_rate) , begin_service = max(end_service, arrival_time) и end_service = begin_service + expovariate(service_rate) . Инициализируйте arrival_time и end_service 0, вставьте три обновления состояния в цикл, и вы получите модель очередей M / M / 1!
  • 0
    @pjs моя задача - сделать функциональное моделирование с использованием очереди.
Показать ещё 1 комментарий
Теги:
python-2.7
simulation
queue
exponential-distribution

1 ответ

0

Я думаю, что Queue также должна знать, когда последний студент вошел в офис и когда (а) он должен уйти, кроме числа учеников в строке, и когда следующий будет впереди. Более того, я бы не думал о "глобальном времени" как о первичной величине, вместо этого мой алгоритм был бы примерно следующим.

Вы всегда должны рассчитать, что будет дальше:

  1. Новый студент до конца очереди? Затем вычислите, когда следующий ученик (после него) прибудет в очередь.
  2. Студент выходил из офиса? Затем проверьте: есть ли еще еще один ученик в очереди?
    • если да: вычислить, когда он покинет офис.
    • если нет: вычислить, когда придет следующий ученик, когда он автоматически будет принят в офис, поэтому подсчитайте также, когда он покинет офис и когда придет следующий ученик.
  3. Вернитесь, чтобы посмотреть, что будет дальше.

И, как я уже сказал, "глобальное время" - это просто производная величина, которую всегда легко вычислить (обновить) для каждого действия.

  • 0
    Это имеет смысл, но я не знаю, как внедрить это в очередь и затем рассчитать эту статистику.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню