Предотвращение столкновений с другими объектами при перемещении агента в указанное c место назначения - PullRequest
0 голосов
/ 10 февраля 2020

В моей модели есть несколько свободно движущихся агентов, которые перемещаются к указанным c узлам. Я использую функцию ...

moveTo(node)

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

Я уже взглянул на пример модели "Блуждающие слоны", где слонам разрешено ходить по районам с водой. Решение в том, что если слон встречает воду в направлении, в котором он движется в данный момент, он случайным образом ищет другое направление, пока не найдет его без воды. Однако этот подход не совсем подходит для моей проблемы, поскольку слоны в модели бродят без какого-либо определенного c пункта назначения. Я ищу метод, который работает для агента, который путешествует к определенной c точке. В лучшем случае, агент будет искать кратчайший путь вокруг препятствия, чтобы добраться до места назначения.

Редактировать 1: На следующем рисунке в двух словах показана моя проблема. С левой стороны - структура моей модели, а с правой стороны - диаграмма состояний моего пользовательского агента. Что происходит в модели: 3 источника являются производящими агентами, которые будут задерживаться на неопределенное время (задержка останавливается с помощью stopDelay ()). Каждый раз, когда агент вводит задержку, задержка добавляется в запрос на сбор. Мои обычные проверки чеков в al oop, пока коллекция не содержит хотя бы один запрос. Затем клиент случайным образом выбирает запрос (т.е. объект задержки) для обслуживания. Каждая задержка связана с узлом (коллекция processNodes отображает задержки на узлы). Теперь я хочу привести свой кастомагент к Transporter и переместить его в соответствующий узел. Агент должен избегать столкновений с зачищенными стенами в модели. Я хочу избежать захвата и освобождения ресурсов. Я просто хочу адаптировать поведение агента транспорта из библиотеки обработки материалов к моему агенту.

Редактировать 2: В моем текущем испытательном стенде мой пользовательский агент не рассматривает узел 1 или узел 2. Для тестирования агент должен только пытаться достичь узла без каких-либо коллизий.

AnyLogic model

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Нет встроенного способа, если вы не используете транспортеры из библиотеки обработки материалов (или пешеходов). Они могут делать то, что вам нужно.

Так что проще всего будет временно преобразовать ваших агентов в транспортеров.

В противном случае вам придется что-то кодировать самостоятельно ...

0 голосов
/ 14 февраля 2020

Я нашел достаточное решение. Не совсем то, что я хотел, но это работает. Вопреки своему первоначальному намерению, я использую сейчас захват и освобождение для транспорта. Тем не менее, я добавил блокировку перед каждым захваченным блоком, и только ресурс, который решает обслуживать процесс, может разблокировать соответствующую блокировку. Управление при входе разблокированного удержания гарантирует, что удержание снова блокируется непосредственно, как только один агент проходит через него. Для случая, когда другие пользователи также заинтересованы в решении, я приложил блок-схему процесса и диаграмму состояний Transporter-Agent. Структура системы такая же, как в моем первоначальном вопросе.

Flow-Chart

State-Chart

...