ResourcePool


Задает набор ресурсов, которые могут захватываться и освобождаться агентами с помощью объектов Seize, Release, Assembler и Service

Типы ресурсов

Ресурсы могут быть трех типов: движущийся, статический и переносной:

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

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

Блоки библиотеки, которые работают с ресурсами

Библиотека Моделирования Процесса поддерживает разнообразные операции с ресурсами: агент может захватить один или несколько ресурсов (объект Seize), освободить ресурсы (объект Release), отправить захваченные ресурсы в определенное местоположение (объект ResourceSendTo), прикреплять ресурсы так, чтобы они перемещались вместе с агентом (объект ResourceAttach), и отсоединять прикрепленные ресурсы (объект ResourceDetach). Совершая операции над множеством ресурсов, укажите их список в параметре ResourcePool; например, чтобы захватить двух медсестер и один рентгеновский кабинет, укажите: Nurse, Nurse, XRay.

Если запросы от объектов Seize и Service не могут быть удовлетворены в текущий момент времени, эти запросы помещаются в очередь объекта ResourcePool. Эта очередь может быть либо обычной очередью FIFO, либо учитывать приоритеты запросов.

Способы задать количество ресурсов

Количество ресурсов может быть задано напрямую: вы просто задаете указываете определенное число в поле Количество ресурсов. Вы можете динамически изменять вместимость объекта с помощью метода set_capacity() во время запуска модели.

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

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

На примере ниже вы можете видеть, что также выбрана опция ...на основе аттракторов. Тогда объект ResourcePool посчитает количество аттракторов в "домашнем" узле и будет считать это количеством ресурсов.

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

 

Задание количества ресурсов расписанием

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

Демо модель: Defining a Work Schedule for Resources

Параметры

Во всех динамических параметрах ресурс доступен как локальная переменная unit.
Тип
Тип ресурсов: Движущийся, Статический, Переносной.
Имя: type
Значение по умолчанию: Движущийся (ResourcePool.RESOURCE_MOVING)
Доступные значения:  ResourcePool.RESOURCE_MOVING - Движущийся
                   ResourcePool.RESOURCE_STATIC - Статический
                   ResourcePool.RESOURCE_PORTABLE - Переносной
Количество задано
Определяет, как задано количество ресурсов:
Напрямую - явно заданным численным значением;
Базовым местоположением - количество ресурсов будет равно количеству узлов, заданных в параметре Базовое местоположение (узлы) или количеству аттракторов в этом узле.
Расписанием - расписанием, в котором будет задано, как количество ресурсов будет меняться с течением времени (тип значения расписания - целое);
Расписанием доступности - расписанием, задающем то, как меняется статус доступности ресурсов с течением времени (тип значения расписания - да/нет).
Сменами: расписаниями групп - количество ресурсов задается несколькими расписаниями.
Планом смен - количество ресурсов задается расписанием со сменами, а количество ресурсов нужно указать в параметрах ниже.
Имя: capacityDefinitionType
Значение по умолчанию: Напрямую (ResourcePool.CAPACITY_DIRECT)
Доступные значения:  ResourcePool.CAPACITY_DIRECT - Напрямую
                   ResourcePool.CAPACITY_HOME_LOCATION - Базовым местоположением
                   ResourcePool.CAPACITY_SCHEDULE - Расписанием
                   ResourcePool.CAPACITY_SCHEDULE_ON_OFF - Расписанием доступности
                   ResourcePool.CAPACITY_SHIFT_GROUP_SCHEDULES - Сменами: расписаниями групп
                   ResourcePool.CAPACITY_SHIFT_PLAN - Планом смен
