ЛР4_ИМ
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА № 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) для СМО. Построены графики данной зависимости для тестового набора и пробного набора. Теоретические и наблюдаемые данные для пробного набора совпадают, следовательно, можно утверждать о правильности процесса моделирования, состоятельности данных, полученных при моделировании тестового набора.