Для чего предназначен мой код:
Имитация 100 голосовых вызовов, которые происходят по сети N каналов, и расчет уровня обслуживания (то есть процент заблокированных вызовов)в течение 60 минут.
Мой код:
import numpy as np
import pandas as pd
#Uniformly distributed start times
startTimes = np.random.randint(0,60,100)
startTimes.sort()
#Average call time for 100 people
callDuration = np.random.poisson(20, 100)
channelCounter = 0;
blockedCounter = 0;
endTimes = np.add(callDuration, startTimes)
numberChannels = 1
for x in range(0,60):
for y in range(0, startTimes.size):
if startTimes[y] == x:
if channelCounter < numberChannels:
channelCounter=channelCounter+1
elif channelCounter == numberChannels:
blockedCounter = blockedCounter + 1
if (endTimes[y] == x):
if channelCounter >= 1:
channelCounter=channelCounter-1
Мой подход:
Я генерирую равномерное распределение в 100 времен начала звонка, начинаяот 0 до 60 минут.
Я генерирую случайное распределение Пуассона 100 длительностей вызовов для среднего времени вызова 20 минут.
Я установил переменную моего счетчика канала и заблокированные переменные счетчика на 0.
Наконец, я создаю другой массив, состоящий из суммы времени начала вызова + средней продолжительности вызова, чтобы получить время окончания вызова.
Логика псевдокода за приращением заблокированного счетчика выглядит следующим образом:
if number of channels occupied < number channels available:
put a call through
else if number of channels occupied == number channels available ( ie full):
call is dropped so counter incremements
if a call that is ongoing finishes:
decrement number of channels occupied
Мой заблокированный счетчик не увеличивается, как я ожидаю. У меня есть смутное представление о том, что идет не так, но я не знаю, как это исправить. С текущими значениями, которые я ввожу, я должен ожидать увидеть значение около 95 для заблокированного счетчика. Однако я получаю значение, которое колеблется около 70-75.
Если кто-нибудь заметит, где я ошибаюсь, я был бы очень признателен!
Снимок экрана с данными, с которыми я работаю