Когда вы инициируете движение агента, он начинает движение с той скоростью, которая задана для этого агента как его начальная скорость.
Обратите внимание, что в AnyLogic начальная скорость агента может задаваться сразу в нескольких местах. Давайте перечислим их, а также определим, какие из них приоритетнее над другими. Итак, скорость движения агента может быть задана в следующих элементах:
- Тип агента. Свойство Начальная скорость в секции Размеры и движение. Здесь задается начальная скорость по умолчанию для всех агентов этого типа.
- Одиночный агент / популяция агентов. Свойство Начальная скорость в секции Размеры и движение. Здесь вы можете переопределить значение, заданное в типе агента, для этого конкретного агента (или агентов этой популяции). Важное примечание про значения по умолчанию и то, как они могут меняться. Пока вы самостоятельно не измените это значение, оно будет автоматически изменяться при изменении начальной скорости, заданной для соответствующего типа агента. Если же вы введете тут какое-то иное значение, то эта зависимость больше работать не будет.
-
Блок Source Библиотеки моделирования процессов (свойство Скорость) - тут задается скорость агентов, создаваемых этим блоком. Переопределяет значения, заданные как в типе агента, так и в самом агенте или популяции.
В этой статье мы не рассматриваем аналогичные блоку Source блоки других библиотек AnyLogic, поскольку они создают специфических для этих библиотек агентов (пешеходов, автомобили и т.д.). В целом эти блоки предоставляют похожие свойства для задания скорости, например, у создающего пешеходов блока PedSource Пешеходной библиотеки есть свойство Начальная скорость в секции Пешеход), и аналогично у блоков TrainSource, CarSource и т.д.
- Если вы задаете движение агента с помощью блока MoveTo, вы также можете задать требуемую скорость в свойствах этого блока. Для этого выберите опцию Задать скорость агента, и тогда скорость задаваемого блоком движения агента можно будет явно задать ниже в поле Скорость. Это значение переопределяет все остальные настройки скорости этого агента для инициируемого блоком движения (и только для него!).
Во всех случаях вы можете выбрать единицы измерения этой скорости. По умолчанию скорость задана равной 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 — константа, задающая единицы измерения скорости
-
Как мы можем улучшить эту статью?
-