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

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

Движение в непрерывном пространстве имеет наибольшее количество функций. Также имеются специальные функции, задающие движение в пространстве ГИС и дискретном пространстве.

Свои особенности имеет движение агентов в сети и вне сети.

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

Функции

Во-первых, существуют функции, чтобы получать информацию о текущем местоположении (эти функции работают и при движении агента). Кроме того, имеется набор функций для перемещения агента и получения соответствующей информации.

Функции moveTo() и moveToInTime() имеют несколько нотаций, позволяя задавать местоположение цели различными способами.

Вы можете задать местоположение как:

Задание начального местоположения при запуске модели

Функция

Описание

void setXY(double x, double y)

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

Параметры:
x - X-координата местоположения
y - Y-координата местоположения


Определение текущего местоположения

Функция

Описание

double getX()

Возвращает текущую X-координату агента в непрерывном пространстве.

double getY()

Возвращает текущую Y-координату агента в непрерывном пространстве.

double getZ()

Возвращает текущую Z-координату агента в непрерывном пространстве.

Position getPosition()

Возвращает текущие X- и Y-координаты (и Z-координату также, в случае 3D пространства) и угол поворота агента в непрерывном пространстве.


Задание движения агента

Функция

Описание

void moveTo(double x, double y)

Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве.

Параметры:
x - X-координата местоположения
y - Y-координата местоположения

void moveTo(double x, double y, double z)

Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве.

Параметры:
x - X-координата местоположения
y - Y-координата местоположения
z - Z-координата местоположения

void moveTo(Point location)

Инициирует перемещение агента в направлении заданного местоположения в непрерывном 3D пространстве.

Параметры:
location - место назначения

void moveTo(Node node, Point location)

Инициирует перемещение агента в заданный узел сети.

Параметры:
node - узел сети.
location - (дополнительно) местоположение внутри узла, может быть null

void moveTo(Attractor attractor)

Инициирует перемещение агента в заданный аттрактор.

Параметр:
attractor - аттрактор

void moveToNearestAgent
(java.lang.Iterable agents)

Инициирует перемещение агента к ближайшему агенту из данной коллекции. Прекращает какое-либо движение в этот момент.

Параметр:
agents - коллекция агентов

boolean isMoving()

Проверяет, движется ли агент в текущий момент в непрерывном 3D пространстве.

Возвращает: true, если агент движется; иначе, false

double timeToArrival()

Если агент движется, то возвращает время (в единицах модельного времени), нужное ему для того, чтобы прибыть в место назначения, с учетом того, что скорость не изменится. Если агент не движется, возвращает 0.

void stop()

Останавливает агента (если он двигался); агент остается при этом в том же месте, и Действие при достижении места назначения не выполняется.


Перемещение за указанное время

Функция

Описание

void moveToInTime(Point location, double tripTime)

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

Параметры:
location - место назначения
tripTime - время перемещения

void moveToNearestAgent
(java.lang.Iterable agents, double tripTime)

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

Параметры:
agents - коллекция агентов
tripTime - время перемещения

void moveToInTime(double x, double y, double tripTime)

Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве.
Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.

Параметры:
x - X-координата местоположения
y - Y-координата местоположения
tripTime - время перемещения

void moveToInTime(double x, double y, double z, double tripTime)

Инициирует перемещение агента в место с заданными координатами в непрерывном 3D пространстве.
Изменяет скорость агента так, чтобы достичь цели за tripTime единиц модельного времени.

Параметр:
x, y, z : X-, Y-, Z- координаты местоположения
tripTime - время перемещения

void moveToInTime(Node node, Point location, double tripTime)

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

Параметры:
node - узел сети.
location - (дополнительно) место внутри узла, может быть null
tripTime - время перемещения

void moveToInTime(Attractor attractor, double tripTime)

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

Параметры:
attractor - аттрактор
tripTime - время перемещения


Мгновенное перемещение ("скачком")

Функция

Описание

void jumpTo(double x, double y)

Немедленно помещает агента в заданное место в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.

Параметры:
x - X-координата нового местоположения
y - Y-координата нового местоположения

void jumpTo(double x, double y, double z)

Немедленно помещает агента в заданное место в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.

Параметры:
x - X-координата нового местоположения
y - Y-координата нового местоположения
z - Z-координата нового местоположения

void jumpTo(Node node, Point location)

Немедленно помещает агента в заданный узел сети в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.