Количество ресурсов
[Параметр виден, если Количество задано Напрямую] Количество ресурсов.
Синтаксис: int capacity
Значение по умолчанию: 1
При уменьшении кол-ва
[Параметр виден, если Количество задано НапрямуюРасписанием или Расписанием доступности]
Выберите здесь, что должно происходить с лишними ресурсами:
ресурсы сохраняются (конец смены)
- когда снижается количество ресурсов, лишние ресурсы сохраняются (как при окончании смены) и снова используются при повышении количества ресурсов.
ресурсы уничтожаются - лишние ресурсы уничтожаются (и удаляются из своей популяции), так что для увеличения количества будут созданы новые ресурсы.
Синтаксис: boolean destroyExcessUnits
Значение по умолчанию: false (ресурсы сохраняются (конец смены))
... на основе аттракторов
[Параметр виден, если Количество задано Базовым местоположением] Если выбрано, количество ресурсов будет равно количеству аттракторов внутри узла, указанного в параметре Базовое местоположение (узлы). Иначе, количество ресурсов равняется количеству узлов в этом же параметре.
Синтаксис: boolean capacityBasedOnAttractors
Расписание
[Параметр виден, если Количество задано Расписанием] Расписание, задающее, как количество ресурсов будет изменяться с течением времени (тип значения расписания - целое). 
Синтаксис: Schedule<Integer> capacitySchedule
Расписание доступности
[Параметр виден, если Количество задано Расписанием доступности] Расписание, задающее то, как меняется статус доступности ресурсов с течением времени (тип значения расписания - да/нет).
В те интервалы времени, которым будет соответствовать значению расписания нет, все ресурсы будут недоступны.
В те интервалы времени, которым будет соответствовать значению расписания да, количество доступных ресурсов будет равно значению, заданному в поле Количество ресурсов ("да").
Синтаксис: Schedule<Boolean> capacityScheduleOnOff
Количество ресурсов ("да") [динамический]
[Параметр виден, если Количество задано Расписанием доступности] Количество ресурсов, когда значение расписания да.
Тип значения: int
Значение по умолчанию: 1
Расписания
[Параметр виден, если Количество задано Сменами: расписаниями групп] Здесь вы можете добавить сразу несколько расписаний (тип значения расписания - целое). 
Синтаксис: Schedule<Integer>[] shiftGroupSchedules
Размеры смен { size1, size2,.. }
[Параметр виден, если Количество задано Планом смен] Количество ресурсов для каждой смены через запятую.
Синтаксис: int[] shiftGroupSizes
Расписание по ID смен
[Параметр виден, если Количество задано Планом смен] Расписание, содержащее ID смен , где 1 - это первая смена. Используйте значение -1, чтобы обозначить общее время вне смен, когда смены не используются.
Синтаксис: Schedule<Integer> shiftGroupsPlan
Новый ресурс [динамический]
Выражение, определяющее, какой ресурс будет создаваться (обычно просто вызов конструктора класса создаваемого ресурса).
Значение по умолчанию: Agent
Скорость
[Параметр виден, если Тип ресурса: Движущийся] Скорость, с которой движется ресурс.
Синтаксис: double speed
Базовое местоположение (узлы)
Выберите узел (узлы), которые будут использоваться как базовое местоположение для ресурсов.
Синтаксис: Node[] homeNodes
Отображать анимацию по умолчанию
[Параметр виден, если Тип ресурса: Статический] Если опция выбрана, и ресурсы являются агентами заданного по умолчанию типа Agent (а не созданного пользователем типа ресурса), то ресурсы будут отображаться на анимации с помощью маленьких кружков разных цветов. Эта опция чаще всего используется для проверки того, что статические ресурсы были правильно расположены в необходимых узлах
Значение по умолчанию: true
Смены, перерывы, аварии, обслуживание...
Приоритет (конец смены) [динамический]
Приоритет расписания смены. Чем выше значение, тем выше приоритет.
Тип значения: double
Значение по умолчанию: 100
Локальная переменная: T unit - ресурс.
Правило вытеснения (конец смены) [динамический]
Здесь вы можете выбрать, могут ли другие задачи прекратить текущую задачу (опция Прекратить) или нет (Вытеснения нет).
Значение по умолчанию: Вытеснения нет (ResourcePool.PP_NO_PREEMPTION)
Локальная переменная: T unit - ресурс
Может вытеснять (конец смены) [динамический]
Устанавливает, может ли задача end of shift вытеснять задачу, воспроизводимую в текущий момент, если такие есть. Другими словами, true означает, что ресурс "бросит свою работу" ровно в момент окончания смены. Если false, тогда ресурс закончит свои задачи с меньшим приоритетом.
Тип значения: boolean
Локальная переменная: T unit - ресурс.
Перерывы
Если опция выбрана, то ресурсы будут иметь перерывы. Свойства перерывов настраиваются ниже.
Синтаксис: boolean enableBreaks
Расписание перерывов
[Параметр виден, если выбрана опция Перерывы] Укажите имя расписания, которое задает расписание перерывов для этих ресурсов (тип значения расписания - да/нет).
Синтаксис: Schedule<Boolean> breaksSchedule
Приоритет (перерыв) [динамический]
[Параметр виден, если выбрана опция Перерывы] Приоритет задачи break. Чем выше значение, тем выше приоритет. Он будет сравниваться с приоритетами других задач, чтобы решить, какая задача может вытеснять другие.
Тип значения: double
Значение по умолчанию: 50
Локальная переменная: T unit - ресурс.
Может вытеснять (перерыв) [динамический]
[Параметр виден, если выбрана опция Перерывы] Если опция выбрана, задача break может вытеснять производимую в текущий момент задачу (если возможно согласно свойствам задачи, и приоритет задачи ниже).
Тип значения: boolean
Локальная переменная: T unit - ресурс.
Правило вытеснения [динамический]
[Параметр виден, если выбрана опция Перерывы] Здесь вы можете выбрать, могут ли другие задачи прекратить текущую задачу (опция Прекратить) или нет (Вытеснения нет).
Значение по умолчанию: Прекратить (ResourcePool.PP_TERMINATE)
Локальная переменная: T unit - ресурс.
В статистике [динамический]
[Параметр виден, если выбрана опция Перерывы] Здесь вы можете выбрать, хотите ли вы рассматривать время перерывов как "занятое" время, как "свободное" время, или оно не учитывается вовсе.
Значение по умолчанию: не учитается (ResourcePool.USAGE_NOT_COUNTED)
Локальная переменная: T unit - ресурс.
Аварии / ремонты
Если опция выбрана, у данных ресурсов будут случаться аварии. Свойства аварий настраиваются ниже.
Синтаксис: boolean enableFailuresRepairs
Время до первой аварии [динамический]
[Параметр виден, если выбрана опция Аварии / ремонты] Время до первой аварии.
Тип значения: double
Локальная переменная: T unit - ресурс.
Время до следующей аварии [динамический]
[Параметр виден, если выбрана опция Аварии / ремонты] Время между авариями (отсчет начинается, когда начинается ремонт). 
Тип значения: double
Локальная переменная: T unit - ресурс.
Тип ремонта
[Параметр виден, если выбрана опция Аварии / ремонты] Здесь вы можете выбрать, как моделировать ремонт: просто как задержку (опция Задержка) или как сложный процесс, описанный отдельной диаграммой (Отправить на диаграмму процесса).
Имя: repairType
Значение по умолчанию: Задержка (ResourcePool.REPAIR_DELAY)
Время ремонта [динамический]
[Параметр виден, если Тип ремонта: Задержка] Время, требуемое на исправление аварии.
Тип значения: double
Локальная переменная: T unit - ресурс.
Блок TaskStart (ремонт) [динамический]
[Параметр виден, если Тип ремонта: Отправить на диаграмму процесса] Блок ResourceTaskStart, задающий начало диаграммы процесса, моделирующей процесс ремонта ресурсов.
Локальная переменная: T unit - ресурс.
В статистике [динамический]
[Параметр виден, если выбрана опция Аварии / ремонты] Здесь вы можете выбрать, хотите ли вы рассматривать время аварий  как "занятое" время, как "свободное" время, или оно не учитывается вовсе.
Значение по умолчанию: не учитается (ResourcePool.USAGE_NOT_COUNTED)
Локальная переменная: T unit - ресурс.
Обслуживание
Если опция выбрана, ресурсы будут проходить техническое обслуживание. Свойства задачи обслуживания настраиваются ниже.
Синтаксис: boolean enableMaintenance
Время до первого обслуживания [динамический]
[Параметр виден, если выбрана опция Обслуживание] Время до первого обслуживания.
Тип значения: double
Локальная переменная: T unit - ресурс.
Время до следующего обслуживания [динамический]
[Параметр виден, если выбрана опция Обслуживание] Время между задачами обслуживания (отсчет начинается, когда задача обслуживания заканчивается).
Тип значения: double
Локальная переменная: T unit - ресурс.
Приоритет (ТО) [динамический]
[Параметр виден, если выбрана опция Обслуживание] Приоритет задачи maintenance. Чем выше значение, тем выше приоритет. Он будет сравниваться с приоритетами других задач, чтобы решить, какая задача может вытеснять другие.
Тип значения: double
Значение по умолчанию: 100
Локальная переменная: T unit - ресурс.
Может вытеснять (ТО) [динамический]
[Параметр виден, если выбрана опция Обслуживание] Если опция выбрана, задача maintenance может вытеснять производимую в текущий момент задачу (если возможно согласно свойствам задачи, и приоритет задачи ниже).
Тип значения: boolean
Локальная переменная: T unit - ресурс.
Тип обслуживания
[Параметр виден, если выбрана опция Обслуживание] Здесь вы можете выбрать, как моделировать обслуживание: просто как задержку (опция Задержка) или как сложный процесс, описанный отдельной диаграммой (Отправить на диаграмму процесса).
Имя: maintenanceType
Значение по умолчанию: Задержка (ResourcePool.MAINTENANCE_DELAY)
Время обслуживания [динамический]
[Параметр виден, если выбрана опция Обслуживание и Тип обслуживания: Задержка] Время обслуживания.
Тип значения: double
Локальная переменная: T unit - ресурс.
Блок TaskStart (ТО) [динамический]
[Параметр виден, если выбрана опция Обслуживание и Тип обслуживания: Отправить на диаграмму процесса]  Блок ResourceTaskStart, задающий начало диаграммы процесса, моделирующей процесс ремонта ресурсов.
Локальная переменная: T unit - ресурс.
В статистике [динамический]
[Параметр виден, если выбрана опция Обслуживание] Здесь вы можете выбрать, хотите ли вы рассматривать время обслуживания  как "занятое" время, как "свободное" время, или оно не учитывается вовсе.
Значение по умолчанию: не учитается (ResourcePool.USAGE_NOT_COUNTED)
Локальная переменная: T unit - ресурс.
Дополнительные задачи
Если эта опция выбрана, вы можете задать больше задач для ресурсов блока ResourceTask. Используйте эту опцию, когда ваша задача не может быть задана стандартными шаблонами, предоставленными для аварий, перерывов, обслуживания.
Синтаксис: boolean enableCustomTasks
Список задач
[Параметр виден, если выбрана опция Дополнительные задачи] Список блоков ResourceTask, задающих дополнительные задачи для этих ресурсов.
Имя: customTasks
Специфические
Добавить ресурсы в
Здесь вы можете указать, куда будут помещены ресурсы, созданные этим блоком, в популяцию по умолчанию или в другую популяцию агентов, которую вы можете выбрать ниже.
Синтаксис:  boolean addToCustomPopulation
Значение по умолчанию: популяцию по умолчанию (false)
Популяция агентов [динамический]
[Параметр виден, если Добавить ресурсы в: другую популяцию агентов] Имя популяции агентов, куда будут помещены ресурсы, созданные этим блоком.
Тип значения:  AgentList
Локальная переменнаяT unit - ресурс.
Включить сбор статистики
По умолчанию, статистика собирается для всех блоков Библиотеки Моделирования Процессов. Тем не менее, вы можете настроить этот параметр и выключить сбор статистики, чтобы улучшить динамику модели. Для этого добавьте блок PML Settings  и отключите опцию Включить статистику по умолчанию. Таким образом, вы отключите сбор статистики для всех блоков диаграммы процесса в этой модели. Но вы можете включить статистику для некоторых конкретных блоков, включив эту опцию Включить сбор статистики в свойствах самого блока.
Синтаксис: boolean forceStatisticsCollection
Значение по умолчанию: false
Действия
При создании нового ресурса [код]
Код, выполняемый при создании нового ресурса (может использоваться для дополнительной инициализации).
Локальная переменная: T unit - только что созданный ресурс.
При уничтожении ресурса [код]
Код, выполняемый при уничтожении ресурса.
Локальная переменная: T unit - ресурс.
При захвате [код]
Код, выполняемый при захвате ресурса.
Локальные переменные: T unit - ресурс.
                                           Agent agent - агент, захвативший этот ресурс.
При освобождении [код]
Код, выполняемый при освобождении ресурса.
Локальные переменные: T unit - ресурс.
                                           Agent agent - агент, освобождающий ресурс.
При завершении [код]
Код, выполняемый при завершении задачи ресурса.
Локальные переменные: T unit - ресурс.
При начале перерыва [код]
[Виден, если выбрана опция Перерывы] Код, выполняемый при начале перерыва в работе ресурсов.
Локальная переменная:  T unit - ресурс.
При окончании перерыва [код]
[Виден, если выбрана опция Перерывы] Код, выполняемый при окончании перерыва в работе ресурсов.
Локальная переменная:  T unit - ресурс.
При прекращении перерыва [код]
[Виден, если выбрана опция Перерывы] Код, выполняемый при прерывании перерыва в работе ресурсов.
Локальная переменная:  T unit - ресурс.
При поломке [код]
[Виден, если выбрана опция Аварии / ремонты] Код, выполняемый при аварии.
Локальная переменная:  T unit - ресурс.
При починке [код]
[Виден, если выбрана опция Аварии / ремонты] Код, выполняемый при окончании ремонтных работ.
Локальная переменная:  T unit - ресурс.
При начале ТО [код]
[Виден, если выбрана опция Обслуживание] Код, выполняемый при начале обслуживания.
Локальная переменная:  T unit - ресурс.
При окончании ТО [код]
[Виден, если выбрана опция Обслуживание] Код, выполняемый при окончании обслуживания.
Локальная переменная:  T unit - ресурс.
При изменении состояния ресурса [код]
Код, выполняемый, когда ресурс меняет свое действие.
Локальные переменные:
T unit - ресурс.
boolean busytrue, если ресурс занят (это не значит, что он был свободен ранее), false, если свободен.
ResourceTaskType type - один из типов задач, если ресурс занят: TASK_ENTITY, TASK_END_OF_SHIFT, TASK_WRAP_UP, TASK_BREAK, TASK_REPAIR, TASK_MAINTENANCE, TASK_CUSTOM.
Agent agent - агент, сопоставимый с этой задачей единицы ресурса. Актуально для типов TASK_ENTITY (где агент владеет ресурсом) и TASK_WRAP_UP (агент, который прежде использовал эту единицу ресурса и недавно освободил ее).
ResourceTask task - дескриптор задачи, применим в случае типа TASK_CUSTOM: будет ссылка на блок ResourceTask, который представляет текущую задачу ресурса.

