Network


Используется при моделировании транспортных сетей. Задает топологию сети и управляет сетевыми ресурсами. В одной модели может быть несколько сетей, и каждая сеть задается одним объектом Network. Топология сети задается группой фигур: прямоугольники задают узлы сети, а линии и ломаные - сегменты (параметр Группа фигур сети). На рисунке ниже Вы можете видеть четыре узла, соединенные красной ломаной линией и синей линией. Линия (ломаная) будет соединять узел, если одна (и только одна!) ее точка будет лежать внутри (или на границе) этого узла. Имеет смысл осмысленно называть прямоугольники, задающие узлы сети, потому что на их имена будут ссылаться объекты модели. Желательно не отображать фигуры, задающие топологию сети, во время выполнения модели (что и выбрано по умолчанию в параметре, см. параметр Прятать фигуры сети). 


После создания объект Network проходит в цикле все фигуры, чтобы построить логическую структуру сети. Поскольку движущиеся заявки и ресурсы всегда выбирают кратчайший маршрут, дублирующиеся сегменты будут удалены из создаваемой таблицы маршрутизации. Если при задании топологии были допущены ошибки (такие, как нарисованные друг поверх друга прямоугольники и т.д.), то соответствующие фигуры будут выделены, и модель закончит свою работу, выдав сообщение об ошибке. 

Обратите внимание, что ломаные, задающие базовое местоположение ресурсов (см. описание объекта NetworkResourcePool) не должны находиться в группе фигур, задающей топологию сети!

Вы можете изменять конфигурацию сети прямо по ходу моделирования, добавляя, удаляя или изменяя узлы и сегменты (с помощью метода set_networkGroup(Group newgroup)) или даже задавая совершенно другую сеть (с помощью метода refreshNetwork()). Но при этом нужно будет убедиться, что узлы, занятые в текущий момент времени заявками и ресурсами, а также узлы, являющиеся начальными или конечными точками маршрута движущихся в данный момент элементов, будут находиться и в новой сети. 

Объект Network должен быть соединен с объектами NetworkResourcePool, задающими те сетевые ресурсы, которые должны быть доступны в этой сети. Объект Network хранит очередь запросов от заявок, желающих захватить сетевые ресурсы. Эта очередь может быть сделана приоритетной, при этом приоритет запроса будет зависеть от самой заявки, пославшей этот запрос (см. параметры Использовать приоритеты и Приоритет запроса). Процедура обработки запроса ресурса подробно описана здесь.

Имя объекта Network должно быть указано в параметре Сеть объекта NetworkEnter, чтобы тот знал, в какую именно сеть он будет добавлять новые заявки.

Порты

NetworkResourceAccessPort access
Порт, который должен быть соединен с (возможно, несколькими) портами объектов NetworkResourcePool, для того, чтобы сетевые ресурсы, задаваемые этими объектами, попали в задаваемую этим объектом сеть.

Параметры

Группа фигур сети
Группа фигур анимации (для которых разрешено программное управление), которые графически задают топологию сети. Группа может содержать прямоугольники (задающие узлы сети), линии и ломаные линии (задающие сегменты).  
Синтаксис ShapeGroup networkGroup
Прятать фигуры сети
Если опция выбрана (true), то фигуры, используемые для задания топологии сети, не будут отображаться на презентации во время выполнения модели. 
Синтаксис boolean hideNetwork
Значение по умолчанию true
Когда объект в узле, рисовать его
Определяет, как будут отображаться анимации заявок и ресурсов, находящихся в узлах сети (и не движущихся): будут ли они рисоваться В случайном месте внутри узла, В верхнем левом углу узла или В центре узла. Вы можете изменить смещение анимации относительно заданной точки с помощью метода заявки (ресурса)  setOffsets(x,y,angle).
Синтаксис  int staticDrawMode
Значение по умолчанию В случайном месте внутри узла
Использовать приоритеты
Если опция выбрана (true), то запросы на сетевые ресурсы будут сортироваться согласно их приоритетам (см. управление сетевыми ресурсами). Приоритет может зависеть от заявки, пославшей запрос, см. параметр Приоритет запроса.
Синтаксис  boolean enablePriorities
Значение по умолчанию false
Приоритет запроса [динамический]
[Виден, если выбрана опция Использовать приоритеты] Выражение, вычисляющее приоритет запроса на ресурс (чем больше значение, тем выше приоритет). Может зависеть от заявки, пославшей запрос.
Синтаксис
  double priority
Локальная переменная Entity entity - заявка, запрашивающая ресурс.
Значение по умолчанию 0

Функции

int nMoving() - возвращает количество заявок и ресурсов, движущихся в сети в данный момент.

void refreshNetwork() - сообщает объекту Network о необходимости удалить текущую конфигурацию сети и создать новую, основываясь на той же группе фигур (параметр networkGroup).

void set_NetworkGroup(Group group) - сообщает объекту Network о необходимости удалить текущую конфигурацию сети и создать новую, основываясь на новой группе фигур (параметр group).

double distanceBetween( ShapeRectangle from, ShapeRectangle to ) - возвращает расстояние между двумя узлами сети. Если какой-то из узлов не находится в сети, то возникает ошибка. Если один узел не доступен из другого, возвращает Double.POSITIVE_INFINITY.