Параметры:
node - узел сети
location - новое местоположение

void jumpTo(Point location)

Немедленно помещает агента в заданное место в непрерывном 3D пространстве. Прекращает любое движение. Не вызывает Действие при достижении места назначения.

Параметр:
location - новое местоположение


Получение координат цели движения

Функция

Описание

double getTargetX()

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

double getTargetY()

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

double getTargetZ()

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


Определение расстояния

Функция

Описание

double distanceTo(Agent other)

Возвращает расстояние от текущего до указанного агента в непрерывном 3D пространстве.

Параметр:
other - другой агент

double distanceTo(double x, double y)

Возвращает расстояние от данного агента до заданной точки в непрерывном 3D пространстве.

Параметры:
x - X-координата точки
y - Y-координата точки

double distanceTo(double x, double y, double z)

Возвращает расстояние от данного агента до заданной точки (x, y, z) в непрерывном 3D пространстве.

Параметры:
x - X-координата точки
y - Y-координата точки
z - Z-координата точки

double distanceTo(Point p)

Возвращает расстояние от данного агента до заданной точки в непрерывном 3D пространстве.

Параметр:
p - точка


Определение и задание скорости

Функция

Описание

double getSpeed()

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

void setSpeed(double v)

Задает скорость (в пикселях в секунду), с которой агент будет передвигаться. Если на момент вызова метода агент движется, то он продолжит движение с новой скоростью. Если агент не движется, то он не начнет движение, пока вы не вызовете метод moveTo().

Параметр:
v - новая скорость


Определение и задание поворота

Функция

Описание

double getRotation()

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

void setRotation(double rotation)

Задает угол поворота анимации агента (в радианах, по часовой стрелке). Этот угол поворота будет переопределен при следующем вызове метода moveTo().

Параметры:
rotation - угол поворота анимации агента (в радианах)

void setAutomaticHorizontalRotation (boolean yes)

Заставляет агента автоматически вращаться во время перемещений.

Параметр:
yes - true - агент будет вращаться во время движения, false - поворот не изменяется

boolean isAutomaticHorizontalRotation()

Возвращает true, если агент настроен вращаться во время движения, иначе false.

void setVerticalRotation
(double rotation)

Устанавливает вертикальный поворот (угол в радианах) вдоль оси Z анимации агента в 3D пространстве. В зависимости от настроек автоматического вращения, этот поворот может быть отменен во время следующего вызова moveTo() или во время следующего движения вдоль пути/ломаной.

Параметр:
rotation - угол вертикального поворота агента в радианах

double getVerticalRotation()

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

Возвращает: текущий угол поворота агента вокруг оси Y в радианах

void setAutomaticVerticalRotation
(boolean yes)

Заставляет агента автоматически вращаться (вертикально, вдоль оси Z) во время движения в 3D пространстве.

Параметры:
yes - true - агент будет вращаться во время движения (например, коробка, которая едет по конвейеру), false - поворот не меняется (например, пешеход перемещается на уровень выше)

boolean isAutomaticVerticalRotation()

Возвращает true, если агент настроен вращаться (вертикально, вдоль оси Z) во время движения в 3D пространстве, иначе false.

Возвращает:
true, если агент будет вращаться во время движения (например, коробка, которая едет по конвейеру), false - поворот не меняется (например, пешеход перемещается на уровень выше)

Также существуют специфические функции для движения в дискретном пространстве и пространстве ГИС.

Чтобы задать начальную скорость и угол поворота агента
  1. Откройте панель Свойства типа агента, щелкнув по нему мышью в панели Проекты.
  2. Откройте секцию свойств Размеры и движение.
  3. Укажите начальную скорость агентов этого типа в поле Начальная скорость (в метрах в секунду).
  4. Если вы хотите вращать фигуру анимации по направлению движения, поставьте флажки в опциях ниже.

Чтобы задать действие, которое должно выполняться при достижении агентом точки назначения (после того, как выполнится метод moveTo())

  1. Откройте секцию свойств типа агента Действия агента
  2. Впишите код Java, задающий действие в поле При достижении точки назначения.

Хотя AnyLogic напрямую поддерживает движение на постоянной скорости и при нулевом ускорении, вы можете смоделировать ускорение/торможение, изменяя скорость в подходящие моменты времени. Вы можете использовать диаграмму состояний с таким состояниями как Статический, Медленный, Средний, Быстрый и т.д. и переходы по таймауту, чтобы управлять движением.