Функции

double utilization() - Возвращает среднее значение коэффициентов загрузки каждого ресурса этого блока (собранное за время, прошедшее с последнего вызова функции resetStats()). Если количество доступных ресурсов задано с помощью расписания, то коэффициент загрузки рассчитывается только для рабочих часов.

int idle()- Возвращает количество свободных ресурсов.

int busy() - Возвращает количество занятых ресурсов, включая те, которые находятся в завершении, обслуживании, перерыве, аварии.

boolean containsUnit(Agent unit) - Проверяет, содержит ли набор ресурс указанный ресурс. Возвращает true, если содержит; иначе, false).

void setShiftGroupCapacity(int id, int capacity) - Устанавливает новый размер смены. Не убирает лишние ресурсы, а присваивает им задачу "out-of-shift" (сначала незанятым ресурсам, затем ресурсам с задачами с меньшим приоритетом).

int size() - Возвращает общее количество ресурсов, включая те, которые не входят в текущую рабочую смену.

int sizeActive() - Возвращает общее количество ресурсов в текущей смене.

int sizeOfShiftGroup(int id) - Возвращает общее количество ресурсов (включая те, которые не входят в смену) в смене с заданным ID.
Параметр: id - id смены (1, 2, 3...)

void resetStats() - Удаляет собранную статистику использования ресурса.

Collection<ResourceRequest> getRequests() - Возвращает текущую очередь запросов к ресурсам этого набора. Запросы в очереди упорядочены по их приоритету. Этот список не может быть модифицирован.