Многоугольный узел

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

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

Элементы разметки Многоугольный узел и Прямоугольный узел используются, когда вам необходимо задать некоторую область (например, офис, комнату и т.д.), в которой могут оставаться агенты. Используйте элемент Многоугольный узел, если требуемая область имеет сложную форму. Если область прямоугольной формы, используйте элемент Прямоугольный узел. Если узел задает переход в сети транспортировки, вы можете использовать элемент Точечный узел.

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

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

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

Демонстрационная модель: Areas with Limited Access for Transporters


Демонстрационная модель: Areas with Restrictions for Pedestrians

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

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

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

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

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

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

  1. Выберите двойным щелчком мыши элемент Многоугольный узел в палитре Разметка Пространства.
  2. Значок элемента должен поменяться на этот: . Это означает, что активирован режим рисования и теперь вы можете нарисовать многоугольную область в графическом редакторе последовательно, точка за точкой.
  3. Щелкните в требуемом месте графического редактора, чтобы поставить первую точку области. Каждым следующим щелчком вы будете добавлять по новой точке.
  4. Чтобы завершить рисование, добавьте последнюю точку пути двойным щелчком мыши.

Свойства

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

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

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

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

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

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

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

Расположение внутри – Задает расположение агентов внутри области: Случайное или Упорядоченное.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Внешний вид

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

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

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

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

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

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

X – x-координата начальной точки области.

Y – y-координата начальной точки области.

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

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

Точки

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

Первая точка всегда имеет координаты (0,0,0), и они не редактируются.

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

И если координаты точек в двумерном пространстве XY вы можете изменить и в графическом редакторе, то расположение точек пути относительно оси Z можно изменить только в этой таблице.

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

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

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

Функции

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

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

Функция

Описание

void restrictAccessByCapacity(int number)

Ограничивает доступ в область по заданному количеству агентов в узле.

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

Параметр:
number - максимально допустимое количество агентов в узле

void restrictAccessByThroughput(double throughput, RateUnits units)

Ограничивает доступ в узел по заданной пропускной способности узла.

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

Параметры:
throughput - максимально допустимое количество агентов, въезжающих в узел за 1 единицу измерения интенсивности
units - константа, задающая единицу измерения интенсивности

void restrictAccessBySchedule(Schedule<Boolean> schedule)

Ограничивает доступ в узел с помощью расписания типа "да/нет".

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

Параметр:
schedule - расписание типа "да/нет"

void restrictAccessManually(boolean initiallyClosed)

Позволяет вручную управлять доступом в узел.

Примечание: Не используйте эту функцию для динамического изменения доступа в узел во время выполнения модели. Вместо этого используйте функции open(), close() или setOpen().

Параметр:
initiallyClosed - если true, доступ в узел изначально закрыт; если false - открыт

boolean isAccessRestricted()

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

void recalculateAccessibility()

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

boolean isOpen()

Возвращает true, если узел открыт. В противном случае возвращает false.

Эту функцию невозможно использовать, если Доступ ограничен по: условию. В такой ситуации у узла нет состояния "открыт" или "закрыт", поэтому функция всегда возвращает true.

void open()

Снимает ограничение доступа в узел. Эту функцию можно использовать, только если Доступ ограничен вызовом функции close() или если доступ в узел контролируется вызовом функции restrictAccessManually().

void close()

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

void setOpen(boolean open)

Управляет доступом в узел.

Параметр:
open - если true, узел открыт для всех типов агентов; если false, доступ в узел закрыт для указанных типов агентов.

Эту функцию можно использовать, только если Доступ ограничен вызовом функции close() или если доступ в узел контролируется вызовом функции restrictAccessManually().

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 - константа, задающая единицу измерения площади


Транспортеры

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

Function

Description

List<T> getAdmittedTransporters()

Возвращает список транспортеров, находящихся в узле.

int getNumberOfAdmittedTransporters()

Возвращает количество транспортеров, находящихся в узле.

int getNumberOfTransporters()

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

Примечание: Эта функция работает только для тех узлов, которые являются частью сети. Она не зависит от настроек доступа в узел.


Местоположение

Функция

Описание

double getX()

Возвращает X-координату начальной точки узла.

double getXMin()

Возвращает минимальную Х-координату узла, т.е. координату верхнего левого угла условного прямоугольника, в который вписан узел.

double getXMax()

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

double getY()

Возвращает Y-координату начальной точки узла.

double getYMin()

Возвращает минимальную Y-координату узла, т.е. координату верхнего левого угла условного прямоугольника, в который вписан узел.

double getYMax()

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

double getZ()

Возвращает Z-координату начальной точки узла.

double getZ(double x, double y)

Возвращает Z-координату заданной точки.

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

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

Задает новые координаты узла.

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


Уровень

Функция

Описание

Level getLevel()

Возвращает уровень, на котором расположен узел.


Точки

Функция

Описание

int getNPoints()

Возвращает количество точек в узле.

double getPointDx(int i)

Возвращает Х-координату точки узла с заданным индексом относительно начальной точки узла.

Параметр:
i - индекс точки (отсчет начинается с 0)

double getPointDy(int i)

Возвращает Y-координату точки узла с заданным индексом относительно начальной точки узла.

Параметр:
i - индекс точки (отсчет начинается с 0)


Видимость

Функция

Описание

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 - the new width of the node outline.

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()

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