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

Прямоугольный узел

Узлы и пути являются элементами разметки пространства, которые задают местоположение агентов в моделируемом пространстве:

  • Узел задает место, в котором агенты могут находиться.
  • Путь графически задает траекторию движения агентов из одного места в другой.

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

Элемент разметки Прямоугольный узел задает область прямоугольной формы.

Существует еще два вида узлов, которые вы можете использовать:

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

Многоугольный узел. Используйте его, чтобы нарисовать узел сложной формы.

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

Ограничение скорости и доступа

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

Демо-модель: Areas with Limited Access for Transporters Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели. Демо-модель: Areas with Restrictions for Pedestrians Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Узлы, доступ в которые ограничен, автоматически меняют цвет на красный:

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

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

Доступ к агентам внутри узла

Когда мы говорим об агентах в контексте ограничения доступа в узел, мы подразумеваем только транспортеры и пешеходов, поскольку эти ограничения работают только для них.

По умолчанию AnyLogic не отслеживает количество агентов внутри узлов, где нет ограничения доступа. Если вы попробуете вызвать любую функцию, которая должна вернуть список агентов внутри такого узла, эта функция вернет пустой список. Для того, чтобы получить информацию об агентах внутри конкретного узла, необходимо сначала включить в этом узле ограничения доступа. Чтобы получить информацию о пешеходах, используйте функции из секции Агенты. Схожие функции для транспортеров можно найти в секции Транспортеры.

Если в вашей модели и пешеходы, и транспортеры двигаются через одни и те же узлы, функции из секции Агенты будут возвращать данные и о тех, и о других. Например, если в узле находится 5 транспортеров и 3 пешехода, функция getNumberOfAdmittedAgents() вернет число 8.

Чтобы добавить прямоугольный узел

  1. Перетащите элемент Прямоугольный узел из палитры Разметка Пространства в графический редактор.
  2. Измените размер узла так, как вам требуется. Теперь вы можете также настроить его свойства.

Свойства

Основные свойства

Имя — Имя фигуры.

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

Отображается на верхнем агенте — Если опция выбрана, то фигура будет видна на презентации типа агента, в который будет вложен данный агент.

Блокировать — Если опция выбрана, то фигура будет считаться заблокированной и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока вы не снимете с нее блокировку. Обычно это требуется, когда у вас есть какой-то фоновый рисунок, используемый как подложка для анимации, и вы хотите исключить возможность случайного редактирования этого фонового рисунка при рисовании фигур поверх него.

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

Расположение внутри — Задает расположение агентов внутри области:

Случайное
Упорядоченное

Аттракторы... — Щелкните эту кнопку, чтобы создать аттракторы внутри области. Аттракторами обозначают места, куда стремятся агенты.

Ограничение скорости и доступа

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

Ограничение скорости — Выберите эту опцию, чтобы ограничить скорость движения агентов до указанного значения.

Максимальная скорость — [Доступно, если выбрана опция Ограничение скорости] Максимально допустимая скорость агента внутри узла.

Ограничение доступа — Выберите эту опцию, чтобы ограничить доступ агентов в узел.

Доступ ограничен по — [Доступно, если выбрана опция Ограничение доступа] Здесь вы можете задать правила доступа агентов в узел. Доступ может быть ограничен по:

вместимости — количеству агентов внутри узла. Доступ в узел будет свободным для всех до тех пор, пока количество агентов в узле меньше или равно значению параметра Вместимость.
пропускной способности — количеству агентов, которые могут войти в узел за 1 единицу модельного времени. Доступ в узел будет свободным для всех до тех пор, пока количество агентов, входящих в узел за 1 единицу измерения интенсивности, меньше или равно значению параметра Пропускная способность.
расписанию — доступ контролируется Расписанием типа "да/нет". Узел закрыт во время интервала "да" и открыт во время интервала "нет".
условию — для каждого агента, который хочет войти в узел, проверяется заданное Условие. Если проверка возвращает значение true, агенту закрывается доступ в узел. Если проверка возвращает значение false, агент может войти в узел.
вызову функции close() — узел закрывается с помощью вызова функции close(). Чтобы открыть узел, вы можете использовать функцию open().

