
lab4
.pdf

1)Цель работы
Нахождение экспериментальной зависимости T(λ, µ0) для элементарной системы массового обслуживания с бесконечным буфером.
Вариант 16
Во втором столбце записан закон распределения входного потока заявок, в третьем – закон распределения времени обслуживания заявок, в
четвёртом - µ0.
2)Ход работы
Записывается формула и строится график экспоненциальный,
используемый для распределения заявок на входе. Это представлено на рисунке 1.
Формула: f(x;λ)= λ*e-λx
Рисунок 1 – Плотность экспоненциального распределения Записывается формула и строится график равномерного
распределения, используемый для распределения времени обслуживания заявок на выходе. Это представлено на рисунке 2.
2

Формула: f(x) ={
Рисунок 2 – Плотность равномерного распределения Проводится моделирование работы СМО с буфером. Главным
критерием для вычисления является поиск среднего времени пребывания запроса в системе, которое вычисляется по формуле:
T =
Моделируется работы системы такой системы. Записывается зависимость среднего времени пребывания запроса от интенсивности входного потока. Это представлено на рисунке 3.
Рисунок 3 – Моделирование для экспериментальной зависимости
3

Таблица с подробными экспериментальными данными о среднем времени пребывания в системе представлена на рисунке 4.
Рисунок 4 - Данные о зависимости среднего времени пребывания запроса от интенсивности входного потока
В программе выполняются моделирования теоретическое и экспериментальное (при заданных по варианту данных). График сравнения зависимостей моделирований представлено на рисунке 3, при этом погрешность расхождений не превышает 1%. Код выполнения программы представлен в Приложении.
Рисунок 3 – Оценка результатов моделирования
3)Вывод
Входе данной лабораторной работы я познакомился с элементарной системой массового обслуживания с бесконечным буфером. В ходе моделирования теоретической и экспериментальной было выяснено, что при увеличении интенсивности входного потока среднее время пребывания в системе сильно увеличивается. Это связано с тем, что чем больше заявок в системе, тем больше они ожидают своей обработки, находясь в буфере.
Входе работы проблем не возникло.
4

Приложение
import sys
import numpy as np import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import uniform, expon
def __plot__(figure, arr_x, arr_y=None, title='', xlabel='', ylabel='', legend: str = None, color=''):
fig = plt.figure(figure)
ax = fig.add_axes((0.1, 0.1, 0.8, 0.8)) ax.spines['right'].set_color('none') ax.spines['top'].set_color('none')
if arr_y is None:
ax.plot(arr_x, label=legend, color=color) else:
ax.plot(arr_x, arr_y, label=legend, color=color) ax.grid()
ax.set_title(title) ax.set_ylabel(ylabel) ax.set_xlabel(xlabel) if legend is not None:
ax.legend()
def plot_expon_distribution(lambda_, figure):
# Определение границ графика:
temp = expon.rvs(scale= 1/lambda_, size=10000) x_min, x_max = min(temp), max(temp)
# Построение графика:
x = np.linspace(x_min, x_max, 1000) y = expon.pdf(x, scale=1/lambda_)
title = 'Плотность экспоненциального распределения распределения'
__plot__(figure, x, y, title, color='black')
def plot_uniform_distribution(a, b, figure):
# Определение границ интервала
5

x_min, x_max = a - 0.05, b + 0.05
# Построение графика
x = np.linspace(x_min, x_max, 10000) y = uniform.pdf(x, loc=a, scale=b-a)
title = 'Плотность равномерного распределения'
__plot__(figure, x, y, title=title, color='black')
def model_of_queuing_system(mu, l, is_test): a = 1 / mu - 0.05 * mu
b = a + 0.1 * mu
new_t_income = lambda: expon.rvs(scale=1 / l)
new_t_outcome = lambda: expon.rvs(scale= 1 / mu) if is_test else uniform.rvs(loc=a, scale=b-a)
# системное время ts = 0
# занятость ОУ busy = False
# момент поступления заявки t_in = new_t_income() t_ins = []
# момент освобождения ОУ t_out = t_in
t_outs = []
n, k, m = 0, 0, 0
t_mean_old = sys.float_info.max counter = 0
while True: counter += 1
# Проверяем наступило ли время освобождения ОУ if t_in <= t_out:
# Записываем в системное время момент поступления заявки ts = t_in
n += 1 # Увеличиваем счетчик поступивших заявок
# Сохраняем в список момент поступления заявки t_ins.append(t_in)
# Система обрабатывает сейчас заявку? if busy:
m += 1
6

else:
busy = True
t_out = ts + new_t_outcome()
# Вычисляем следующий момент поступления заявки t_in = ts + new_t_income()
else:
# Записываем в системное время момент освобождения ОУ ts = t_out
k += 1 # Увеличиваем счетчик обслуженных заявок
# Сохраняем в список момент освобождения ОУ t_outs.append(t_out)
# В буфере больше 0 заявок? if m > 0:
m -= 1
t_out = ts + new_t_outcome() else:
busy = False t_out = t_in
# Ошибка удовлетворительная? if counter % 1000 == 0:
t_mean_new = np.mean([t_outs[i] - t_ins[i] for i in range(len(t_outs))])
if abs((t_mean_new - t_mean_old) / t_mean_old) < 0.01: return t_mean_new
t_mean_old = t_mean_new
def experiment(mu, is_test, figure):
# Параметры для тестирования
lambdas = np.linspace(0.1, 1, 10) * mu T_theoretical = []
T_experimental = []
# Сбор практических данных for l in lambdas:
T_experimental.append(model_of_queuing_system(mu, l, is_test))
if is_test:
# Сбор теоретических данных for l in lambdas:
ro = l / mu
N_mean = ro / (1 - ro)
7

T_theoretical.append(N_mean / l)
# Построение теоретического графика plt.figure(figure)
plt.plot(lambdas[:9], T_theoretical[:9], label="Теоретическое") plt.plot(lambdas[:9], T_experimental[:9], label="Экспериментальное") plt.legend()
plt.title("Оценка результатов моделирования") plt.ylabel("Ср. время в системе") plt.xlabel("Интенсивность входного потока $(\lambda)$") plt.grid()
return T_experimental
if __name__ == "__main__": mu = 1
a = np.random.random() b = a + 0.1 * mu
# Построение графиков plot_expon_distribution(mu, 1) plot_uniform_distribution(a, b, 2)
print('Проходиит моделирование тестовое') experiment(mu, is_test=True, figure=3)
print('Проходит моделирование экспериментальное')
index = [rf"{i:.1f}mu" for i in np.linspace(0.1, 1, 10)] arr = experiment(mu, is_test=False, figure=4)
df = pd.DataFrame(arr, index=index, columns=["T"]) print(df.T)
# Построение экспериментального графика
__plot__(4, df[:9], title='Моделирование для экспериментальной зависимости',
ylabel='Ср. время в системе', xlabel='Интенсивность входного потока $(\lambda)$',
color='black')
plt.show()
8