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

lab3

.docx
Скачиваний:
0
Добавлен:
27.08.2024
Размер:
711.35 Кб
Скачать

  1. Цель работы

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

Вариант 16

Рисунок 1 – Вариант задания

Во втором столбце – порядок эрланговского потока, в третьем – параметр λ.

  1. Ход работы

Формула эрланговского потока записывается как:

f(x;k; λ) =

График эрланговского распределения по варианту представлен на рисунке 2 при k=4 и λ=16.

Рисунок 2 – График эрланговской функции при заданных k, λ

Генерируется случайные числа для эрланговского распределения N раз. Моделируем эрланговский поток, где вычисляется его оценки интенсивности и коэффициента вариации в зависимости от объема выборки. На рисунке 3-4 представлены графики зависимости этих оценок в зависимости N = 1000, при этом ошибка меньше 1%.

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

Рисунок 4 - График сравнения оценки коэффициента вариации с теоретическим значением

  1. Вывод

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

Смоделировав работу СМО с помощью функции генерации случайных значения, я выяснил, что с увеличением объема выборки этих чисел интенсивность потока СМО и коэффицент вариации стремятся к теоретическим значениям.

В ходе работы проблем не возникло.

Приложение

import random as rd

import matplotlib.pyplot as plt

import numpy as np

import math

# График эрланговской функции

def func():

f_exp = lambda lmd, x: -(1 / lmd) * math.log(x)

f_erlang = lambda k_, lmd, x: sum([f_exp(lmd, x) for _ in range(k_)])

k_, lmb = 4, 16

x = [i+1 for i in range(1, 100)]

values = []

for i in range(len(x)):

values.append(f_erlang(k_, lmb, 1))

plt.plot(x, [f_erlang(4,16, x[i]) for i in range(len(x))])

plt.title('График эрлановской функции')

plt.show()

# Функция экспоненицальная

f_exp = lambda lmd: -(1 / lmd) * math.log(np.random.random())

# Функция эрланговская

f_erlang = lambda k_, lmd: sum([f_exp(lmb) for _ in range(k_)])

k_, lmb = 4, 16

teor_lambda = lmb / k_

teor_nu = 1 / (k_**0.5)

def modeling(N):

tc = 0

k = 0

list_uk = []

list_lambda = []

list_nu = []

for i in range(N):

list_uk.append(f_erlang(k_, lmb))

tc += list_uk[-1]

m = np.mean(list_uk)

sigma = (np.var(list_uk))**0.5

lamba = 1 / m

nu = sigma/m

list_lambda.append(lamba)

list_nu.append(nu)

return list_lambda, list_nu

def main():

func()

N = 1000

lambda_old = 10000000

nu_old = 10000000

list_lambda, list_nu = [0], [0]

while (abs((list_lambda[-1] - lambda_old)/lambda_old) > 0.01 or

abs((list_nu[-1] - nu_old)/nu_old)) > 0.01:

list_lambda, list_nu = modeling(N)

lambda_old = list_lambda[-1]

nu_old = list_nu[-1]

N = 2*N

print('Ошибка удовлетворительная')

x = [i for i in range(len(list_lambda))]

plt.plot(x, list_lambda, label='Рассчитанное значение')

plt.plot(x, [teor_lambda for i in range(len(list_lambda))], label='Теоретическое значение')

plt.title('Интенсивность потока')

plt.legend()

plt.show()

plt.plot(x, list_nu, label='Рассчитанное значение')

plt.plot(x, [teor_nu for i in range(len(list_lambda))], label='Теоретическое значение')

plt.title('Коэффицент вариации')

plt.legend()

plt.show()

main()

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