AnyLogic
Развернуть
Размер шрифта

Функции ресурсов

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

Проще всего получить доступ к захваченным ресурсам можно в коде некоторых действий тех блоков Библиотеки моделирования процессов, которые работают с ресурсами. Например, в блоке Service в действии При захвате ресурса только что захваченный ресурс доступен как локальная переменная unit. Такая же локальная переменная есть и других действиях этого блока, таких, как При приостановке задачи, При возобновлении задачи, При прекращении задачи.

При доступе к ресурсу через локальную переменную unit в действии блока (например, в действии При начале блока Downtime), вам будет нужно явно привести эту переменную к действительному типу ресурса.

В приведенной ниже модели есть блок coffeeMachine, задающий пул ресурсов типа CoffeeMachine.

Демо-модель: Maintenance of a Coffee Machine Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

Доступ к ресурсу в этой модели осуществляется не только с помощью упомянутой выше локальной переменной unit, но и из блока, не обеспечивающего встроенного доступа к ресурсам. В блоке fillInWater типа Delay в коде действия При выходе доступ к ресурсу осуществляется через итератор:

Agent unit = coffeeMachine.iterator().next();

Для полноценной работы с ресурсом (например, для доступа к его параметрам), вам необходимо привести ресурс к его действительному типу. С учетом приведения типа код в этом примере выглядел бы так:

CoffeeMachine unit = (CoffeeMachine)coffeeMachine.iterator().next();

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

Следующие функции возвращают неизменяемые списки ресурсов. Вы можете получить доступ к отдельным ресурсам с помощью итераторов (пример использования итератора см. выше).

  • Чтобы получить список ресурсов, используемых агентом:
    agent.resourceUnits();
  • Чтобы получить список ресурсов, используемых агентом в блоке Service, называющемся service:
    service.getResourceUnits(agent);
Информация о ресурсах
Функция Описание
ResourcePool resourcePool() Возвращает блок ResourcePool, которому принадлежит этот ресурс.
ResourceType getResourceType() Возвращает тип ресурса (RESOURCE_STATIC, RESOURCE_MOVING, RESOURCE_PORTABLE).
Состояние
Функция Описание
boolean isBusy() Проверяет, занят ли текущий ресурс (захвачен, движется к базовому местоположению или к месту применения). Возвращает true, если ресурс занят, в противном случае — false.
boolean isIdle() Проверяет, свободен ли текущий ресурс, и можно ли его занять. Возвращает true, если ресурс свободен, в противном случае возвращает false.
boolean isReserved() Возвращает true, если ресурс зарезервирован определенным запросом.
Agent getReservedBy() Возвращает агента, который зарезервировал этот ресурс, или null (если этот ресурс не зарезервирован, см. isReserved()).
Agent getServicedEntity() Возвращает агента, который в данный момент владеет этим ресурсом. Возвращает null, если этот ресурс свободен либо занят сторонней задачей, не относящейся к агенту (к примеру, ремонт ресурсов).
Статистика загруженности
Функция Описание
double getUtilization() Возвращает загруженность ресурса: долю времени, в течение которой ресурс был занят. Возвращаемое значение загруженности ресурса находится в диапазоне [0..1]. Если доступность этого ресурса задана в блоке ResourcePool с помощью расписания, то коэффициент загрузки рассчитывается только для рабочих часов.
double timeInState(ResourceUsageState state) Возвращает время (в единицах модельного времени), которое ресурс провел в заданном состоянии.

state — состояние ресурса (ResourceUsageState.USAGE_IDLE или ResourceUsageState.USAGE_BUSY)
double timeInState(ResourceUsageState state, TimeUnits units) Возвращает время, которое ресурс провел в заданном состоянии (в заданных единицах измерения времени).

state — состояние ресурса (ResourceUsageState.USAGE_IDLE или ResourceUsageState.USAGE_BUSY)
units — константа, определяющая единицу измерения времени.
void resetStats() Производит сброс статистики загруженности, включая информацию о времени, проведенном в разных состояниях.
Статистика обслуживания, аварий, перерывов
Функция Описание
double totalDowntime() Возвращает время (в единицах модельного времени), которое ресурс провел в простое любого типа.
double totalDowntime(TimeUnits units) Возвращает время (в указанных единицах измерения времени), которое ресурс провел в простое любого типа.

