Last active
June 12, 2022 13:47
-
-
Save GeniusDP/f19cb0f764ca3d5d0f9409cb94f5f8e9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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