TransporterControl

Настраивает правила навигации в сети и алгоритм маршрута для транспортеров, двигающихся по заданным путям.

Если вы используете заданные по умолчанию правила навигации (в свойстве Навигация выбрана опция Автоматическая), то столкновения транспортеров в сетевых узлах могут устраняться автоматически (это задается опцией Устранять коллизии). Подъехав к узлу, транспортеры остановятся. По истечении заданного отрезка времени, задаваемого в поле Таймаут определения коллизий, они продолжат движение (каждый по своему маршруту), наезжая друг на друга. 

С помощью опции Избегать коллизий вы можете оптимизировать движение транспортеров: если по пути (через узел) должны будут одновременно проехать несколько транспортеров, то данный путь/узел будет доступен только для одного из них. Остальные уступят дорогу, чтобы избежать столкновения.

Если задан индивидуальный алгоритм навигации, то каждый узел и/или путь будет проверяться на выполнение соответствующих условий. При выполнении этих условий транспортер сможет продолжать движение по узлу/пути.

Данный блок также позволяет задать индивидуальный алгоритм маршрута для транспортера с учетом путей и узлов, которые должны быть исключены.

Демонстрационная модель: TransporterControl Overtaking

Параметры

Навигация
Задает правила движения транспортеров в сети. Если выбрано значение Автоматическая, то исполняющий модуль AnyLogic будет по умолчанию устранять столкновения транспортеров и оптимизировать их движение. Если выбрано значение Другая, то вы можете задать собственные условия, согласно которым транспортеры будут передвигаться по путям и узлам сети.
Синтаксис: boolean automaticNavigation
Установить новое значение во время выполнения: set_automaticNavigation(новое значение)
Допустимые значения: truefalse
Устранять коллизии
[Параметр виден, если для опции Навигация выбрано значение Автоматическая] Если опция включена, столкновения транспортеров будут автоматически устраняться исполняющим модулем AnyLogic. Если по истечении времени, выделенного по умолчанию на устранение столкновения, это столкновение не будет устранено, то транспортеры продолжат движение, наезжая друг на друга в соответствующем точечном узле. Если опция выключена, то столкновение транспортеров приведет к остановке модели, при этом появится сообщение об ошибке.
Синтаксис: boolean resolveCollisions
Установить новое значение во время выполнения: set_resolveCollisions(новое значение)
Избегать коллизий
[Параметр виден, если для опции Навигация выбрано значение Автоматическая] Если опция выбрана, то исполняющий модуль AnyLogic будет оптимизировать движение транспортеров таким образом, чтобы максимально снизить вероятность столкновений, однако это не гарантирует предотвращение всех столкновений. Алгоритм анализирует маршруты транспортеров. В случае, когда один и тот же путь необходим нескольким транспортерам одновременно, он будет доступен только одному из них, а остальные транспортеры будут ждать, пока этот путь не освободится.
Синтаксис: boolean avoidCollisions
Установить новое значение во время выполнения: set_avoidCollisions(новое значение)
Таймаут определения коллизий [динамический]
[Параметр виден, если для опции Навигация выбрано значение Автоматическая] Отрезок времени, в течение которого транспортеры не двигаются, встретившись на перекрестке, моделируя тем самым устранение столкновения.
Тип значения: double
Локальная переменная: Agent unit - агент
Может войти в узел [динамический]
[Параметр виден, если для опции Навигация выбрано значение Другая] Здесь вы можете задать выражение с условиями, которые будут проверяться для каждого узла в маршруте. Если выражение возвращает true, транспортер может попасть в этот узел.
Тип значения: boolean
Локальные переменные: T unit - транспортер
                                             Agent agent - агент
                                             Node node - узел
Может войти на путь [динамический]
[Параметр виден, если для опции Навигация выбрано значение Другая] Здесь вы можете задать выражение с условиями, которые будут проверяться для каждого пути в маршруте. Если выражение возвращает true, транспортер может попасть на этот путь.
Тип значения: boolean
Локальные переменные: T unit - транспортер
                                             Agent agent - агент
                                             Path path - путь
Найти путь [динамический]
Здесь вы можете задать алгоритм, согласно которому будет прокладываться индивидуальный маршрут.
Тип значения: RouteData
Локальные переменные: T unit - транспортер
                                             Agent agent - агент
                                             ILocation source - исходная точка
                                             ILocation target - цель
Исключить пути [динамический]
Список путей, которые вы хотите исключить из автоматически рассчитываемого маршрута транспортеров. 
Тип значения: Path[]
Локальные переменные: T unit - транспортер
                                             Agent agent - агент
Исключить узлы [динамический]
Список узлов, которые вы хотите исключить из автоматически рассчитываемого маршрута транспортеров.
Тип значения: Node[]
Локальные переменные: T unit - транспортер
                                             Agent agent - агент
Действия
При входе на путь [код]
Здесь вы можете задать Java код, который будет выполняться, когда транспортер попадает на путь.
Локальные переменные: T unit - транспортер, который начал движение по этому пути
                                             Path path - путь, по которому движется транспортер
При выходе с пути [код]
Здесь вы можете задать Java код, который будет выполняться, когда транспортер покидает путь.
Локальные переменные: T unit - транспортер, покидающий путь
                                             Path path - путь, по которому движется транспортер
При входе в узел [код]
Здесь вы можете задать Java код, который будет выполняться, когда транспортер входит в узел. Локальные переменные: T unit - транспортер, поступающий в узел
                                             Node node - узел, в который входит транспортер
При выходе из узла [код]
Здесь вы можете задать Java код, который будет выполняться, когда транспортер покидает узел. Локальные переменные: T unit - транспортер, покидающий в узел
                                             Node node - узел, в который входит транспортер

Функции

RouteData findShortestPath(ILocation source, ILocation target, Node[] nodesToAvoid, Path[] pathsToAvoid)- рассчитывает кратчайший маршрут из одной точки в другую, учитывая узлы и пути, которые должны быть исключены.

RouteData findShortestPath(ILocation source, ILocation target, Node[] nodesToAvoid, Path[] pathsToAvoid, Path[] pathsToInclude) - рассчитывает кратчайший маршрут из одной точки в другую, учитывая узлы и пути, которые должны быть исключены, а также пути, которые должны быть включены.

int getCollisions() - возвращает общее количество столкновений, произошедших в модели.

void recalculateNodeAccess(Node) - проверяет условия доступа к узлу, заданные в параметре Может войти в узел, и открывает/закрывает доступ по результатам проверки. В качестве аргумента передается проверяемый узел.

void recalculatePathAccess(Path) - проверяет условия доступа к пути, заданные в параметре Может войти на путь, и открывает/закрывает доступ по результатам проверки. В качестве аргумента передается проверяемый путь.