Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 4 / Отчет_лаба4

.docx
Скачиваний:
8
Добавлен:
05.01.2024
Размер:
237.25 Кб
Скачать

ГУАП

КАФЕДРА ПИ

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

ст. преподаватель

М. Н. Шелест

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 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 – Зависимость времени от количества заявок

Выводы

Таким образом, подводя итог ко всем выше проделанным операциям, можно сделать вывод о том, что в ходе выполнения данной лабораторной работы была построена и протестирована модель элементарной системы массового обслуживания с бесконечным буфером. По результатам моделирования тестового случая можно сказать, что система настроена отлично, поскольку теоретическое значение малоотличимо от полученного практического. Отсюда можно сделать вывод о том, что и результаты запуска основного случая можно считать истинными, поскольку точность работы системы не изменилась.

Соседние файлы в папке Лаба 4