Skip to content

Latest commit

 

History

History
182 lines (131 loc) · 7.34 KB

File metadata and controls

182 lines (131 loc) · 7.34 KB

Быстрый старт

Это руководство поможет вам быстро начать работу с библиотекой 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:

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

Структура проекта

Библиотека состоит из следующих основных модулей:

most_queue.sim — Симуляция

Модуль для имитационного моделирования СМО:

  • base.py — базовый класс QsSim для симуляции
  • priority.py — системы с приоритетами
  • fork_join.py — Fork-Join системы
  • networks/ — симуляция сетей очередей
  • И другие специализированные классы

most_queue.theory — Численные методы

Модуль для аналитического расчета СМО:

  • base_queue.py — базовый класс для расчетов
  • fifo/ — системы с дисциплиной FIFO
  • priority/ — системы с приоритетами
  • networks/ — расчет сетей очередей
  • И другие модули

most_queue.random — Распределения

Модуль для работы со случайными распределениями:

  • distributions.py — классы распределений
  • utils/ — утилиты для работы с распределениями

most_queue.io — Ввод-вывод

Модуль для визуализации и вывода результатов:

  • tables.py — форматированный вывод таблиц
  • plots.py — построение графиков

Когда использовать симуляцию, а когда расчет?

Используйте симуляцию (sim), когда:

  • Нет аналитического решения для вашей модели
  • Нужно моделировать сложное поведение системы
  • Требуется анализ переходных процессов
  • Модель содержит нестандартные элементы

Используйте расчет (theory), когда:

  • Существует аналитическое решение
  • Нужна высокая точность результатов
  • Требуется быстрое получение результатов
  • Нужно проверить корректность симуляции

Следующие шаги

  1. Изучите основные концепции теории массового обслуживания
  2. Ознакомьтесь с руководством по симуляции
  3. Изучите численные методы
  4. Посмотрите примеры использования

Полезные советы

  • Начните с простых моделей (M/M/1, M/M/c)
  • Используйте симуляцию для проверки результатов расчета
  • Для получения стабильных результатов симуляции используйте достаточно большое число заявок (обычно 10000+)
  • Обратите внимание на коэффициент загрузки: система устойчива при ρ < 1