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

ЛР4_ИМ

.docx
Скачиваний:
94
Добавлен:
18.12.2019
Размер:
144.47 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА № 41

ЛАБОРАТОРНАЯ РАБОТА

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

РУКОВОДИТЕЛЬ

Ассистент

М.Н. Шелест

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

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

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

ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

Моделирование элементарной СМО с бесконечным буфером

по курсу: ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4616

А.В. Павлов

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

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

Санкт-Петербург

2019

Цель работы.

Исследование основных характеристик входных потоков заявок, а также базовых принципов моделирования СМО по событиям.

Вариант задания.

Вариант №7.

Порядок эрланговского потока – 3

Равномерный закон

0 - 2

Формула и график моделируемого закона распределения

Рисунок 1 – График плотности вероятности

Рисунок 2 – График плотности вероятности для интервалов между заявками

Рисунок 3 – График функции распределения интервалов между заявками

Листинг 1 – Код программы

from matplotlib import pyplot as plt

import numpy as np

import numpy.random as rd

status = False #True - Пауссоновский поток, False - Экспериментальный поток

#Условия варианта

shape = 3

mu0 = 2

#Инт. входного потока

lambd = np.linspace(0.1,1,10) * mu0

#Подсчет границ для равномер.

a = 1/mu0 - 0.1 * mu0 / 2

b = a + 0.1 *mu0

if status:

#Теор значения

#Подсчет теор. значения коэффициента вариации обработки

v = np.sqrt(((b-a)**2)/12)/((a+b) /2)

#Подсчет теор. значения коэффициента загрузки системы

p = lambd[lambd != mu0]/mu0

# Подсчет теор. значения среднего числа запросов в системе

L = (p**2 * (1+ v**2)) / (2*(1-p)) + p

#Подсчет теор. значения среднего времени пребывания запроса в системе

tTheor = L / lambd[lambd != mu0]

#Массив для записи оценочных значений среднего времени пребывания запроса в системе

tAnal = np.array([])

#Проход по всем значениям интен. потока

for i in lambd:

# Занятость ОУ и число запросов в очереди,число итераций

busy = m = count = 0

# Старое значение среднего времени пребывания запроса в системе

tOld = 2 ** 32

#значения времен прихода запроса,время обработки запроса,работы запроса

dataRequest = np.array([])

tRequest = rd.exponential(1/i,1) if status else rd.gamma(shape, 1/(i * shape),1)

workT = np.array([])

# Массив значений времен обработки запросов

workData = np.array([])

#Массив значений систм времени.

systemT = np.array([])

print(tRequest)

while(True):

count += 1

if tRequest <= workT:

systemT = tRequest

if not busy:

#ОУ в положение занято

busy = True

#Генерация время обработки запроса

workT = systemT + rd.uniform(a,b)

else:

#Увел. кол. заявок

m+=1

# Генерируем время прихода запроса, если ch = True, то генерируем для тестового потока

tRequest = systemT + (rd.exponential(1/i,1) if status else rd.gamma(shape, 1/(i * shape),1))

dataRequest = np.append(dataRequest,systemT)

else:

systemT = workT

if m>0: #Если буфер не пустой

m -= 1 #Забераем запрос из буфера

workT = systemT + rd.uniform(a,b) #Генерируем время обработки запроса

else:

busy = False #Освобождаем ОУ

workT = tRequest #Время обслуживания = время прихода запроса

workData = np.append(workData, systemT)

#Оценка параметров каждые 1000 итераций

if (count % 1000 == 0):

#Расчет оценки ср. времени

tNew = np.mean(workData - dataRequest[:len(workData)])

#tNew = np.mean(workData - dataRequest[:len(workData)])

if (np.abs((tNew - tOld)/tOld)) > 0.01:

# Сохранение нового значения оцениваемого параметра как старого

tOld = tNew

else:

break

# Сохранение оценки среднего времени пребывания запроса в системе

tAnal = np.append(tAnal, tNew)

print(tAnal)

#Вывод графиков

if status:

plt.plot(lambd[:len(tTheor)], tTheor,label='Теор.',lw=4,color='black',alpha=0.5)

plt.plot(lambd[:9], tAnal[:9],label='Оценка',lw=4,color='red',alpha=0.5)

plt.ylabel('Ср. t в системе')

plt.xlabel('Инт. входного потока')

else:

plt.plot(lambd[:9], tAnal[:9], lw=4, color='red',)

plt.ylabel('Ср. t в системе')

plt.xlabel('Инт. входного потока')

plt.grid()

plt.legend()

plt.show()

Полученные графики

Рисунок 4 – График зависимости среднего времени от интенсивность входного потока для тестового потока

Рисунок 5 – График зависимости среднего времени от интенсивность входного потока для потока по варианту

Выводы.

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

Соседние файлы в предмете Имитационное моделирование систем