Лаба 5 / Отчет_лаба5
.docxГУАП
КАФЕДРА ПИ
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ст. преподаватель |
|
|
|
М. Н. Шелест |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 5 |
МОДЕЛИРОВАНИЕ ЭЛЕМЕНТАРНОЙ СМО С КОНЕЧНЫМ БУФЕРОМ |
по курсу: Имитационное моделирование |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
|
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
Цель работы
Нахождение экспериментальных зависимостей и для элементарной системы массового обслуживания с буфером объема N.
Вариант задания
Вариант №22
Закон распределения входного потока заявок : Эрланговский 3 порядка
Закон распределения времени обслуживания заявок : Экспоненциальный
Параметр : 2
Объем буфера N: 3
Формулы и графики законом распределения
В начале выполнения данной лабораторной работы необходимо выяснить, как выглядят моделируемые законы распределений. На рисунке 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 |
Дробное число |
Ср. время нахождения заявки в системе |
Q_old |
Дробное число |
Производительность на пред. шаге |
Q_new |
Дробное число |
Производительность на тек. шаге |
counter |
Целое число |
Количество итераций алгоритма |
Листинг 1. Программа моделирования стохастического стационарного потока
def model(mu, lambda_, theta, N, 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=theta, scale=1 / (lambda_ * theta)) ) t_outcome = lambda: np.random.exponential(scale=1 / mu) t_in = t_income() t_ins = [] t_out = t_in t_outs = [] n, k, m, fail = 0, 0, 0, 0
q_Old = sys.float_info.max q_Data = [] t_mean_old = sys.float_info.max counter = 0
# Процесс моделирования while True: counter += 1 # т_прихода_заявки <= т_освобождения if t_in <= t_out: ts = t_in n += 1 # Записываем только в случае когда busy = False, m < N if not busy or m < N: t_ins.append(t_in)
t_in_new = t_income() # Для интенсивности q_Data.append(t_in_new)
# Система занята? if busy: if m < N: m += 1 else: fail += 1 else: busy = True t_out = ts + t_outcome() t_in = ts + t_in_new 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))])
ro = lambda_ / mu p_fail = fail / n p_succ = 1 - p_fail
q_New = (p_succ) / np.mean(q_Data)
if ( abs((t_mean_new - t_mean_old) / t_mean_old) < 0.001 or abs((q_New - q_Old) / q_Old) < 0.001 ): return t_mean_new, q_New t_mean_old = t_mean_new q_Old = q_New |
Моделирование тестового случая
Тестовый случай заключается в том, что: входной поток заявок – экспоненциальный с параметром λ (изменяется в зависимости от μ), поток обслуживания заявок – экспоненциальный с параметром μ.
Теоретическое время нахождения заявки в системе рассчитывается по формуле, приведённой на рисунке 3.
Рисунок 3 – Формула подсчёта среднего времени
Теоретическая производительность системы обслуживания высчитывается по формуле, представленной на рисунке 4.
Рисунок 4 – Формула подсчета производительность системы
Таким образом, на рисунке 5 представлены графики зависимости среднего времени нахождения в системе от интенсивности входного потока и производительности системы от интенсивности входного потока для теоретических и экспериментальных случаев.
Рисунок 5 – Результаты моделирования-1
Моделирование основного случая
По результатам моделирования тестового случая можно заметить, что производительность экспериментальная полностью совпадает с теоретической, однако со среднем временем нахождения заявки в очереди такого сказать нельзя. В данном случае графики имеют очень сильные отличия.
В качестве результатов моделирования основного случая необходимо получить таблицу, в которой записаны средние времена нахождения заявки в системе и производительность системы в зависимости от параметра λ. Таким образом, созданная таблица показана на рисунке 6.
Рисунок 6 – Табличные данные
Далее, на основе данной таблицы необходимо построить точно такой же график зависимости, как и для тестового случая. Данный график показан на рисунке 7.
Рисунок 7 – Результаты моделирования-2
Выводы
Таким образом, подводя итог ко всем выше проделанным операциям, можно сделать вывод о том, что в ходе выполнения данной лабораторной работы была построена и протестирована модель элементарной системы массового обслуживания с конечным буфером. При сравнении данной системы со системой с бесконечным буфером, можно отметить что график среднего времени нахождения заявки в системе возрастает медленнее в связи с переполнением очереди (отказы в обработке заявки) и стремится к конкретному значению. Тоже самое можно сказать и про график производительности. Он будет стремится к значению интенсивности потока обслуживания.