Вместимость — [Доступно если Доступ ограничен по: вместимости] Максимально допустимое количество агентов в узел. Доступ в узел закрывается, когда их количество превышает указанное здесь значение.

Пропускная способность — [Доступно если Доступ ограничен по: пропускной способности] Максимально допустимое количество агентов в узле в 1 единицу модельного времени. Доступ в узел закрывается, когда их количество превышает указанное здесь значение.

Расписание — [Доступно если Доступ ограничен по: расписанию] Расписание типа "да/нет", которое управляет доступом в узел. Узел закрыт во время интервала "да" для агентов указанного типа и открыт во время интервала "нет" для всех типов агентов.

Условие — [Доступно если Доступ ограничен по: условию] Булево выражение, которое должно проверяться для каждого агента, который хочет войти в узел. Если проверка возвращает значение true, агенту закрывается доступ в узел. Если проверка возвращает значение false, агент может войти в узел.

Избегать закрытых областей — [Доступно если Доступ ограничен по: расписанию / условию / вызову функции close()] Выберите эту опцию, чтобы транспортеры и пешеходы обходили закрытые узлы.

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

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

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

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

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

Внешний вид

Цвет заливки — Задает цвет заливки фигуры. Если вы не хотите, чтобы фигура была закрашена, выберите Нет заливки.

Цвет линии — Задает цвет линии. Если вы не хотите, чтобы линия контура была видна, выберите Нет линии.

Толщина линии — Задает толщину линии контура фигуры.

Стиль линии — [Доступно, только если сброшен флажок Отображать: Только 3D] Задает стиль линии контура фигуры. Выберите из выпадающего списка, хотите ли вы, чтобы линия была сплошная, точечная или пунктирная.

Местоположение и размер

Уровень — Уровень, на котором находится этот элемент.

X — x-координата начальной точки узла.

Y — y-координата начальной точки узла.

Z — [Доступно, если опция Отображать в: Только в 3D выбрана] z-координата области, в метрах. Значение зависит относительно z-координаты уровня, которому принадлежит этот узел.

Поворот, ° — Угол поворота фигуры в пикселях.

Ширина — Ширина узла (в пикселях).

Высота — Высота узла (в пикселях).

Наклонная плоскость для пешеходов — Если флажок выбран, этот узел лежит в наклонной плоскости (например, задает лестницу, соединяющую два уровня). Более подробную информацию о том, как задать наклонную плоскость, вы можете найти в статье Наклонная плоскость.

Специфические

Отображать в — Здесь вы можете выбрать, будет ли фигура отображаться В 2D и в 3D, Только в 2D или Только в 3D.

Отображать имя — Если опция выбрана, то имя фигуры будет отображаться в графическом редакторе.

Функции

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

