Это руководство поможет вам быстро начать работу с библиотекой Most-Queue.
Установите библиотеку через pip:
pip install most-queueИли установите из исходников:
git clone https://github.com/xabarov/most-queue.git
cd most-queue
pip install -e .- Python >= 3.9
- NumPy
- SciPy >= 1.13.0, < 2.0
- Другие зависимости указаны в
requirements.txt
Рассмотрим простейшую систему массового обслуживания M/M/1:
- M — пуассоновский поток поступления заявок
- M — экспоненциальное распределение времени обслуживания
- 1 — один канал обслуживания
from most_queue.sim.base import QsSim
# Создаем симулятор с одним каналом
qs = QsSim(num_of_channels=1)
# Настраиваем поток поступления
# Параметр: интенсивность потока (среднее число заявок в единицу времени)
qs.set_sources(0.5, "M") # λ = 0.5
# Настраиваем обслуживание
# Параметр: интенсивность обслуживания (среднее число обслуживаний в единицу времени)
qs.set_servers(1.0, "M") # μ = 1.0
# Запускаем симуляцию
# Параметр: количество заявок для обработки
results = qs.run(10000)
# Выводим результаты
print(f"Среднее время ожидания в очереди: {results.w[0]:.4f}")
print(f"Среднее время пребывания в системе: {results.v[0]:.4f}")
print(f"Коэффициент загрузки: {results.utilization:.4f}")Для той же системы можно получить точные аналитические результаты:
from most_queue.theory.fifo.mmnr import MMnrCalc
# Создаем калькулятор M/M/1 (частный случай M/M/c)
calc = MMnrCalc(n=1) # n - число каналов
# Настраиваем поток поступления
calc.set_sources(l=0.5) # l - интенсивность потока
# Настраиваем обслуживание
calc.set_servers(mu=1.0) # mu - интенсивность обслуживания
# Выполняем расчет
results = calc.run()
# Выводим результаты
print(f"Среднее время ожидания: {results.w[0]:.4f}")
print(f"Среднее время пребывания: {results.v[0]:.4f}")
print(f"Коэффициент загрузки: {results.utilization:.4f}")Одним из преимуществ библиотеки является возможность сравнения результатов симуляции и аналитического расчета:
from most_queue.sim.base import QsSim
from most_queue.theory.fifo.mmnr import MMnrCalc
from most_queue.io.tables import print_waiting_moments, print_sojourn_moments
# Параметры системы
arrival_rate = 0.5
service_rate = 1.0
num_channels = 1
num_jobs = 10000
# Симуляция
qs = QsSim(num_channels)
qs.set_sources(arrival_rate, "M")
qs.set_servers(service_rate, "M")
sim_results = qs.run(num_jobs)
# Расчет
calc = MMnrCalc(n=num_channels)
calc.set_sources(l=arrival_rate)
calc.set_servers(mu=service_rate)
calc_results = calc.run()
# Сравнение результатов
print("Сравнение моментов времени ожидания:")
print_waiting_moments(sim_results.w, calc_results.w)
print("\nСравнение моментов времени пребывания:")
print_sojourn_moments(sim_results.v, calc_results.v)Библиотека состоит из следующих основных модулей:
Модуль для имитационного моделирования СМО:
base.py— базовый классQsSimдля симуляцииpriority.py— системы с приоритетамиfork_join.py— Fork-Join системыnetworks/— симуляция сетей очередей- И другие специализированные классы
Модуль для аналитического расчета СМО:
base_queue.py— базовый класс для расчетовfifo/— системы с дисциплиной FIFOpriority/— системы с приоритетамиnetworks/— расчет сетей очередей- И другие модули
Модуль для работы со случайными распределениями:
distributions.py— классы распределенийutils/— утилиты для работы с распределениями
Модуль для визуализации и вывода результатов:
tables.py— форматированный вывод таблицplots.py— построение графиков
- Нет аналитического решения для вашей модели
- Нужно моделировать сложное поведение системы
- Требуется анализ переходных процессов
- Модель содержит нестандартные элементы
- Существует аналитическое решение
- Нужна высокая точность результатов
- Требуется быстрое получение результатов
- Нужно проверить корректность симуляции
- Изучите основные концепции теории массового обслуживания
- Ознакомьтесь с руководством по симуляции
- Изучите численные методы
- Посмотрите примеры использования
- Начните с простых моделей (M/M/1, M/M/c)
- Используйте симуляцию для проверки результатов расчета
- Для получения стабильных результатов симуляции используйте достаточно большое число заявок (обычно 10000+)
- Обратите внимание на коэффициент загрузки: система устойчива при ρ < 1