Skip to content

fedotdev/PIMPS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PIMPS — Python IMitation model of Passenger / freight Station

PIMPS — программа имитационного моделирования работы железнодорожной станции на Python. Модель объединяет тяговые расчёты (ОДУ движения поезда по ПТР РЖД 2016) и дискретно-событийную симуляцию станционных процессов (SimPy) с учётом режимов управления интервалами: классическая автоблокировка (АБ) и виртуальная сцепка (ВС).

Проект разработан в рамках выпускной квалификационной работы для количественной оценки влияния виртуальной сцепки на пропускную способность станции.

Warning

Проект ещё находится в разработке.


1. Возможности

1.1 Тяговые расчёты

  • Одномерная модель движения поезда по пути S — система ОДУ dV/ds, dt/ds, решаемая через scipy.integrate.solve_ivp (RK45).
  • Характеристики локомотива (тяговая кривая, тормозные параметры, сопротивление движению) загружаются из YAML-конфигов.
  • На выходе — профили V(S) и T(S), а также head_to_tail_s (разность времени прохода головы и хвоста по участку).

1.2 Имитация работы станции

  • Дискретно-событийная модель на базе SimPy.
  • Топология станции (пути, стрелки, маршруты, секции, конфликтующие маршруты) описывается в YAML.
  • Центральный диспетчер (_dispatcher_process) управляет очередью поездов и назначением маршрутов.
  • Модель электрической централизации (ЭЦ) проверяет конфликты маршрутов и блокировку секций через InterlockingEngine.

1.3 Режимы управления интервалами

Режим Описание
АБ (ControlMode.AB) Классическая автоблокировка. Маршрут освобождается целиком после проследования поезда.
ВС, Методика А (ControlMode.VC, vc_methodology="A") Виртуальная сцепка с секционным освобождением: входная секция маршрута освобождается через vc_min_headway_s после начала движения, что позволяет следующему поезду занять маршрут раньше.
ВС, Методика Б (ControlMode.VC, vc_methodology="B") Специальный режим по Бушуеву–Голочалову: предварительное резервирование маршрутов для всего пакета, синхронизация отправлений, приоритет пакетных маршрутов.

Сравнение Методик А и Б — предмет специального вопроса ВКР.

1.4 Сценарии

Сценарий Что моделирует
Demo-AB Базовый режим АБ, 8 поездов
Demo-VC-A ВС, Методика А — те же поезда с укороченными интервалами
Demo-VC-B ВС, Методика Б — пакетное резервирование
VC-Packet-Split Разделение пакета на подходе (поезд отклоняется на другой путь)
VC-Recovery Восстановление графика после сбоя (задержка 480 с), режим ВС
AB-Recovery Восстановление графика после сбоя, режим АБ (для сравнения)

1.5 Экспорт результатов

  • CSV по каждому поезду: времена прибытия/отправления, время хода, средняя и максимальная скорость (sim_results_*.csv).
  • Задержки относительно плановых времён (delays_*.csv).
  • Лог событий станции (events_log_*.csv).
  • Сводная таблица throughput_comparison.csv по всем запущенным сценариям.
  • Графики: профили движения, диаграммы занятости маршрутов, сравнение пропускной способности.
  • Markdown-отчёты report_<scenario>.md.

2. Установка

git clone https://github.com/fedotdev/PIMPS.git
cd PIMPS

python -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate

pip install -r requirements.txt

Note

Требуется Python 3.10+.

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

PIMPS/
├── run_example.py              # Точка входа: запуск сценариев и генерация отчётов
├── requirements.txt
│
├── config/                     # Конфигурации подвижного состава
│   ├── 2ES5k.yaml              #   Локомотив 2ЭС5К (тяговые/тормозные характеристики)
│   ├── demo_loco.yaml          #   Демо-локомотив
│   └── demo_train.yaml         #   Демо-поезд (масса, длина, число осей)
│
├── stations/                   # Конфигурации станций
│   ├── demo_station.yaml       #   Упрощённая демо-станция
│   └── miitovskaya_station.yaml #  Станция «Миитовская» (маршруты, секции, стрелки)
│
├── src/
│   ├── models.py               # Dataclass-модели: StationConfig, TrainState,
│   │                           #   SimResult, PhysicsResult и др.
│   ├── simulation.py           # SimPy-модель: train_process, диспетчер,
│   │                           #   секционное освобождение
│   │
│   ├── traction/               # Тяговые расчёты
│   │   ├── loader.py           #   Парсинг YAML (тяговые/тормозные характеристики)
│   │   └── dynamics.py         #   ОДУ движения поезда (solve_ivp, RK45)
│   │
│   ├── interlocking/           # Модель электрической централизации
│   │   ├── loader.py           #   Загрузка схемы станции из YAML
│   │   └── engine.py           #   InterlockingEngine: конфликты, маршрутизация,
│   │                           #   секционное и пакетное управление
│   │
│   └── renderers/              # Вывод результатов
│       ├── metrics.py          #   Агрегированные метрики, экспорт CSV
│       └── plots.py            #   Графики (профили, занятость, throughput)
│
├── tests/                      # Тесты
│   ├── conftest.py
│   ├── test_traction_loader.py
│   ├── test_traction_dynamics.py
│   ├── test_interlocking_loader.py
│   ├── test_interlocking_engine.py
│   └── test_simulation.py
│
└── output/                     # Генерируется при запуске
    ├── data/                   #   CSV с профилями и результатами
    ├── profiles/               #   PNG-графики V(S), T(S)
    ├── station/                #   Диаграммы занятости маршрутов
    └── summary/                #   throughput_comparison, отчёты, графики

