Данный проект представляет собой решение задачи моделирования системы обработки заявок с использованием дискретно-событийного подхода.
В систему поступают заявки, время между приходом соседних заявок распределено по экспоненциальному закону со средним значением R₁ секунд. Обработка заявок выполняется в 2 стадии:
-
Рабочие типа 1:
- Могут выполнять только первый тип работ.
- Время выполнения распределено экспоненциально со средним значением (R₁ + G₁ + B₁) секунд.
-
Рабочие типа 2:
- Могут выполнять только второй тип работ.
- Время выполнения распределено экспоненциально со средним значением (R₂ + G₂ + B₂) секунд.
-
Рабочие типа 3:
- Могут выполнять оба типа работ.
- Время выполнения распределено экспоненциально:
- Для первого типа работ: (R₃ + G₃ + B₃ + G₁) секунд.
- Для второго типа работ: (R₃ + G₃ + B₃ + B₁) секунд.
- Рабочие типа 3 задействуются только тогда, когда образуются очереди, при этом они выбирают для исполнения заявку из более длинной очереди.
Требуется разработать дискретно-событийную имитационную модель, которая должна:
- Оценивать показатели загруженности системы.
- Формировать лог моделирования, иллюстрирующий продвижение заявок в цепях событий FEC (Future Event Chain) и CEC (Current Event Chain).
С помощью разработанной модели необходимо обосновать минимально требуемое число рабочих каждого типа, чтобы обеспечить среднее число заявок в каждой из очередей на уровне не более 2.
| Параметр | Значение |
|---|---|
| R₁ | 6 |
| R₁ + G₁ + B₁ | 26 |
| R₂ + G₂ + B₂ | 24 |
| R₃ + G₃ + B₃ + G₁ | 30 |
| R₃ + G₃ + B₃ + B₁ | 27 |
- Разработать модель, учитывающую описанные выше параметры и требования.
- Провести имитационное моделирование для оценки загруженности системы.
- Определить минимальное количество рабочих каждого типа для выполнения условий задачи.
- Сформировать лог моделирования для анализа цепей событий.
- Модель, позволяющая оценить загруженность системы.
- Лог моделирования, иллюстрирующий продвижение заявок.
- Рекомендации по минимальному количеству рабочих каждого типа для выполнения условий задачи.
В результате работы были достигнуты следующие результаты:
-
Разработка программы на GPSS World:
- Была создана имитационная модель на языке GPSS World, которая позволяет анализировать работу системы обработки заявок с учетом заданных параметров.
- Модель включает в себя:
- Генерацию заявок с экспоненциальным распределением времени между поступлениями.
- Обработку заявок на двух стадиях с использованием рабочих разных типов.
- Учет очередей и динамическое распределение задач между рабочими типа 3.
-
Разработка библиотеки SimCPP:
- На языке программирования C++ была разработана библиотека SimCPP, которая реализует функциональность операторов среды GPSS World.
- Библиотека включает:
- Моделирование экспоненциального распределения времени.
- Управление очередями и обработку заявок.
- Логирование событий для анализа цепей FEC (Future Event Chain) и CEC (Current Event Chain).
-
Тестирование и верификация:
- Проведено тестирование разработанной модели и библиотеки.
- Выявлено соответствие результатов моделирования в GPSS World и SimCPP.
- Подтверждена корректность прогнозирования поведения системы.
-
Анализ результатов:
- На основе моделирования определено минимальное количество рабочих каждого типа, необходимое для обеспечения среднего числа заявок в очередях не более 2.
- Полученные данные позволяют оптимизировать распределение ресурсов в системе.
-
Лог моделирования:
- Сформирован подробный лог, который иллюстрирует:
- Поступление заявок.
- Их обработку на разных стадиях.
- Динамику изменения очередей.
- Лог позволяет анализировать работу системы и выявлять узкие места.
- Сформирован подробный лог, который иллюстрирует:
- Разработанная программа на GPSS World и библиотека SimCPP демонстрируют высокую степень соответствия в результатах моделирования.
- Модель позволяет эффективно оценивать загруженность системы и оптимизировать распределение рабочих ресурсов.
- Результаты работы могут быть использованы для дальнейшего анализа и улучшения системы обработки заявок.
Для компиляции и запуска проекта выполните следующие шаги:
-
Перейдите в директорию с исходным кодом:
cd src -
Скомпилируйте проект:
g++ pr5.cpp -o pr5
-
Запустите скомпилированный проект: После успешной компиляции запустите программу:
./pr5