AnyLogic
Развернуть
Размер шрифта

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

Когда вы инициируете движение агента, он начинает движение с той скоростью, которая задана для этого агента как его начальная скорость.

Применимо только к агентам, находящимся в непрерывном или в ГИС пространстве.

Обратите внимание, что в AnyLogic начальная скорость агента может задаваться сразу в нескольких местах. Давайте перечислим их, а также определим, какие из них приоритетнее над другими. Итак, скорость движения агента может быть задана в следующих элементах:

  • Тип агента. Свойство Начальная скорость в секции Размеры и движение. Здесь задается начальная скорость по умолчанию для всех агентов этого типа.

  • Одиночный агент / популяция агентов. Свойство Начальная скорость в секции Размеры и движение. Здесь вы можете переопределить значение, заданное в типе агента, для этого конкретного агента (или агентов этой популяции). Важное примечание про значения по умолчанию и то, как они могут меняться. Пока вы самостоятельно не измените это значение, оно будет автоматически изменяться при изменении начальной скорости, заданной для соответствующего типа агента. Если же вы введете тут какое-то иное значение, то эта зависимость больше работать не будет.

  • Блок Source Библиотеки моделирования процессов (свойство Скорость) - тут задается скорость агентов, создаваемых этим блоком. Переопределяет значения, заданные как в типе агента, так и в самом агенте или популяции.
    В этой статье мы не рассматриваем аналогичные блоку Source блоки других библиотек AnyLogic, поскольку они создают специфических для этих библиотек агентов (пешеходов, автомобили и т.д.). В целом эти блоки предоставляют похожие свойства для задания скорости, например, у создающего пешеходов блока PedSource Пешеходной библиотеки есть свойство Начальная скорость в секции Пешеход), и аналогично у блоков TrainSource, CarSource и т.д.
  • Если вы задаете движение агента с помощью блока MoveTo, вы также можете задать требуемую скорость в свойствах этого блока. Для этого выберите опцию Задать скорость агента, и тогда скорость задаваемого блоком движения агента можно будет явно задать ниже в поле Скорость. Это значение переопределяет все остальные настройки скорости этого агента для инициируемого блоком движения (и только для него!).
Помните, что скорость агента изменяется, если вы инициируете движение с помощью функций moveToInTime().

Во всех случаях вы можете выбрать единицы измерения этой скорости. По умолчанию скорость задана равной 10 м/с.

В приведенном примере модели у типов агента Car и Train оставлены значения по умолчанию, а реальные значения заданы у популяций cars и trains.

Демо-модель: Route Provider Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Динамическое изменение скорости

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

При необходимости вы можете смоделировать постепенное изменение скорости, меняя ее динамически в подходящие моменты времени с помощью вызова функции setSpeed(). Для этого можно, например, диаграмму состояний с таким состояниями, как Неподвижный, Медленный, Средний, Быстрый и т.д. и вызывать функцию в переходах, происходящих, например, по таймауту.

Функции
Функция Описание
double getSpeed() Возвращает скорость агента, в метрах в секунду. Применимо только для агентов, живущих в непрерывном или в ГИС пространстве. Обратите внимание, что ненулевое значение скорости не означает, что агент движется в данный момент - он начинает движение только при вызове функции moveTo().
double getSpeed(SpeedUnits units) Возвращает скорость агента, в заданных единицах измерения скорости. Применимо только для агентов, живущих в непрерывном или в ГИС пространстве. Обратите внимание, что ненулевое значение скорости не означает, что агент движется в данный момент - он начинает движение только при вызове функции moveTo().

units — константа, задающая единицы измерения скорости
void setSpeed(double speedInMPS) Задает новое значение скорости для агента (в метрах в секунду). Если в момент вызова функции агент двигался, то он продолжит движение с новой скоростью. Применимо только для агентов, живущих в непрерывном или в ГИС пространстве. Обратите внимание, что ненулевое значение скорости не означает, что агент движется в данный момент - он начинает движение только при вызове функции moveTo().

speedInMPS — новое значение скорости
void setSpeed(double speedInUnits, SpeedUnits units) Задает новое значение скорости для агента (в заданных единицах). Если в момент вызова функции агент двигался, то он продолжит движение с новой скоростью. Применимо только для агентов, живущих в непрерывном или в ГИС пространстве. Обратите внимание, что ненулевое значение скорости не означает, что агент движется в данный момент - он начинает движение только при вызове функции moveTo().

speedInUnits — новое значение скорости
units — константа, задающая единицы измерения скорости
Как мы можем улучшить эту статью?