В дискретном пространстве, один агент занимает одну ячейку. Вы можете перемещать агента из его ячейки в другую конкретную или случайную ячейку или в ячейку в определенном направлении при условии, что она пуста.
Ячейки в дискретном пространстве определяются строками и столбцами. Иногда вам может понадобиться узнать текущее расположение агента до того, как вы начнете его перемещать.
- int getR() возвращает строку ячейки текущего расположения агента.
- int getC() возвращает столбец ячейки текущего расположения агента.
AnyLogic предоставляет следующий API для перемещения агентов в двумерном дискретном пространстве.
Если вы задаете перемещение агента в какую-либо ячейку, убедитесь, что ячейка уже не занята, иначе вы можете получить ошибку.
Функция | Описание |
---|---|
void 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 агент, с которым меняются ячейками. Должен быть расположен в той же среде. |
-
Как мы можем улучшить эту статью?
-