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

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

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

ГУАП

КАФЕДРА ПИ

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

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

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

М. Н. Шелест

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

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

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

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 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

Выводы

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

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