
ИМ4
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
д-р физ.-мат. наук |
|
|
|
Рождественский Ю.В |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4 |
МОДЕЛИРОВАНИЕ ВХОДНОГО ПОТОКА |
по курсу: ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ гр. № |
4116 |
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2024
Цель работы: смоделировать входной поток для системы массового обслуживания. Считая входной поток простейшим со статистикой Пуассона промоделировать времена прихода заявок в СМО.
Ход работы:
Простейшим потоком является пуассоновский поток, для которого для которого плотность распределения вероятностей задается формулой экспоненциального распределения:
где – интенсивность пуассоновского потока.
Листинг 1- Реализация входного потока и вывод метрик
import numpy as np
import matplotlib.pyplot as plt
# Параметры модели
lambda_rate = 5
M = 1000
# Генерация пуассоновского потока
np.random.seed(42)
# Генерация интервалов между заявками
interarrival_times = np.random.exponential(1 / lambda_rate, size=M)
# Вычисление времени прихода заявок
arrival_times = np.cumsum(interarrival_times)
# Гистограмма интервалов между заявками
plt.figure(figsize=(8, 5))
plt.hist(interarrival_times, bins=20, alpha=0.7, color='blue', edgecolor='black', density=True)
plt.title("Гистограмма интервалов между заявками", fontsize=14)
plt.xlabel("Интервал между заявками", fontsize=12)
plt.ylabel("Плотность вероятности", fontsize=12)
plt.grid()
plt.show()
# Расчет статистик
mean_interval = np.mean(interarrival_times)
std_interval = np.std(interarrival_times)
estimated_rate = 1 / mean_interval
coefficient_of_variation = std_interval / mean_interval
# Вывод статистик
print(f"Средний интервал между заявками: {mean_interval:.4f}")
print(f"Оценка интенсивности потока: {estimated_rate:.4f} (теоретическая: {lambda_rate})")
print(f"Коэффициент вариации интервалов: {coefficient_of_variation:.4f} (теоретический: 1)")
plt.tight_layout()
plt.show()
# Зависимость параметров от интенсивности потока
lambda_values = np.linspace(1, 10, 10)
mean_intervals = []
estimated_rates_lambda = []
coefficients_of_variation_lambda = []
for lambda_rate in lambda_values:
interarrival_times = np.random.exponential(1 / lambda_rate, size=M)
mean_interval = np.mean(interarrival_times)
std_interval = np.std(interarrival_times)
estimated_rate = 1 / mean_interval
cv = std_interval / mean_interval
mean_intervals.append(mean_interval)
estimated_rates_lambda.append(estimated_rate)
coefficients_of_variation_lambda.append(cv)
plt.figure(figsize=(15, 5))
# Средний интервал
plt.subplot(1, 3, 1)
plt.plot(lambda_values, mean_intervals, marker='o', label="Средний интервал", color="blue")
plt.title("Средний интервал между заявками от интенсивности", fontsize=14)
plt.xlabel("Интенсивность потока", fontsize=12)
plt.ylabel("Средний интервал", fontsize=12)
plt.grid()
plt.legend()
# Коэффициент вариации
plt.subplot(1, 3, 2)
plt.plot(lambda_values, coefficients_of_variation_lambda, marker='o', label="Коэффициент вариации CV", color="purple")
plt.axhline(y=1, color="red", linestyle="--", label="Теоретическое значение CV = 1")
plt.title("Коэффициент вариации от интенсивности", fontsize=14)
plt.xlabel("Интенсивность потока", fontsize=12)
plt.ylabel("Коэффициент вариации CV", fontsize=12)
plt.grid()
plt.legend()
plt.tight_layout()
plt.show()
Построена гистограмма входного потока, график зависимости среднего времени интервала между заявками и график коэффициента вариации от интенсивности (Рисунок 1-3)
Рисунок 1 – Гистограмма входного потока
Гистограмма входного потока показывает, что интервалы между заявками следуют экспоненциальному распределению.
Рисунок 2- Средний интервал между заявками от интенсивности
Средний интервал между заявками обратно пропорционален интенсивности потока. При увеличении интенсивности интервалы уменьшаются.
Рисунок 3- Зависимость коэффициента вариации от интенсивности
Коэффициент вариации остается близким к 1 при разных значениях интенсивности.
Листинг 2- График поступления заявок по времени
# Параметры модели
lambda_rate = 5 # Интенсивность потока
M = 50 # Количество заявок для моделирования
# Генерация пуассоновского потока
np.random.seed(42)
interarrival_times = np.random.exponential(1 / lambda_rate, size=M)
arrival_times = np.cumsum(interarrival_times)
plt.figure(figsize=(10, 2))
plt.scatter(arrival_times, np.zeros_like(arrival_times), color='blue', s=10)
plt.title("Времена поступления заявок", fontsize=14)
plt.xlabel("Время поступления заявок", fontsize=12)
plt.yticks([])
plt.grid(axis='x')
plt.show()
Рисунок 4 – График поступления заявок
Выводы: смоделирован входной поток для системы массового обслуживания. Построены гистограммы входного потока, графики среднего интервала от интенсивности, коэффициента вариации от интенсивности.