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

lab3

.pdf
Скачиваний:
1
Добавлен:
27.08.2024
Размер:
725.84 Кб
Скачать

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

Исследование основных характеристик входных потоков заявок, а

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

Вариант 16

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

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

2)Ход работы

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

f(x;k; λ) =

( )

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

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

2

Генерируется случайные числа для эрланговского распределения N

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

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

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

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

3

3)Вывод

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

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

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

4

Приложение

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

5

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()

6

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