4. Быстрый старт

4.1 Запуск всех сценариев (Windows)

.venv/Scripts/python.exe run_example.py

Скрипт последовательно запускает все определённые сценарии. Результаты записываются в output/.

4.2 Основные выходные файлы

После запуска в output/ появятся:

Файл Содержание
data/sim_results_<scenario>.csv Поездные результаты: времена, скорости
data/delays_<scenario>.csv Задержки относительно расписания
data/events_log_<scenario>.csv Журнал событий станции
summary/throughput_comparison.csv Сводная таблица по всем сценариям
summary/report_<scenario>.md Краткий Markdown-отчёт
station/occupancy_<scenario>.png Диаграмма занятости маршрутов
profiles/*.png Профили движения V(S), T(S)

4.3 Чтение результатов

import pandas as pd

throughput = pd.read_csv("output/summary/throughput_comparison.csv") print(throughput[["scenario", "throughput_trains_per_hour", "headway_avg_s", "delay_depart_avg_s"]])


5. Описание моделей

5.1 Тяговая модель

Силы тяги и сопротивления рассчитываются по формулам ПТР РЖД 2016 (сопротивление Вирта, кривые F(v), тормозные характеристики). Движение описывается системой ОДУ, решаемой методом Дорманда–Принса (RK45).

Результат — структура PhysicsResult:

  • vprofile — скорость по пути;
  • tprofile — время;
  • spoints — координаты;
  • head_to_tail_s — разность времени между проходом головы и хвоста.

5.2 Имитационная модель станции

Для каждого поезда создаётся SimPy-процесс train_process:

  1. Поезд прибывает в расчётное время.
  2. Диспетчер (_dispatcher_process) назначает маршрут с учётом конфликтов ЭЦ.
  3. Время прохождения маршрута берётся из PhysicsResult.
  4. В режиме ВС (Методика А) входная секция освобождается через vc_min_headway_s — следующий поезд может начать движение раньше.
  5. В режиме ВС (Методика Б) маршруты резервируются для всего пакета заранее.
  6. Маршрут освобождается после завершения движения.

События (прибытие, запрос, захват, отправление, освобождение) логируются в events_log_*.csv.

5.3 Метрики

Метрика Описание
throughput_trains_per_hour Пропускная способность за расчётный интервал
headway_avg_s Средний интервал отправления
dwell_avg_s / dwell_max_s Средний / максимальный простой на станционных путях
throat_utilization Доля времени занятости горловины
delay_arrive_avg_s / delay_depart_avg_s Средние задержки прибытия / отправления
packet_integrity_ratio Доля сохранённых пакетов (только ВС)
max_intra_packet_gap_s Максимальный разрыв внутри пакета

6. Конфигурация

Станция (stations/*.yaml)

Описывает топологию: пути приёма/отправления, стрелки, сигналы, маршруты (приёма и отправления), секции каждого маршрута и матрицу конфликтующих маршрутов.

Подвижной состав (config/*.yaml)

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

7. Тесты

pytest tests/ -v

Покрытие: загрузка конфигов (тяга и станция), корректность ОДУ, логика интерлокинга (конфликты, блокировка секций), базовые сценарии симуляции.


8. Ограничения

  • Модель одномерная — профиль пути задаётся последовательностью участков с уклонами и радиусами, без детальной продольной схемы станции.
  • Движение внутри станционного маршрута упрощено до «проталкивания» профиля V(S) через ресурс маршрута (нет пошаговой модели роспуска, маневров).
  • Сценарии ориентированы на демо-пример, а не на точное воспроизведение конкретной станции РЖД.
  • Виртуальная сцепка моделируется на уровне управления интервалами; координация между бортовыми системами поездов (V2V) не реализована.

About

ПИМПС — Программа имитационного моделирования пропускной способности железнодорожной станции

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages