Лаба 4 / Отчет_лаба4
.docxГУАП
КАФЕДРА ПИ
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ст. преподаватель |
|
|
|
М. Н. Шелест |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 4 |
МОДЕЛИРОВАНИЕ ЭЛЕМЕНТАРНОЙ СМО С БЕСКОНЕЧНЫМ БУФЕРОМ |
по курсу: Имитационное моделирование |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
|
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
Цель работы
Нахождение экспериментальной зависимости для элементарной системы массового обслуживания с бесконечным буфером.
Вариант задания
Вариант №22
Закон распределения входного потока заявок : Эрланговский 3 порядка
Закон распределения времени обслуживания заявок : Экспоненциальный
Параметр : 2
Формулы и графики законом распределения
В начале выполнения данной лабораторной работы необходимо выяснить, как выглядят моделируемые законы распределений. На рисунке 1 представлены законы распределений входного и обслуживающего потока заявок соответственно.
Рисунок 1 – Формулы моделируемых законов
Далее, на рисунке 2 показаны графики заданных законов распределения.
Рисунок 2 – Функции распределений законов
Описание разработанной программы
Далее необходимо предоставить описание разработанной программы. Оно состоит из двух частей: из списка используемых переменных и листинга программного кода. В таблице 1 приведён список переменных, а в листинге 1 – исходный код разработанной программы
Таблица 1. Список используемых переменных
Имя переменной |
Тип данных |
Описание переменной |
Ts |
Дробное число |
Системное время |
Busy |
Логическое значение |
Занятость системы |
T_income |
Функция |
Генерация времени прихода заявки |
T_outcome |
Функция |
Генерация времени ухода заявки |
T_in |
Дробное число |
След. момент поступления заявки |
T_ins |
Массив дробных чисел |
Массив времён прихода заявок |
T_out |
Дробное число |
Время ухода заявки |
T_outs |
Массив дробных чисел |
Массив времён ухода заявок |
N |
Целое число |
Количество поступивших заявок |
K |
Целое число |
Количество обслуженных заявок |
m |
Целое число |
Количество заявок в буфере |
T_mean_old |
Дробное число |
Ср. время нахождения заявки в системе |
T_mean_new |
Дробное число |
Ср. время нахождения заявки в системе |
counter |
Целое число |
Количество итераций алгоритма |
Листинг 1. Программа моделирования стохастического стационарного потока
def model(mu, lambda_, loc_for_erlang, is_test): print(f"Входные параметры: {mu = }; lambda = {lambda_:.1f}; {is_test = }")
# Основные параметры ts = 0 busy = False t_income = ( lambda: np.random.exponential(1 / lambda_) if is_test else erlang.rvs(a=loc_for_erlang, scale=1 / (lambda_ * loc_for_erlang)) ) t_outcome = lambda: np.random.exponential(scale=1 / mu) t_in = 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 else: busy = True t_out = ts + t_outcome() t_in = ts + t_income() else: ts = t_out k += 1 t_outs.append(t_out) # В буфере больше 0 заявок? if m > 0: m -= 1 t_out = ts + t_outcome() else: busy = False t_out = t_in # Рассматриваем возможность выхода каждые 1000 итераций 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.0001: return t_mean_new t_mean_old = t_mean_new |
Моделирование тестового случая
Тестовый случай заключается в том, что: входной поток заявок – экспоненциальный с параметром λ (изменяется в зависимости от μ), поток обслуживания заявок – экспоненциальный с параметром μ.
Теоретическое время нахождения заявки в системе рассчитывается по формуле, приведённой на рисунке 3.
Рисунок 3 – Зависимости интенсивности от количества заявок
Таким образом, на рисунке 4 представлен графики зависимостей среднего времени нахождения заявок в системе от интенсивности входного потока для теоретического и экспериментального случаев.
Рисунок 5 – Зависимость времени от количества заявок
Моделирование основного случая
По результатам моделирования тестового случая можно заметить, что система моделирования работает достаточно точно, следовательно, можно запускать её для основного случая. Основной случай заключается в том, что: входной поток заявок – Эрланговский 3-го порядка с параметром λ (изменяется в зависимости от μ); поток обслуживания заявок – экспоненциальный с параметром μ.
В качестве результатов моделирования основного случая необходимо получить таблицу, в которой записаны средние времена нахождения заявки в системе в зависимости от параметра λ. Таким образом, созданная таблица показана на рисунке 6.
Рисунок 6 – Таблица средних времён нахождения заявки в системе
Далее, на основе данной таблицы необходимо построить точно такой же график зависимости, как и для тестового случая. Данный график показан на рисунке 7.
Рисунок 7 – Зависимость времени от количества заявок
Выводы
Таким образом, подводя итог ко всем выше проделанным операциям, можно сделать вывод о том, что в ходе выполнения данной лабораторной работы была построена и протестирована модель элементарной системы массового обслуживания с бесконечным буфером. По результатам моделирования тестового случая можно сказать, что система настроена отлично, поскольку теоретическое значение малоотличимо от полученного практического. Отсюда можно сделать вывод о том, что и результаты запуска основного случая можно считать истинными, поскольку точность работы системы не изменилась.