Ограничение скорости и доступа
Функция Описание
restrictAccessByCapacity(int number) Ограничивает доступ в область по заданному количеству агентов в узле.
С помощью этой функции можно динамически менять количество агентов, но нельзя переопределять тип ограничения в уже существующем узле.
number — максимально допустимое количество агентов в узле
restrictAccessByThroughput(double throughput, RateUnits units) Ограничивает доступ в узел по заданной пропускной способности узла.
С помощью этой функции можно динамически менять количество агентов, но нельзя переопределять тип ограничения в уже существующем узле.
throughput — максимально допустимое количество агентов, въезжающих в узел за 1 единицу измерения интенсивности
units — константа, задающая единицу измерения интенсивности
restrictAccessBySchedule(Schedule<Boolean> schedule) Ограничивает доступ в узел с помощью расписания типа "да/нет".
С помощью этой функции можно динамически менять используемое расписание, но нельзя переопределять тип ограничения в уже существующем узле.
schedule — расписание типа "да/нет"
restrictAccessManually(boolean initiallyClosed) Позволяет вручную управлять доступом в узел.
Не используйте эту функцию для динамического изменения доступа в узел во время выполнения модели. Вместо этого используйте функции open(), close() или setOpen().
initiallyClosed — если true, доступ в узел изначально закрыт; если false — открыт
boolean isAccessRestricted() Возвращает true, если доступ в узел ограничен. В противном случае возвращает false.
void recalculateAccessibility() Пересчитывает доступность узла для агентов. Эту функцию можно использовать, только если Доступ ограничен по условию.
boolean isOpen() Возвращает true, если узел открыт. В противном случае возвращает false. Эту функцию невозможно использовать, если Доступ ограничен по: условию. В такой ситуации у узла нет состояния "открыт" или "закрыт", поэтому функция всегда возвращает true.
void open() Снимает ограничение доступа в узел. Эту функцию можно использовать, только если Доступ ограничен вызовом функции close().
void close() Выставляет ограничение на доступ в узел. Эту функцию можно использовать, только если Доступ ограничен вызовом функции close().
void setOpen(boolean open) Управляет доступом в узел. Эту функцию можно использовать, только если Доступ ограничен вызовом функции close().

open — если true, узел открыт для всех типов агентов; если false, доступ в узел закрыт для указанных типов агентов.
AreaAccessRestrictionType getAccessRestrictionType() Возвращает тип ограничения доступа в узел. Допустимые значения:
AREA_ACCESS_RESTRICTION_BY_CAPACITY — доступ ограничен по заданному количеству агентов в узле
AREA_ACCESS_RESTRICTION_BY_THROUGHPUT — доступ ограничен по заданной пропускной способности узла
AREA_ACCESS_RESTRICTION_BY_SCHEDULE — доступ контролируется расписанием типа "да/нет".
AREA_ACCESS_RESTRICTION_BY_CONDITION — для доступа необходимо выполнение заданного условия
AREA_ACCESS_RESTRICTION_MANUAL — доступ ограничен вызовом функции close()
boolean isAvoidedIfClosed() Возвращает true, если состояние узла учитывается при расчете маршрутов транспортеров. В противном случае возвращает false.
void setAvoidedIfClosed(boolean avoided) С помощью этой функции можно настраивать, учитывается ли состояние узла при расчете маршрутов транспортеров.

avoided — если true, транспортеры будут объезжать узел с ограничением в доступе; если false — не будут.
Agent getRestrictedAgentClass() Возвращает тип агента, для которого в узле существуют ограничения на скорость и/или доступ.
void setRestrictedAgentClass(Agent restrictedClass) Задает тип агента, для которого в узле существуют ограничения на скорость и/или доступ.

restrictedClass — тип агента
boolean isSpeedRestricted() Проверяет, ограничена ли скорость движения в узле. Если функция возвращает true, скорость в узле ограничена. В противном случае функция возвращает false.
double getMaxSpeed(SpeedUnits units) Возвращает максимально допустимую скорость движения в узле в заданных единицах измерения скорости.

units — константа, задающая единицу измерения скорости
void restrictSpeed(double maxSpeed, SpeedUnits units) Ограничивает скорость движения в узле до максимально допустимого значения скорости maxSpeed в заданных единицах измерения скорости.

maxSpeed — максимально допустимая скорость
units — константа, задающая единицу измерения скорости
int getCapacity() Возвращает максимально допустимое количество агентов в узле, при котором доступ в узел еще не закрыт.
double getThroughput(RateUnits units) Возвращает максимально допустимое количество агентов в узле в 1 единицу модельного времени, при котором доступ в узел еще не закрыт, в заданных единицах измерения.

units — константа, задающая единицу измерения скорости
Schedule<Boolean> getSchedule() Возвращает расписание типа "да/нет", которое управляет доступом в узел.
boolean accessRestrictionCondition(T agent) Проверяет условие доступа в узел для заданного агента. Если проверка возвращает значение true, доступ в узел ограничен; в противном случае возвращает false.

