Опыт применения ж/д библиотеки от компании NFP

Одно из основных преимуществ AnyLogic – наличие специализированных библиотек для моделирования транспортных потоков (Библиотека дорожного движения), промышленных процессов (Библиотека производственных систем), ж/д перевозок (Железнодорожная библиотека) и транспортировки жидких/сыпучих грузов (Библиотека моделирования потоков).

Андрей Гарифов, NFP, руководитель проектов
Андрей Гарифов,
руководитель проектов,
NFP

Задача

В этой статье я хочу поделиться опытом, полученным в ходе реализации проекта для одного из наших клиентов – крупной металлургической компании. Наша команда разрабатывала имитационную модель транспортировки угля в рамках ж/д инфраструктуры заказчика (транспортировка угля от шахт и карьеров на обогащение, а также транспортировка угля на ТЭЦ). Помимо перевозки угля необходимо было учесть процессы, связанные с передвижением контрагентских грузов (продукты питания и другие товары), так как для них использовалась та же система ж/д путей и тот же парк локомотивов.

Перед нами стояла непростая задача, так как нужно было учесть множество особенностей ж/д инфраструктуры:

  • высокую вариативность возможных маршрутов ж/д составов (инфраструктура заказчика включает более 350 путей);
  • необходимость проведения маневровых операций ж/д составом для движения из пункта А в пункт Б;
  • скоростные ограничения на отдельных путях и участках (перегоны, мосты, станции и т.д.).

В ходе реализации модели нам был очень полезен инструментарий, который предлагается встроенной ж/д библиотекой AnyLogic. Мы использовали элементы ж/д путей для разметки пространства, стандартных агентов типа Поезд и Вагон, блоки TrainMoveTo, TrainCouple и TrainDecouple для моделирования операций на железной дороге и другие элементы библиотеки. Это позволило нам правильно передать в модели особенности устройства путей (стрелки и развязки), перемещение поездов, а также операции сцепления и расцепления вагонов.

Для операций сцепления и расцепления отлично подошли стандартные блоки библиотеки, а вот с движением поездов возникли сложности, связанные с особенностями инфраструктуры заказчика:

1. Вариативность маршрутов следования поездов

Инфраструктура Заказчика включает более 350 путей. При этом в каждом конкретном сценарии модели любой из составов может следовать между любыми двумя или несколькими путями этой инфраструктуры, то есть возможных маршрутов следования – огромное количество.

2. Маневровые операции

В ходе следования составу часто приходится совершать маневровые операции. Рассмотрим простой пример:

Существует развязка на 2 пути:

Пример развязки на пути

Если состав следует по маршрутам А → Б, Б → А, Б → В или В → Б, то для моделирования этого процесса достаточно одного блока TrainMoveTo.

Если состав следует по маршрутам А → В или В → А, задача усложняется, так как составу нужно совершить маневр (в случае А → В состав должен проследовать на путь Б и реверсом проследовать на путь В). В этом случае, для моделирования процесса существует очевидное решение, использовать два блока TrainMoveTo (один – для следования по маршруту А → Б, второй – из Б в В.

В случае с нашим проектом ж/д инфраструктура заказчика выглядела примерно так:

Ж/д инфраструктура

В случае следования состава из А в Б при использовании подхода, приведенного выше, потребуется не два, а намного больше блоков TrainMoveToС учетом того, что таких маршрутов множество, понадобилось найти другое, более гибкое и универсальное решение.

3. Скоростные ограничения на отдельных путях и участках

Ж/д инфраструктура заказчика включает отдельные пути, где скорость следования состава ограничена:

  • ограничениями самой инфраструктуры (путей) и нормами безопасности. Например, действует ограничение по скоростному режиму на станциях;
  • грузоподъемностью локомотива и ландшафтом путей. В зависимости от направления движения (условно, "в горку" или "с горки"), скорость движения локомотива может отличаться, особенно, если локомотив следует с большим количеством груженых вагонов.

Стандартный функционал библиотеки AnyLogic позволяет задавать скорость движения состава в блоке TrainMoveTo, но эта скорость задается сразу для всех путей, по которым будет следовать состав, а не для каждого пути по отдельности. Очевидным решением было бы создать по отдельному блоку для каждого участка, но так как в нашей модели путей было более 350, потребовалось искать другое решение.

Решение: расширение от NFP для ж/д библиотеки

Для решения задач, описанных выше, мы разработали расширение для библиотеки – блок TrainMove. Он позволяет:

  • Не использовать множество блоков TrainMoveTo и при этом подходит даже для сложных маршрутов;
  • автоматически задавать маршрут следования состава из точки А в точку Б с маневрами;
  • задавать скоростные ограничения для каждого отдельного пути и его участков.

Принцип работы блока

Расширение работает по принципу оптимизированных циклов.

На стадии планирования маршрута происходят проверки, которые определяют существование пути A → Б, затем, если такой путь существует, алгоритм подбирает кратчайший путь при минимально возможном количестве маневров и расстоянии до конечной точки. После формируется маршрут и состав начинает следование с указанными заранее для него параметрами (скорость по умолчанию, отступы и т.д.).

В случае, если маршрут невозможен (например, длина состава не позволяет выполнить маневр на единственном коротком пути для последующего следования до конечной цели), блок TrainMove выдаст ошибку о том, что следование невозможно, с указанием "проблематичных" путей.



Подробнее о расширении – в файле документации >>

Работу расширения от компании NFP можно протестировать на демо-модели:

Похожие материалы