Вы, наверное, уже слышали, что в новом AnyLogic 7 работа с ресурсами стала более гибкой. Давайте суммируем, что за изменения произошли, и что это означает для разработчика моделей.
Во-первых, мы больше не разделяем обычные и сетевые ресурсы. Это разделение искусственно, и оно ушло во время «большого объединения понятий» AnyLogic 7.
Суть "большого объединения" как такового описывается вот так:
То есть ресурс теперь по сути – это агент. А значит, он может иметь своё поведение, заданное, например, картой состояний. Типичный пример: какое-то производственное оборудование, выступающее как ресурс, может либо работать, либо быть на ремонте. Это описывается небольшой картой состояний, приведённой ниже.
Каждая из единиц ресурса будет находиться в одном из состояний. При этом новая библиотека дискретно-событийного моделирования позволит выбрать для использования ресурс, находящийся в заданном состоянии, например, в состоянии «Работает». Для этого в свойствах блока Service «операция» задаём «условие выбора ресурса».
Другим важным изменением являются операции подготовки и остановки ресурса. Например, в процессе обслуживания пациента медсестре, прежде чем приступить к процедуре, надо забрать аппарат УЗИ, а после обслуживания вернуть его на место. Данный процесс элементарно описывается следующей диаграммой процессов.
AnyLogic 7 позволяет задавать альтернативные наборы ресурсов, подходящих для обслуживания. Например, на рисунке ниже ресурс «Медсестра» может быть заменён ресурсом типа «Техник».
Другое интересное нововведение – это политики вытеснения ресурсов. Когда появляется новая задача более высокого приоритета, вы можете выбрать, что делать с текущей задачей:
- Оставить выполняться и не вытеснять текущую работу;
- Ожидать оригинал ресурса: при этом задача прерывается и ждёт, когда тот же самый ресурс завершит её;
- Остановить выполнение: при этом задача просто отбрасывается и не будет завершена никогда;
- Захватить другой ресурс того же типа, чтобы продолжить обслуживание;
- Продолжить обслуживание без ресурса.

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

Допустим, ресурс требует техобслуживания. Это может быть задано задержкой или процессной диаграммой. Тем самым мы легко можем описать логику, приведённую в самом начале, заменив карту состояний внутри объекта отдельной процессной диаграммой.

Аналогичным образом в блоке ResourcePool можно задать расписание работы, перерывов, работу в несколько смен. Появляется возможность определять схему перерывов объектом «Расписание» и назначать приоритет перерывов. Вот как это выглядит в объекте ResourcePool:

А что если у наших ресурсов есть задачи, которые не ложатся на стандартные шаблоны – это не текущие рабочие процессы, а, например, совещание? В данном случае используйте «Дополнительные задачи». Для этого сначала нужно определить задачу блоком ResourceTask, а затем выбрать эту задачу в «Списке задач» блока ResourcePool:

Лучше один раз увидеть, чем сто раз услышать, поэтому для закрепления материала предлагаем вам посмотреть 10-минутное видео, в котором рассказывается про работу с ресурсами в новом AnyLogic:
