
Задает набор ресурсов, которые могут захватываться и освобождаться заявками с помощью объектов Seize, Release и Service. Есть два способа моделирования ресурсов: они могут быть заданы в модели как индивидуальные объекты, а могут просто как их количество. Если ресурсы заданы в модели как индивидуальные объекты , то каждый такой ресурс может иметь отличные от других ресурсов свойства, отображаться на презентации, хранить статистику своего использования и т.д. Базовым классом для таких ресурсов является ResourceUnit, Вы можете создать свои собственные подклассы этого класса. Но если таких ресурсов будет достаточно много, и на моделирование каждого отдельного ресурса будет тратиться определенное время и память, и если все такие ресурсы будут идентичными, то имеет смысл не моделировать каждый такой ресурс отдельно, а рассматривать их в целом, то есть, захватывать и освобождать просто определенное количество такого агрегированного ресурса. Примером ресурсов такого типа могут быть деньги, компьютерная память, складская площадь и т.д.
Единственный порт объекта может быть соединен с портами access объектов Seize, Service и Release, работающих с этим типом ресурсов, или же может быть оставлен несоединенным, если в параметрах других объектах будет ссылка на имя этого объекта ResourcePool. Этот порт может соединяться с несколькими объектами, работающими с данными ресурсами.
Если запросы от объектов Seize и Service не могут быть удовлетворены в текущий момент времени, эти запросы помещаются в очередь объекта ResourcePool. Эта очередь может быть либо обычной очередью FIFO, либо учитывать приоритеты запросов.
При выборе ресурса (если ресурсы моделируются как индивидуальные объекты) по запросу заявки объект NetworkResourcePool выбирает тот свободный ресурс, который оставался свободным на протяжении наибольшего времени. Такой подход со временем приведет к равномерному использованию всех ресурсов.
Количество ресурсов может быть задано либо явно числом, либо с помощью табличной функции, задающей, как количество ресурсов будет изменяться во времени. Если вместимость объекта NetworkResourcePool будет динамически изменяться с помощью метода set_capacity(), и количество захваченных в текущий момент времени ресурсов будет превосходить новое значение вместимости, то лишние ресурсы будут удалены только после того, как они будут освобождены.
Любой ресурс (если он моделируется как индивидуальный объект) может быть либо свободен, либо занят. Объект может собирать статистику занятости ресурсов (непрерывная статистика процента занятых ресурсов от их общего числа). Вы можете отображать на презентации занятые и свободные ресурсы различными фигурами.
Пожалуйста, обратите внимание, что заявка запрашивает ресурс или ссылается на него, используя имя соответствующего объекта ResourcePool, и при этом Вы не можете выбрать какой-то определенный ресурс из числа ресурсов этого типа. Поэтому если Вам нужно ссылаться на какой-то определенный подтип ресурса, Вам будет нужно задать этот подтип с помощью еще одного объекта ResourcePool.
Вы можете задать расписание работы ресурсов с помощью специального элемента расписание.
Приведенная ниже демонстрационная модель показывает разницу между двумя различными режимами использования расписания в объекте (опции Расписанием и Расписанием доступности параметра Количество задано).
Демо модель: Defining a Work Schedule for Resources
int idle()- возвращает количество свободных ресурсов.
int busy() - возвращает количество занятых ресурсов.
int getUnit( int index ) - возвращает ресурс с номером index. Метод не должен вызываться, если ресурсы моделируются просто как их количество.
void resetStats() - удаляет собранную статистику использования ресурса.