agent — агент, для которого проверяется условие доступа в узел
Агенты

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

Если в вашей модели и пешеходы, и транспортеры двигаются через одни и те же узлы, эти функции будут возвращать данные и о тех, и о других. Например, если в узле находится 5 транспортеров и 3 пешехода, функция getNumberOfAdmittedAgents() вернет число 8.
В контексте функций этого раздела, когда мы говорим "агенты", то подразумеваем "только пешеходы и транспортеры". Не используйте эти функции для работы с любыми другими типами агентов.

Функция Описание
List<T> agents() Возвращает список агентов (пешеходов и транспортеров), находящихся в узле.
List<T> getAgentsWaitingToEnter() Возвращает список агентов (пешеходов и транспортеров), которые находятся на границе узла с ограничениями доступа и ожидают разрешения на вход в узел.
int getNumberOfAdmittedAgents() Возвращает количество агентов (пешеходов и транспортеров), находящихся в узле.
boolean contains(Agent agent) Возвращает true, если заданный агент (пешеход или транспортер) находится в узле. В противном случае возвращает false. agent — заданный агент
double density(AreaUnits units) Возвращает среднюю плотность агентов (пешеходов и транспортеров) внутри узла, которая измеряется по количеству агентов на указанную единицу измерения площади.

units — константа, задающая единицу измерения площади
Транспортеры

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

Эти функции работают только с транспортерами.
Функция Описание
List<T> getAdmittedTransporters() Возвращает список транспортеров, находящихся в узле.
int getNumberOfAdmittedTransporters() Возвращает количество транспортеров, находящихся в узле.
int getNumberOfTransporters() Возвращает количество транспортеров с навигацией по заданному пути, находящихся в узле.
Эта функция работает только для тех узлов, которые являются частью сети. Она не зависит от настроек доступа в узел.
Местоположение
Функция Описание
double getX() Возвращает X-координату узла (т.е. координату его верхнего левого угла).
double getY() Возвращает Y-координату узла (т.е. координату его верхнего левого угла).
double getZ() Возвращает Z-координату узла (т.е. координату его верхнего левого угла).
double getZ(double x, double y) Возвращает Z-координату заданной точки. x — X-координата точки
y — Y-координата точки
void setPos(double x, double y, double z) Задает новые координаты узла (т.е. координаты его верхнего левого угла).

x — новое значение X-координаты
y — новое значение Y-координаты
z — новое значение Z-координаты
Point getCenter() Возвращает координаты центральной точки узла.
Уровень
Функция Описание
Level getLevel() Возвращает уровень, на котором расположен этот узел.
Размеры
Функция Описание
double getWidth() Возвращает ширину узла в пикселях.
double getHeight() Возвращает высоту узла в пикселях.
void setSize(double width, double height) Задает ширину и высоту узла в пикселях.

width — новая ширина узла
height — новая высота узла
Вращение
Функция Описание
double getRotation() Возвращает градус вращения узла в радианах (по часовой стрелке).
void setRotation(double rotation) Задает градус вращения узла в радианах по часовой стрелке.

rotation — новое значение градуса вращения узла
Видимость
Функция Описание
boolean isVisible() Возвращает true, если узел невидим; в противном случае возвращает false.
void setVisible(boolean v) Задает видимость узла.

v — видимость. Если true — узел будет виден на презентации при запуске модели, если false — не виден.
Цвет заливки
Функция Описание
Color getFillColor() Возвращает цвет заливки узла или null, если заливка отсутствует или выполнена текстурой (в таком случае используйте функцию getTexture(), чтобы получить текстуру заливки узла).
Texture getFillTexture() Возвращает текстуру заливки узла или null, если заливка отсутствует или выполнена цветом (в таком случае используйте функцию getFillColor(), чтобы получить цвет заливки узла).
void setFillColor(Color fillColor) Задает цвет заливки узла.

