В дискретном пространстве, один агент занимает одну ячейку. Вы можете перемещать агента из его ячейки в другую конкретную или случайную ячейку или в ячейку в определенном направлении при условии, что она пуста.
Ячейки в дискретном пространстве определяются строками и столбцами. Иногда вам может понадобиться узнать текущее расположение агента до того, как вы начнете его перемещать.
int getR() - возвращает строку ячейки текущего расположения агента.
int getC() - возвращает столбец ячейки текущего расположения агента.
AnyLogic предоставляет следующий API для перемещения агентов в двумерном дискретном пространстве.
Если вы задаете перемещение агента в какую-либо ячейку, убедитесь, что ячейка уже не занята, иначе вы можете получить ошибку.
jumpToCell( int r, int c )
- помещает агента в ячейку с заданными координатами, если эта ячейка занята, то выдает ошибку.
Параметры:
r
- строка ячейки
c
- столбец ячейки
void moveToNextCell( CellDirection dir )
- помещает агента в соседнюю ячейку, располагающуюся в заданном направлении от его текущей ячейки.
Параметр направления
dir
может иметь следующие значения в зависимости от
типа соседства, Мурова или Евклидова:
Термин "псевдослучайная", используемый в описанных ниже методах, означает, что для повышения производительности алгоритм нахождения свободной ячейки может выбирать свободные ячейки с неравными долями вероятностями. Чем менее населено пространство, тем более справедливым будет этот выбор.
int[] findRandomEmptyCell() - возвращает координаты {строка, столбец} псевдослучайно выбранной свободной ячейки или null, если все ячейки заняты.
boolean jumpToRandomEmptyCell() - помещает агента в псевдослучайно выбранную свободную ячейку, возвращает false, если все ячейки заняты.
Следующие функции позволяют перемещать агентов в ячейки, которые уже заняты. Главное условие остается в силе: один агент занимает одну ячейку. Если бы вам пришлось использовать обычные функции движения, чтобы обменять агентов в ячейках, вам бы понадобилась еще одна ячейка, пустая, а процесс выполнялся бы в три шага: переместить первого агента в пустую ячейку, переместить другого агента в освободившуюся ячейку и переместить первого агента в пустую ячейку второго. С помощью функций, описанных ниже, вы можете выполнить подобную операцию в одно действие.
void swapWithCell(int r, int c)
- меняет местами агента с агентом в ячейке заданных строки и столбца. Если эта ячейка пуста, то просто перемещает туда этого агента.
void swapWithNextCell(CellDirection dir)
- меняет местами агента с агентом в соседней ячейке в заданном направлении.
Параметры:
dir
- направление (NORTH,
SOUTH, ...,
NORTHEAST, ...)
void swapWithAgent(Agent anotherAgent)
- агент меняется ячейками с заданным агентом.
Параметры:
anotherAgent
- агент, с которым меняются ячейками. Должен быть расположен в той же среде.