Есть ли способ создать единую функцию для получения координат в main субагента, присутствующего в нескольких агентах верхнего уровня?

#anylogic

#anylogic

Вопрос:

Существует ли простой способ получить точки координат агента в зависимости main от того, когда этот агент является младшим агентом нескольких других агентов?

Например:

У меня есть Кассовый агент. Box Как в «моем Shelf «, так и Pallet в «агентах» есть группы агентов, и Pallet агенты могут быть расположены либо в main Rack агентах «или».

Так что у меня есть:

main gt; Shelf gt; Box

main gt; Pallet gt; Box

main gt; Rack gt; Pallet gt; Box

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

Так:

Для коробок в поддонах на стеллажах: CoordBoxInMain = CoordBox CoordPallet CoordRack

Для коробок на полках: CoordBoxInMain = CoordBox CoordShelf

Но теперь мне интересно, есть ли способ создать единственную функцию, которая напрямую получает координаты моего Box агента, без необходимости создавать несколько различных функций, каждая из которых ссылается на другую последовательность агентов верхнего уровня?

Спасибо.

Ответ №1:

Вы можете использовать этот небольшой фрагмент кода

 Agent agent = myBox; double xCoord = agent.getX(); while (agent.getOwner() != null) {  xCoord  = agent.getOwner().getX();  agent = agent.getOwner(); }  traceln(xCoord);   

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

Вам нужно сделать то же самое для Y и Z, а также

Я протестировал его на простой модели, и он работает

введите описание изображения здесь

Комментарии:

1. Удивительный маленький фрагмент кода, и как обидно, что я не додумался до такого простого решения. Все это время было потрачено впустую на написание избыточных функций. Спасибо тебе, Жако-Бен.

2. Обратите внимание, что это работает (или, скорее, дает значимое значение) только в том случае, если масштабы всех агентов одинаковы. В более общем плане вы должны настроить в соответствии с масштабами, чтобы результат был правильным (в пикселях) с учетом масштаба Main (или независимо от того, что является вашим «целевым» окружающим агентом).