Узлы и путиявляются элементами разметки пространства, которые задают местоположение агентов в моделируемом пространстве:
Узлы могут соединяться путями. Вместе они образуют сеть. В сети, узел задает место, где агенты могут останавливаться, тогда как пути, соединяющие узлы, задают маршрут, по которому агенты следуют при движении из одного узла в другой.
Элементы разметки Многоугольный узел и
Прямоугольный узел используются, когда вам необходимо задать некоторую область (например, офис, комнату и т.д.), в которой могут оставаться агенты. Используйте элемент
Многоугольный узел, если требуемая область имеет сложную форму. Если область прямоугольной формы, используйте элемент
Прямоугольный узел. Если узел задает переход в сети транспортировки, вы можете использовать элемент
Точечный узел.
Чтобы задать конкретные узлы ожидания внутри прямоугольного или многоугольного узла, используйте аттракторы.
Вы можете настраивать правила входа в узел и скорость движения в узле для пешеходов, транспортеров с произвольной навигацией и транспортеров навигацией по заданному пути. Ограничение скорости и ограничение доступа не зависят друг от друга и могут настраиваться отдельно. Узлы с разными настройками ограничений могут накладываться друг на друга. Для каждого узла можно задать только один тип ограничения доступа.
Демонстрационная модель: Areas with Limited Access for Transporters
Демонстрационная модель: Areas with Restrictions for Pedestrians
Узлы, доступ в которые ограничен, автоматически меняют цвет на красный:
Исключением являются узлы с ограничением доступа, созданные с помощью кода.
Имя – Имя фигуры.
Исключить – Если опция выбрана, то фигура будет исключена из модели.
Отображается на верхнем агенте – Если опция выбрана, то фигура будет видна на презентации типа агента, в который будет вложен данный агент.
Блокировать – Если опция выбрана, то фигура будет считаться заблокированной и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока вы не снимете с нее блокировку. Обычно это требуется, когда у вас есть какой-то фоновый рисунок, используемый как подложка для анимации, и вы хотите исключить возможность случайного редактирования этого фонового рисунка при рисовании фигур поверх него.
Видимость – Если опция выбрана, то фигура будет отображаться на презентации во время выполнения модели.
Ограничение скорости транспортеров - Если опция выбрана, ограничивает скорость транспортеров в этом узле до заданного значения.
Расположение внутри – Задает расположение агентов внутри области: Случайное или Упорядоченное.
Аттракторы... – Щелкните эту кнопку, чтобы создать аттракторы внутри узла. Аттракторами обозначают места, куда стремятся агенты.
Применить ограничения для – Здесь вы можете указать тип агента, для которого будут применяться ограничения скорости и/или доступа.
Ограничение скорости – Выберите эту опцию, чтобы ограничить скорость движения агентов до указанного значения.
Максимальная скорость – [Доступно, если выбрана опция Ограничение скорости] Максимально допустимая скорость агента внутри узла.
Ограничение доступа – Выберите эту опцию, чтобы ограничить доступ агентов в узел.
Доступ ограничен по – [Доступно, если выбрана опция Ограничение доступа] Здесь вы можете задать правила доступа агентов в узел. Доступ может быть ограничен по:
вместимости - количеству агентов внутри узла. Доступ в узел будет свободным для всех до тех пор, пока количество агентов в узле меньше или равно значению параметра Вместимость.
пропускной способности - количеству агентов, которые могут войти в узел за 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) |
Ограничивает доступ в область по заданному количеству агентов в узле. Примечание: С
помощью этой функции можно динамически менять количество агентов, но
нельзя переопределять тип ограничения в уже существующем узле. Параметр: |
void restrictAccessByThroughput(double throughput, RateUnits units) |
Ограничивает доступ в узел по заданной пропускной способности узла. Примечание: С помощью этой функции можно динамически менять количество агентов, но нельзя переопределять тип ограничения в уже существующем узле. Параметры: |
void restrictAccessBySchedule(Schedule<Boolean> schedule) |
Ограничивает доступ в узел с помощью расписания типа "да/нет". Примечание: С помощью этой функции можно динамически менять используемое расписание, но нельзя переопределять тип ограничения в уже существующем узле. Параметр: |
void restrictAccessManually(boolean initiallyClosed) |
Позволяет вручную управлять доступом в узел. Примечание: Не используйте эту функцию для динамического изменения доступа в узел во время выполнения модели. Вместо этого используйте функции open(), close() или setOpen(). Параметр: |
boolean isAccessRestricted() |
Возвращает true, если
доступ в узел ограничен. В противном случае возвращает false. |
void
recalculateAccessibility() |
Пересчитывает доступность узла для агентов. Эту функцию можно использовать, только если Доступ ограничен по условию. |
boolean isOpen() |
Возвращает true, если узел открыт. В противном случае возвращает false. Эту функцию невозможно использовать, если Доступ ограничен по: условию. В такой ситуации у узла нет состояния "открыт" или "закрыт", поэтому функция всегда возвращает true. |
void open() |
Снимает ограничение доступа в узел. Эту функцию можно
использовать, только если Доступ
ограничен вызовом функции
close() или если доступ в узел контролируется вызовом функции restrictAccessManually(). |
void close() |
Выставляет ограничение на доступ в узел. Эту функцию можно использовать, только если Доступ ограничен вызовом функции close() или если доступ в узел контролируется вызовом функции restrictAccessManually(). |
void setOpen(boolean open) |
Управляет доступом в узел. Параметр: Эту функцию можно использовать, только если Доступ ограничен вызовом функции close() или если доступ в узел контролируется вызовом функции restrictAccessManually(). |
AreaAccessRestrictionType
getAccessRestrictionType() |
Возвращает тип ограничения доступа в узел. Допустимые значения:
|
boolean isAvoidedIfClosed() |
Возвращает true, если состояние узла учитывается при расчете маршрутов транспортеров. В противном случае возвращает false. |
void
setAvoidedIfClosed(boolean avoided) |
С помощью этой функции можно настраивать, учитывается ли состояние узла при расчете маршрутов транспортеров. Параметр: |
Agent
getRestrictedAgentClass() |
Возвращает тип агента, для которого в узле существуют ограничения на скорость и/или доступ. |
void
setRestrictedAgentClass(Agent restrictedClass) |
Задает тип агента, для которого в узле существуют ограничения на скорость и/или доступ. Параметр: |
boolean
isSpeedRestricted() |
Проверяет, ограничена ли скорость движения в узле. Если функция возвращает true, скорость в узле ограничена. В противном случае функция возвращает false. |
double
getMaxSpeed(SpeedUnits units) |
Возвращает максимально допустимую скорость движения в узле в заданных единицах измерения скорости. Параметр: |
void restrictSpeed(double maxSpeed, SpeedUnits units) |
Ограничивает скорость движения в узле до максимально допустимого значения скорости maxSpeed в заданных единицах измерения скорости. Параметры: |
int
getCapacity() |
Возвращает максимально допустимое количество агентов в
узле, при котором доступ в узел еще не закрыт. |
double
getThroughput(RateUnits units) |
Возвращает максимально допустимое количество агентов, въезжающих в узел за 1 заданную единицу измерения интенсивности, при котором доступ в узел еще не закрыт. Параметр: |
Schedule<Boolean>
getSchedule() |
Возвращает расписание типа "да/нет", которое управляет доступом в узел. |
boolean accessRestrictionCondition(T agent) |
Проверяет условие доступа в узел для заданного агента. Если проверка возвращает значение true, доступ в узел ограничен; в противном случае возвращает false. Параметр: |
Чтобы использовать функции из этого раздела, в соответствующем узле должны быть включены ограничения доступа. В противном случае эти функции не будут возвращать ничего.
Функция |
Описание |
List<T> agents() |
Возвращает список агентов, находящихся в узле. |
List<T>
getAgentsWaitingToEnter() |
Возвращает список агентов, которые находятся на границе узла с ограничениями доступа и ожидают разрешения на вход в узел. |
int
getNumberOfAdmittedAgents() |
Возвращает количество агентов, находящихся в узле. |
boolean contains(Agent agent) |
Возвращает true, если заданный агент находится в узле. В противном случае возвращает false. Параметр: |
double density(AreaUnits 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-координату заданной точки. Параметры: |
void setPos(double x, double y, double z) |
Задает новые координаты узла. Параметры: |
Функция |
Описание |
Level getLevel() |
Возвращает уровень, на котором
расположен узел. |
Функция |
Описание |
int getNPoints() |
Возвращает количество точек в узле. |
double getPointDx(int i) |
Возвращает Х-координату точки узла с заданным индексом относительно начальной точки узла. Параметр: |
double getPointDy(int i) |
Возвращает Y-координату точки узла с заданным индексом относительно начальной точки узла. Параметр: |
Функция |
Описание |
boolean isVisible() |
Возвращает true, если узел невидим; в противном случае возвращает false. |
void setVisible(boolean v) |
Задает видимость узла. Параметр: |
Функция |
Описание |
Color getFillColor() |
Возвращает цвет заливки узла или null, если заливка отсутствует или выполнена текстурой (в таком случае используйте функцию getTexture(), чтобы получить текстуру заливки узла). |
Texture getFillTexture() |
Возвращает текстуру заливки узла или null, если заливка отсутствует или выполнена цветом (в таком случае используйте функцию getFillColor(), чтобы получить цвет заливки узла). |
void setFillColor |
Задает цвет заливки узла. Параметр: |
void setFillColor |
Задает новый цвет
(или Texture) заливки узла. |
Функция |
Описание |
Color getLineColor() |
Возвращает цвет контуров узла или null, если линии бесцветные или выполнены текстурой (в таком случае используйте функцию getLineTexture(), чтобы получить текстуру контуров узла). |
Texture getLineTexture() |
Возвращает текстуру контуров узла или null, если текстура отсутствует или контуры выполнены цветом (в таком случае используйте функцию getLineColor(), чтобы получить цвет контура узла). |
void setLineColor(Color lineColor) |
Задает цвет контуров узла. Параметр: |
void setLineColor(Object lineColor) |
Задает цвет (или Texture)
контуров узла. |
double getLineWidth() |
Возвращает толщину контуров узла. |
void setLineWidth |
Задает толщину контуров узла; передайте 0, чтобы задать минимально возможную толщину
контуров. |
int getLineStyle() |
Возвращает стиль контуров узла. Допустимые значения:
|
void setLineStyle |
Задает новый стиль контуров узла. Стиль контуров не применяется в 3D анимации; для такого типа анимации поддерживается только стиль сплошной линии. Параметр:
|
Функция |
Описание |
List<Attractor> getAttractors() |
Возвращает коллекцию аттракторов
в узле. |
void addAttractor |
Добавляет аттрактор в узел. Параметр: |
Функция |
Описание |
Network getNetwork() |
Возвращает сеть, к которой принадлежит узел, или null , если этот узел не является частью сети. |
int getConnectionsCount() |
Возвращает количество соединений узла с другими узлами. |
Path getConnection(int index) |
Возвращает соединение между двумя узлами с указанным индексом. Параметр: |
Функция |
Описание |
boolean contains |
Возвращает true, если узел
содержит точку с указанными координатами; в противном случае возвращает
false. |
double getNearestPoint (double px, double py, Point output) |
Рассчитывает точку в узле, которая расположена ближе всего к заданной точке, и записывает результат в объект output. Возвращает квадрат расстояния до точки (в проекции XY). Все вычисления производятся в горизонтальной проекции (z-координаты не используются и для этих вычислений считаются нулевыми). Параметры: |
double getNearestPoint (double px, double py, double pz, Point output) |
Рассчитывает точку в узле, которая расположена ближе всего к заданной точке, и записывает результат в объект output. Возвращает квадрат расстояния до точки. Параметры: |
Функция |
Описание |
void remove() |
Удаляет узел из презентации агента. Если узел не является
частью презентации, функция не выполняет ничего. |