Skip to content

Instantly share code, notes, and snippets.

@GeniusDP
Last active June 12, 2022 13:47
Show Gist options
  • Save GeniusDP/f19cb0f764ca3d5d0f9409cb94f5f8e9 to your computer and use it in GitHub Desktop.
Save GeniusDP/f19cb0f764ca3d5d0f9409cb94f5f8e9 to your computer and use it in GitHub Desktop.
from math import factorial
# --------------------------------------------------------------------------------------
#######################################
# Итак, меняем тут на свои значения и усё:)
#######################################
#######################################
# Параметры первого задания
# n_1 = 1 всегда, так как СМО одноканальная.
m_1 = 4 # длина очереди
Lambda_1 = 3. # интенсивность входящего потока
Miu_1 = 5. # интенсивность выходящего потока
#######################################
# Параметры второго задания
n_2 = 3 # число каналов
m_2 = 4 # длина очереди
Lambda_2 = 2. # мат. ожидание числа входящих заявк в систему за одиницу времени
Miu_2 = 4. # мат. ожидание числа обрабатываемых заявок за одиницу времени
# --------------------------------------------------------------------------------------
def PROBLEM_3_PART_1(m, Lambda, Miu):
def get_p_array(m, ro):
P0 = (1 - ro) / (1 - ro ** (m + 2))
p_array = [P0]
for i in range(1, m + 2):
p_array.append(p_array[i - 1] * ro)
return p_array
# solving
ro = Lambda / Miu
print('Интенсивность нагрузки СМО ro = ', ro)
p_array = get_p_array(m, ro)
print('Предельные вероятности P[i], 0<=i<=n+m:')
for i in range(0, m + 2):
print('p[', i, '] = ', p_array[i])
Potk = ro ** (m + 1) * p_array[0] # да, равно последнему p, что и логично
print('Вероятность отказа системы Potk = ', Potk)
Q = 1. - Potk
print('Относительная пропускная способность Q = ', Q)
A = Lambda * Q
print('Абсолютная пропускная способность A = ', A)
L_ob = 1 - p_array[0]
print('Среднее число/мат.ожидание заявок находящихся на обслуживании за ед. времени = ', L_ob)
L_och = MR = ro ** 2 * (1 - ro ** m * (m + 1 - m * ro)) / (1 - ro) / (1 - ro ** (m + 2))
print('Мат.ожидание длины очереди MR = ', MR)
MT = ro * (1 - ro ** m * (m + 1 - m * ro)) / (Miu * (1 - ro) * (1 - ro ** (m - 1)))
print('Мат.ожидание времени пребывания заявки в очереди MT = ', MT)
pass
# Протестировано сначала вручную, потом кодом. Сошлось.
def PROBLEM_3_PART_2(n, m, Lambda, Miu):
def get_p_array(n, m, ro):
znam = 0.
for i in range(0, n):
znam += ro ** i / factorial(i)
sub_znam = 0.
for i in range(0, m + 1):
sub_znam += (ro ** i) / (n ** i)
znam += (ro ** n / factorial(n)) * sub_znam
P0 = 1. / znam
p_array = [P0]
for i in range(1, n + m + 1):
if (i <= n):
p_array.append(p_array[i - 1] / i * ro)
else:
p_array.append(p_array[i - 1] / n * ro)
return p_array
# solving
ro = Lambda / Miu
print('Интенсивность нагрузки СМО ro = ', ro)
p_array = get_p_array(n, m, ro)
print('Предельные вероятности P[i], 0<=i<=n+m:')
for i in range(0, n + m + 1):
print('p[', i, '] = ', p_array[i])
Potk = p_array[n + m] # да, равно последнему p, что и логично
print('Вероятность отказа системы Potk = ', Potk)
Q = 1. - Potk
print('Относительная пропускная способность Q = ', Q)
A = Lambda * Q
print('Абсолютная пропускная способность A = ', A)
MZ = A / Miu
print('Среднее число/матожидание количества занятых каналов MZ = ', MZ)
MR = L_och = (ro ** (n + 1) * p_array[0] * (1 - (m + 1 - m * ro / n) * ((ro / n) ** m))) / (
n * factorial(n) * ((1 - ro / n) ** 2))
print('Среднее число/мат. ожидание длины очереди L_och(MR у Павлова) = ', MR)
L_obsluzh = ro * (1 - (ro ** (n + m)) / ((n ** m) * factorial(n)) * p_array[0])
print('Среднее число занятых каналов L_obsluzh = ', L_obsluzh)
curr_sum = 0
for i in range(m):
curr_sum += (i+1)*( (ro/n)**i )
MT = 1/(n*Miu)*p_array[n]*( curr_sum )
print('Мат.ожидание времени пребывания заявки в очереди MT = ', MT)
L_sist = MR + L_obsluzh
print('Мат.ожидание количества заявок в системе всего = ', L_sist)
pass
# MAIN
PROBLEM_3_PART_1(m_1, Lambda_1, Miu_1)
print('******************************************************************************************************')
PROBLEM_3_PART_2(n_2, m_2, Lambda_2, Miu_2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment