
Используется при моделировании транспортных сетей. Задает набор сетевых ресурсов определенного типа. Единственный порт объекта должен быть соединен с портом объекта Network.
Доступ к сетевым ресурсам (их захват и освобождение) осуществляется объектами NetworkSeize и NetworkRelease. Сетевые ресурсы очень похожи на "обычные" ресурсы (которые задаются с помощью объекта ResourcePool): ресурсы обоих типов представляют собой экземпляры общего базового класса ResourceUnit), но у сетевых ресурсов есть дополниительные свойства, и кроме того они могут работать только в пределах сети. Сетевые ресурсы могут быть статическими, движущимися или переносными, см. типы сетевых ресурсов. У каждого ресурса есть свое базовое местоположение - узел сети, в котором этот ресурс будет находиться изначально (и если этот ресурс движущийся, то именно сюда он будет возвращаться после освобождения). Базовое местоположение ресурса может быть задано либо как один узел, либо как ломаная, соединяющая несколько узлов (эта ломаная не должна входить в состав группы фигур сети!)
Количество ресурсов может быть задано либо явно числом, либо с помощью табличной функции, задающей, как количество ресурсов будет изменяться во времени, либо фигурой базового местоположения (количество ресурсов при этом будет равно количеству точек ломаной линии, соединяющей узлы базового местоположения (на приведенном выше рисунке таких точек четыре). Если базовое местоположение ресурса задано с помощью ломаной, соединяющей несколько узлов, но количество ресурсов задано напрямую числом или с помощью табличной функции, то количество ресурсов, приписанное к тому или иному базовому узлу, будет пропорционально количеству точек базового пути в этом узле. Точки этой базовой ломаной будут также задавать точные местонахождения свободных ресурсов в то время, когда они будут находиться в своих базовых местоположениях (если же ломаную не использовать, то они будут отображаться в случайно выбранных точках). Один и тот же узел сети может быть использован в качестве базового у ресурсовнескольких разных типов одновременно.
Любой ресурс может быть либо свободен, либо занят. Объект может собирать статистику занятости ресурсов (непрерывная статистика процента занятых ресурсов от их общего числа). Свободный ресурс может быть захвачен заявкой с одним исключением: если движущийся ресурс, будучи освобожденным, движется в свое базовое местоположение, то он сможет быть заново захвачен заявкой только по прибытии туда. С точки зрения статистики в это время он будет считаться свободным.
Вы можете задавать скорость движения движущихся ресурсов (в пикселах в единицу времени). При необходимости можно задать уникальную скорость для каждого ресурса и изменять ее с помощью метода unit.setSpeed(). Вы можете отображать на презентации занятые и свободные ресурсы различными фигурами, которые, опять же, можно изменять с помощью метода unit.setShape().
При выборе ресурса по запросу заявки объект NetworkResourcePool выбирает тот свободный ресурс, который оставался свободным на протяжении наибольшего времени. Такой подход со временем приведет к равномерному использованию всех ресурсов.
Аналогично объекту ResourcePool, если вместимость объекта NetworkResourcePool будет динамически изменяться, и количество захваченных в текущий момент времени ресурсов будет превосходить новое значение вместимости, то лишние ресурсы будут удалены только после того, как они будут освобождены.
Пожалуйста, обратите внимание, что заявка запрашивает ресурс или ссылается на него, используя имя соответствующего объекта NetworkResourcePool, и при этом Вы не можете выбрать какой-то определенный ресурс из числа ресурсов этого типа. Поэтому если Вам нужно ссылаться на какой-то определенный подтип ресурса, Вам будет нужно задать этот подтип с помощью еще одного объекта NetworkResourcePool.
int idle()- возвращает количество свободных ресурсов. При этом освобожденные ресурсы, возвращающиеся в свои базовые местоположения, считаются занятыми.
int busy() - возвращает количество занятых ресурсов.
int getUnit( int index ) - возвращает ресурс с номером index.
void resetStats() - удаляет собранную статистику использования ресурса.