Движение в дискретном пространстве

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

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

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 - агент, с которым меняются ячейками. Должен быть расположен в той же среде.


См. также

Дискретное пространство

Движение агентов

Скорость движения агента

Поворот анимации агента

Действие при достижении точки назначения