fillColor — новый цвет заливки.Если null, заливка будет отсутствовать.
void setFillColor(Paint fillColor) Задает новый цвет (или Texture) заливки узла.

fillColor — новый цвет заливки. Если null, заливка будет отсутствовать.
Контур
Функция Описание
Color getLineColor() Возвращает цвет контуров узла или null, если линии бесцветные или выполнены текстурой (в таком случае используйте функцию getLineTexture(), чтобы получить текстуру контуров узла).
Texture getLineTexture() Возвращает текстуру контуров узла или null, если текстура отсутствует или контуры выполнены цветом (в таком случае используйте функцию getLineColor(), чтобы получить цвет контура узла).
void setLineColor(Color lineColor) Задает цвет контуров узла.

lineColor — новый цвет контуров. Если null, контур будет отсутствовать.
void setLineColor(Object lineColor) Задает цвет (или Texture) контуров узла.

lineColor — новый цвет контуров. Если null, контур будет отсутствовать.
double getLineWidth() Возвращает толщину контуров узла.
void setLineWidth(double width) Задает толщину контуров узла; передайте 0, чтобы задать минимально возможную толщину контуров.

width — новая толщина контура
int getLineStyle() Возвращает стиль контуров узла. Допустимые значения:
LINE_STYLE_SOLID — сплошная линия
LINE_STYLE_DOTTED — пунктирная линия
LINE_STYLE_DASHED — штрих-пунктирная линия
void setLineStyle(int style) Задает новый стиль контуров узла. Стиль контуров не применяется в 3D анимации; для такого типа анимации поддерживается только стиль сплошной линии.

style — новый стиль контуров. Допустимые значения:
LINE_STYLE_SOLID — сплошная линия
LINE_STYLE_DOTTED — пунктирная линия
LINE_STYLE_DASHED — штрих-пунктирная линия
Аттракторы
Функция Описание
List<Attractor> getAttractors() Возвращает коллекцию аттракторов в узле.
void addAttractor(Attractor attractor) Добавляет аттрактор в узел.

attractor — аттрактор, который должен быть добавлен в узел
Сеть
Функция Описание
Network getNetwork() Возвращает сеть, к которой принадлежит узел, или null, если этот узел не является частью сети.
int getConnectionsCount() Возвращает количество соединений узла с другими узлами.
Path getConnection(int index) Возвращает соединение между двумя узлами с указанным индексом.

index — индекс соединения в диапазоне (0, this.getConnectionsCount() — 1).
Специфические
Функция Описание
boolean contains(double px, double py) Возвращает true, если узел содержит точку с указанными координатами; в противном случае возвращает false.

px — X-координата точки относительно контейнера узла
py -Y-координата точки относительно контейнера узла
double getNearestPoint(double px, double py, Point output) Рассчитывает точку в узле, которая расположена ближе всего к заданной точке, и записывает результат в объект output. Возвращает квадрат расстояния до точки (в проекции XY). Все вычисления производятся в горизонтальной проекции (z-координаты не используются и для этих вычислений считаются нулевыми).

px — X-координата точки
py — Y-координата точки
output — объект, в который записывается результат. Обратите внимание, что output.z остается неизменным.
double getNearestPoint(double px, double py, double pz, Point output) Рассчитывает точку в узле, которая расположена ближе всего к заданной точке, и записывает результат в объект output. Возвращает квадрат расстояния до точки.

px — X-координата точки
py — X-координата точки
pz — Z-координата точки
output — объект, в который записывается результат. Обратите внимание, что output.z остается неизменным.
Удаление
Функция Описание
void remove() Удаляет узел из презентации агента. Если узел не является частью презентации, функция не выполняет ничего. Обратите внимание, что удаление из презентации не подразумевает удаление из логики модели, поскольку логические связи и маршруты могли быть созданы до удаления узла и сохранились после него.
Как мы можем улучшить эту статью?