units — константа, определяющая единицу измерения времени
double totalRepairTime() Возвращает время (в единицах модельного времени), которое ресурс провел в состоянии поломки.
double totalRepairTime(TimeUnits units) Возвращает время (в указанных единицах измерения времени), которое ресурс провел в состоянии поломки.

units — константа, определяющая единицу измерения времени
double totalMaintenanceTime() Возвращает время (в единицах модельного время), которое ресурс провел на обслуживании.
double totalMaintenanceTime(TimeUnits units) Возвращает время (в указанных единицах измерения времени), которое ресурс провел на обслуживании.

units — константа, определяющая единицу измерения времени
double totalBreaksTime() Возвращает время (в единицах модельного времени), которое ресурс провел на перерывах.
double totalBreaksTime(TimeUnits units) Возвращает время (в указанных единицах измерения времени), которое ресурс провел на перерывах.

units — константа, определяющая единицу измерения времени
double totalCustomTasksTime() Возвращает время (в единицах модельного времени), которое ресурс потратил на дополнительные задачи.
double totalCustomTasksTime(TimeUnits units) Возвращает время (в указанных единицах измерения времени), которое ресурс потратил на дополнительные задачи.

units — константа, определяющая единицу измерения времени
Прикрепление ресурсов
Функция Описание
void setAttached(boolean attached) Прикрепляет ресурс к агенту или отсоединяет ресурс от агента, который им владеет. Применимо только к захваченным агентами ресурсам, в противном случае будет выдана ошибка.

attached — при значении true ресурс присоединяется; false — отсоединяется
boolean isAttached() Проверяет, прикреплен ли ресурс к агенту. Возвращает true, если прикреплен, в противном случае возвращает false.
Задачи
Функция Описание
ResourceTaskType currentTaskType() Возвращает тип текущей задачи или null, если ресурс свободен.

Допустимые значения:

TASK_ENTITY — задача, которая выполняется, пока ресурс захвачен агентом
TASK_END_OF_SHIFT — ресурс находится в промежутке между рабочими сменами в соответствии с расписанием
TASK_WRAP_UP — завершающая задача, которая выполняется после того, как ресурс выполнил основную задачу и освободился от агента
TASK_BREAK — ресурс на перерыве
TASK_REPAIR — задача определена как ремонт
TASK_MAINTENANCE — задача определена как обслуживание
TASK_CUSTOM — нестандартная задача из списка, указанного в блоке Downtime
ResourceUnitTask currentTask() Возвращает текущую задачу этого ресурса в виде экземпляров соответствующих классов. Если ресурс свободен, возвращает null.

Допустимые значения:

ResourceUnitBasicTask — в данном случае ресурс находится на перерыве либо выполняет задачу, определенную как ремонт или обслуживание
ResourceUnitEntityServiceSubTask — ресурс выполняет задачу, будучи захваченным агентом
ResourceUnitCustomTask — ресурс выполняет нестандартную задачу из списка, заданного в блоке Downtime
ResourceUnitEndOfShiftTask — ресурс находится между задачами в соответствии с расписанием и не выполняет никаких задач
ResourceUnitWrapUpTask — ресурс выполняет задачу, которая выполняется после того, как ресурс закончил основную задачу и освободился от агента
Базовое местоположение
Функция Описание
void setHomeLocation(INode home) Задает базовое местоположение для ресурса.

home — базовое местоположение
INode getHomeLocation() Возвращает узел сети, заданный в качестве базового местоположения для этого ресурса.
void setHomePosition(double x, double y) Задает координаты базового местоположения ресурса.

x — X координата
y — Y координата
void setHomePosition(double x, double y, double z) Задает координаты базового местоположения ресурса.

x — X координата
y — Y координата
z — Z координата
double getHomeX() Возвращает X координату базового местоположения ресурса.
double getHomeY() Возвращает Y координату базового местоположения ресурса.
double getHomeZ() Возвращает Z координату базового местоположения ресурса.
double getHomeRotation() Возвращает угол вращения базового местоположения ресурса.
Как мы можем улучшить эту статью?