#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 (или независимо от того, что является вашим «целевым» окружающим агентом).