Программная среда разработки, трансляции и статистического анализа результатов дискретно-событийного имитационного моделирования на базе компилятора Wolverine GPSS/H.
GPSS/H Studio представляет собой специализированную кроссплатформенную интегрированную среду разработки (IDE), оптимизированную для проведения вычислительных имитационных экспериментов над системами массового обслуживания (СМО). Программный комплекс разработан с использованием языка Python 3 и графического фреймворка PySide6 (Qt for Python).
Среда обеспечивает сквозной цикл математического моделирования: от позиционно-ориентированного редактирования исходного текста модели до автоматизированного синтаксического анализа файлов листинга (.lis) с представлением агрегированных статистических показателей функционирования системы в виде структурированных матричных таблиц.
Комплекс спроектирован по модульному принципу и включает в себя следующие основные подсистемы:
+-----------------------------------------------------------------------------------+
| GPSS/H Studio |
+----------------------------------------+------------------------------------------+
| Модуль редактирования | Модуль анализа |
| +----------------------------------+ | +------------------------------------+ |
| | LabelGutter (Колонка меток/тегов)| | | Сводка для отчёта (QTabWidget) | |
| | GPSSCodeEditor (Код модели) | | | - Сводка общая (Время, такты) | |
| | GPSSHighlighter (Подсветка синт.)| | | - Устройства (Facilities) | |
| +----------------------------------+ | | - Очереди (Queues) | |
| | | - Памяти (Storages) | |
| +----------------------------------+ | | - Блоки (Block executions) | |
| | Подсистема трансляции | | | - Системные ресурсы | |
| | - Генерация "model.gps" | | +------------------------------------+ |
| | - Диспетчер процесса gpssh.exe | | | Полный листинг (.lis) (Viewer) | |
| | - Захват STDOUT / STDERR | | +------------------------------------+ |
| +----------------------------------+ | | Консоль вывода (Raw Output) | |
+----------------------------------------+--+---------------------------------------+
- Позиционное форматирование: Рабочая область редактора разделена на выделенную колонку меток и модификаторов (
LabelGutter, фиксированная ширина 2 знакоместа) и текстовое поле блоков модели (GPSSCodeEditor). Входной код автоматически форматируется со смещением оператора в третью позицию строки в соответствии со стандартами Wolverine GPSS/H. - Синтаксический анализатор реального времени: Модуль
GPSSHighlighterвыполняет контекстную подсветку операторов, числовых констант, выражений операндов и строк комментариев. - Манипуляция блоками кода: Реализовано интеллектуальное позиционирование курсора (Smart Home), многострочная блочная табуляция и детабуляция (шаг 2 пробела), перемещение строк без использования системного буфера обмена, а также дублирование активных строк.
- Автоматическая генерация стандартизованного входного файла модели
model.gpsс сохранением позиционных соответствий колонок меток и мнемоник операторов. - Асинхронное исполнение бинарного модуля
gpssh.exeпосредством подсистемы межпроцессного взаимодействияsubprocess. - Перехват и буферизация стандартных потоков вывода (
STDOUT) и ошибок (STDERR) с регистрацией кодов возврата процесса.
- Парсинг неструктурированного текстового протокола моделирования (
model.lis), формируемого компилятором Wolverine GPSS/H. - Определение абсолютных и относительных значений системного модельного времени.
- Извлечение и параметризация таблиц состояний одноканальных приборов обслуживания, многоканальных накопителей, накопителей очередей, а также счетчиков входов транзактов по блокам.
- Механизм кросс-ссылочной навигации: прямой переход из агрегированных табличных данных к ассоциированной строке листинга по двойному клику либо комбинации
Ctrl + Click.
| Компонент | Минимальные требования | Функциональное назначение |
|---|---|---|
| Операционная система | Microsoft Windows 7 / 8 / 10 / 11 | Среда исполнения бинарного компилятора gpssh.exe |
| Интерпретатор Python | Версия 3.8 или выше | Базовый вычислительный рантайм среды |
| Графический фреймворк | PySide6 (Qt 6.x) |
Графический интерфейс, диспетчер событий и отрисовка |
| Ядро моделирования | gpssh.exe (Wolverine Software) |
Транслятор и расчетное ядро дискретно-событийного моделирования |
- Установите библиотеку
PySide6в используемую среду Python:
pip install PySide6-
Разместите исполняемый файл компилятора
gpssh.exeв корневом каталоге проекта рядом со скриптомgpss-studio.py. -
Запустите приложение:
python gpss-studio.pyNote
При необходимости путь к исполняемому файлу компилятора gpssh.exe может быть переопределен в диалоговом окне настроек приложения.
Главное окно приложения разделено горизонтальным разделителем (сплиттером) на две функциональные панели. Начальные геометрические параметры окна по умолчанию составляют 1440x780 пикселей при фиксированной начальной ширине левого блока в 320 пикселей:
- Колонка меток (Label Gutter): Хранит символьные метки строк (до 2 символов в компактном представлении) либо символ
*для строк комментариев. Редактирование значения осуществляется по нажатию клавишиF2либо двойному клику левой кнопкой мыши. - Поле операторов модели: Позволяет вводить синтаксические конструкции языка без необходимости ручного выравнивания отступа первого операнда.
Состоит из трех основных вкладок:
- Сводка для отчёта: Набор структурированных таблиц:
- Сводка: Модельное время, общее число выполненных блоков и скорость моделирования.
- Устройства: Статистические показатели одноканальных устройств (Facilities).
- Очереди: Характеристики динамики очередей (Queues).
- Памяти: Характеристики использования емкости многоканальных накопителей (Storages).
- Блоки: Распределение транзактов по блокам модели (Current / Total).
- Система: Параметры распределения памяти компилятора и кодовых сегментов.
- Полный листинг (.lis): Окно просмотра исходного листинга компилятора с нумерацией строк и интегрированным модулем контекстного поиска.
- Вывод консоли: Непосредственный поток текстовых сообщений стандартных дескрипторов ввода-вывода процесса
gpssh.exe.
Синтаксический анализатор автоматически извлекает из выходного файла листинга следующие числовые характеристики:
| Параметр таблицы | Обозначение | Физический смысл и расчетное выражение |
|---|---|---|
| Устройство | Facility |
Имя или порядковый номер устройства обслуживания |
| Загрузка (Util) | Коэффициент использования: доля времени занятости прибора | |
| Входов (Entries) | Количество транзактов, захвативших устройство (SEIZE) |
|
| Среднее время/заявку | Средняя длительность обслуживания одной заявки: $\bar{t}{srv} = \frac{T{busy}}{N_{entries}}$ | |
| Статус | Status |
Состояние доступности прибора на момент останова (AVAIL / UNAVAIL) |
| % готовности | Доля модельного времени, в течение которой прибор находился в состоянии готовности | |
| Захвативший Xact | Xact |
Идентификатор транзакта, удерживающего прибор в текущий момент времени |
| Вытеснивший Xact | Preempt Xact |
Идентификатор транзакта, прервавшего обслуживание текущей заявки |
| Параметр таблицы | Обозначение | Физический смысл и расчетное выражение |
|---|---|---|
| Очередь | Queue |
Имя или номер анализируемой очереди |
| Макс. длина | Максимальное число транзактов, единовременно находившихся в очереди | |
| Средняя длина | Интегральная средняя длина очереди во времени: |
|
| Всего заявок | Полное количество входов транзактов в очередь (QUEUE) |
|
| Нулевых входов | Количество заявок, покинувших очередь с нулевой задержкой | |
| % нулевых | Доля заявок, обслуженных без ожидания: |
|
| Среднее время | Среднее время ожидания по всем транзактам: $\bar{t}w = \frac{1}{N_Q} \sum{i=1}^{N_Q} t_i$ | |
| $Среднее время | Среднее время ожидания только для задержанных транзактов: $\bar{t}{w, \neq 0} = \frac{1}{N_Q - N_0} \sum{t_i > 0} t_i$ | |
| Текущая длина | Количество транзактов в очереди на момент окончания моделирования |
| Параметр таблицы | Обозначение | Физический смысл и расчетное выражение |
|---|---|---|
| Память | Storage |
Идентификатор многоканального накопителя |
| Ёмкость | Номинальная емкость накопителя, заданная оператором STORAGE
|
|
| Среднее содерж. | Интегральное среднее число занятых единиц емкости во времени | |
| Коэф. загрузки | Коэффициент использования емкости: |
|
| Число входов | Суммарное количество единиц емкости, запрошенных операторами ENTER
|
|
| Среднее время | Среднее время удержания одной единицы емкости накопителя | |
| Текущая занятость | Количество занятых единиц емкости на момент завершения прогона | |
| Пик (Max) | Максимальное число одновременно занятых единиц емкости |
В компиляторе Wolverine GPSS/H используется строгий колоночный синтаксис. При формировании промежуточного файла model.gps среда автоматически обеспечивает позиционирование лексем:
Позиция: 1 2 3 4 ...
Символ: [М][Т] [ОПЕРАТОР] [ОПЕРАНДЫ...]
Пример 1: G E GENERATE 10,2
Пример 2: * Текст комментария строки
Пример 3: SEIZE CPU
- Условие завершения расчета: Прогон модели детерминированно задается числом завершаемых транзактов в управляющей команде
START(например,START 500) и завершается обязательной терминальной директивойEND.
| Комбинация клавиш | Область действия | Описание операции |
|---|---|---|
| F5 | Глобальная | Запуск процесса трансляции и исполнения имитационной модели |
| Ctrl + S | Глобальная | Сохранение текущего файла модели |
| Ctrl + Shift + S | Глобальная | Сохранение модели в новый файл (Save As) |
| Ctrl + O | Глобальная | Открытие существующего файла модели (.gps, .dat, .txt) |
| Ctrl + N | Глобальная | Инициализация новой модели |
| Ctrl + F | Контекстная | Открытие интерактивной панели поиска в активном компоненте |
| Ctrl + G | Редактор | Безусловный переход к указанному номеру строки |
| Home / Shift + Home | Редактор | Переход к началу значащего текста / в нулевую позицию строки |
| Tab / Shift + Tab | Редактор | Инкремент / декремент блочного отступа (шаг 2 пробела) |
| Alt + ↑ / Alt + ↓ | Редактор | Перемещение текущей строки вверх / вниз |
| Ctrl + D | Редактор | Дублирование текущей строки |
| Ctrl + / | Редактор | Инвертирование признака комментария (*) в колонке меток |
| F2 | Редактор | Активация редактирования метки/флага текущей строки |
| Ctrl + 1 | Навигация | Переход на вкладку «Сводка для отчёта» |
| Ctrl + 2 | Навигация | Переход на вкладку «Полный листинг (.lis)» |
| Ctrl + 3 | Навигация | Переход на вкладку «Вывод консоли» |
| Ctrl + + / Ctrl + = | Редактор/Листинг | Увеличение размера шрифта |
| Ctrl + - | Редактор/Листинг | Уменьшение размера шрифта |
| Ctrl + 0 | Редактор/Листинг | Сброс масштаба шрифта к исходному значению |
При выполнении вычислительного эксперимента в рабочем каталоге создаются следующие файлы:
model.gps— результирующий позиционный файл модели для подачи на вход компилятора.model.lis— файл протокола моделирования, содержащий текст модели с номерами блоков, диагностику и стандартные статистические таблицы GPSS/H.
Кнопка «Скопировать таблицу» выполняет экспорт содержимого активной статистической таблицы в системный буфер обмена в формате TSV (значения, разделенные знаком табуляции). Данный формат позволяет осуществлять непосредственный перенос расчетных данных в табличные процессоры (Microsoft Excel, LibreOffice Calc) и документы LaTeX/Word для формирования отчетов по лабораторным и научно-исследовательским работам.