Использование пулов (set) ресурсов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование пулов (set) ресурсов



 

Arena предоставляет еще одну возможность работы с ресурсами – это пул ресурсов (set). Используется также термин «множество ресурсов». Цель применения множеств состоит в повышении гибкости модели: исследователь создает отдельные ресурсы, затем объединяет их в множества, а затем в блоке Process указывает не конкретный ресурс, а множество. Например, пул «Водители» может включать ресурсы «Иванов», «Петров» и «Зайцев». При обработке транзакта (задания не перевозку) не важно, кто именно из водителей будет производить рейс. При поступлении транзакта будет выбран свободный водитель из пула.

В результате повышается детализация и гибкость – ведь каждый ресурс моделируется отдельно, ресурсы не совсем одинаковы, есть возможность задать для каждого свои характеристики (влияющие на стоимость выполнения работ или на их продолжительность). Например, у фирмы может быть несколько станков с разной производительностью. Можно собирать статистику по каждому ресурсу.

Обратим внимание, что один и тот же ресурс может входить в несколько пулов.

Рассмотрим пример. В качестве ресурсов выступают сотрудники:

 

 

У нас также есть несколько пулов:

 

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

Нажав кнопку в строке таблицы можно открыть список элементов пула и выбрать ресурсы из имеющихся, чтобы включить их в этот пул.

Пул менеджеров:

 

 

Пул старших менеджеров:

 

 

Пул руководителей:

 

 

Обратим внимание: Вика и Игорь входят в пулы «менеджеры» и «старшие менеджеры» - это значит, они могут выполнять сложные работы, но также при необходимости выполнят и стандартные операции менеджеров. При этом Вика является еще и руководителем, если будет проводиться совещание, Вика будет привлечена к этому совещанию (скорее всего модули Process, связанные с совещанием будут иметь высший приоритет).

Рассмотрим теперь операцию обработки поступившей расходной накладной, представленную модулем Process с задействованными ресурсами. Параметры модуля приведены на рисунке.

 

 

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

 

 

В поле Type этого окна указываем «Resource», если хотим точно указать конкретный ресурс или «Set», если хотим использовать множество, пул ресурсов.

В данном случае выбран тип «Set», задано имя пула («Managers») и указано, что для операции нужен один менеджер.

Правило выбора «Selection Rule» определяет, какой именно ресурс из свободных в данный момент будет выбран.

 

Возможны следующие варианты выбора:

- последовательный выбор (Cyclical). Члены пула будут выбираться по порядку, при очередном обращении будет выбираться следующий свободный ресурс. Например, если первую операцию выполняла менеджер Лена, следующую будет выполнять менеджер Маша и т.д. Это наиболее распространенный вариант, обеспечивающий равномерную загрузку ресурсов;

- случайный ресурс (Random);

- в порядке предпочтения (Preferred Order). Будет выбран самый верхний в списке из свободных ресурсов пула. Этот вариант встречается, если: ресурсы имеют разную производительность и желательно использовать более быстрый; желательно задействовать более опытного работника; ресурсы имеют разную стоимость машино-часа и желательно задействовать более дешевый; некоторые ресурсы могут требоваться в другом месте и отвлекать их стоит только в случае необходимости – в последнюю очередь;

- определенный член пула (Specific member). При выборе этой опции этом появляется поле, где следует указать номер ресурса в пуле. Как правило, этот вариант используется в модуле Process типа Delay-Release (чтобы отпустить захваченный ранее и удерживаемый транзактом ресурс из пула);

- ресурс с наибольшим числом свободных единиц (Largest remaining capacity);

- наименее загруженный (Smallest number busy).

Два последних варианта используются, если ресурсы пула имеют мощность большую единицы.

В поле Save Attribute указывается атрибут транзакта, в который будет записан номер выбранного ресурса из пула.

 

Пример 13. На предприятии работают 3 новых и 3 старых станка. Старый станок тратит на обработку детали в среднем 30 минут при среднеквадратическом отклонении 3. Новый тратит 20 минут при том же среднеквадратичном отклонении. Если новый станок свободен, обработку следует проводить на нем. Детали поступают раз в 7 минут, закон распределения экспоненциальный. Построить модель, оценить загрузку оборудования.

 

Граф модели показан на рисунке.

 

 

Ресурсами модели выступают станки – старый и новый:

 

С помощью невизуального модуля Set создаем пул Tools и включаем в него ресурсы:

 

Обратим внимание, на порядок ресурсов в списке – новый станок идет первым, поскольку именно его мы хотим выбирать, если это возможно.

Для модуля Process в окне редактирования ресурса указываем, что нам нужен не конкретный ресурс, а пул (то есть в поле Type выбираем значение «Set»):

 

Выбираем название пула (Tools). Указываем Selection Rule (правило выбора) «Preferred Order». Теперь, если один из новых станков свободен, деталь будет обрабатываться на нем.

В поле Save Attribute указываем атрибут (мы назвали его nomer). В атрибут nomer теперь будет занесен номер типа станка, который будет выбран из пула для обработки детали. Зная номер выбранного ресурса, мы можем использовать этот номер в модели.

Заведем переменную-массив tmean, где будем указывать ожидаемое время обработки детали.

 

Элемент массива tmean с индексом nomer будем указывать в модуле Process при определении времени обработки детали (тогда для нового станка ожидаемое время будет 20 минут, для старого - 30):

 

 

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

Пример 14. Несколько усложним пример. Допустим, на выбранном станке нужно выполнить не одну, а две последовательных операции. Вторая операция, как на старом, так и на новом станке занимает 4+-2 минуты, закон распределения равномерный. Обратим внимание, что рабочий проводит вторую операцию сразу же после первой, не снимая деталь со станка.

Таким образом, имеем многошаговую модель, и траназакт-деталь должен захватить ресурс, удерживать его, а затем отпустить уже в другом модуле.

 

Граф модели показан на рисунке.

 

Единственное изменение в первом модуле Process – его тип изменился на Sieze-Delay. То есть теперь занятый ресурс не отпускается, а удерживается транзактом.

Второй модуль Process с именем ProcessDeatail2 соответствует второй выполняемой операции. Эта операция делается на том же самом станке, что и первая (на удерживаемом транзактом ресурсе). Соответственно, тип модуля Delay-Release.

 

 

Возникает вопрос, как указать, какой именно ресурс нужно отпускать? Номер ресурса мы сохраняли в атрибуте транзакта с названием nomer. Именно этим атрибутом мы и воспользовались.

 

 

Как видим, здесь мы также выбираем тип Set (пул ресурсов). Указываем имя пула ресурсов (tools), говорим, что нужно использовать и отпустить одну единицу ресурса.

Но в качестве правила выбора (Selection Rule) указываем «Speciefic Member» (конкретный номер) и указываем индекс (Set Index), а в качестве индекса называем атрибут nomer. Ведь именно в этом атрибуте транзакта-детали сохранен номер станка, который выбран для обслуживания.

 

Пример 15. Вернемся к примеру с парикмахерской (Пример 1, Пример 6, Пример 9, Пример 10). В прошлых примерах предполагалось, что любой парикмахер может выполнить любую стрижку. Будем теперь отслеживать их работу конкретных парикмахеров имеющих определенные специальности.

В парикмахерской работают:

- женские мастера: Ира, Нина;

- мужской мастер: Лена;

- мастер-универсал: Маша (может стричь и мужчин и женщин);

-специалист по маникюру: Рита [19].

 

Структура графа модели не изменится по сравнению с примером 10.

На рисунке показан список ресурсов.

 

 

 

Определим два множества (пула) ресурсов:

 

Мужские мастера (maleMasters):

 

Женские мастера (femaleMasters):

 

Обратим внимание, Маша, как универсал, входит в оба пула.

Модуль Process, отвечающий за маникюр, претерпел одно изменение – теперь мы явно указываем имя ресурса Rita (Рита является мастером-маникюра, поскольку она одна, мы не стали оформлять соответствующий пул, а указали имя ресурса явно).

 

 

В модуле Process для женской стрижки HairCutWoman теперь указываем не название ресурса, а пул ресурсов – femaleMasters.

 

 

Посмотрим изменения в отчете:

 

Из фрагмента отчета видно, что мужчинам приходится дольше ждать в очереди.

Следующий фрагмент отчета позволяет судить о нагрузке мастеров.

Из отчета видно, что мастер-универсал Маша имеет наибольшую загрузку среди сотрудников салона.

Экспериментируя с множествами, можно будет повысить эффективность работы мастеров и выручку предприятия. Например, можно обучить одного из женских мастеров мужской стрижке и включить его во множество универсалов. При этом стоит множество мужских мастеров отсортировать так, чтобы мастера-универсалы привлекались в последнюю очередь (в модуле Process указываем правило выбора Preferred Order). Можно проводить и другие эксперименты, отслеживая результаты – выручку, время ожидания в очередях, загрузку мастеров.

Выполним теперь анимацию ресурсов, чтобы наглядно видеть работу парикмахеров.

Выберем элемент панели анимации «ресурс».

В появившемся окне при необходимости подгрузим графическую библиотеку «Workers». Здесь выберем в правом списке подходящий рисунок. К сожалению, парикмахера среди рисунков нет, поэтому подберем наилучший рисунок и скопируем его кнопкой Copy. Новый рисунок отредактируем.

Теперь выполняем необходимые действия в окне ресурса:

- выбираем идентификатор ресурса Ira;

- размещаем старый рисунок для состояния IDLE (в левом списке выбираем IDLE, в правом - нужный рисунок и нажимаем клавишу <<);

- размещаем новый рисунок с ножницами для состояния BUSY;

- указываем флажок Seize Area (так мы сможем видеть изображение транзакта, которое в настоящий момент обслуживает мастер).

Далее нажимаем Ok и размещаем графический элемент на полотне.

 

Кружок с пунктирной линией – это и есть Sieze Area, его можно расположить там, где удобно. Надпись с именем парикмахера сделана обычными графическими средствами Arena. Аналогичным образом размещаем графические элементы ресурса для всех остальных мастеров:

 

При моделировании наглядно видно, кто из мастеров занят и кого из клиентов он обслуживает в настоящий момент.

Контрольные вопросы

1) Для чего используют пулы ресурсов?

2) Может ли один ресурс входить в несколько пулов?

3) Что такое правило выбора (Selection Rule)?

4) Если имеется несколько рабочих разной квалификации, как обеспечить направление работы к наиболее квалифицированному свободному рабочему?

5) Как при этом в модуле Process задать время выполнения операции именно выбранным рабочим?

6) Если транзакт захватил ресурс из пула и удерживает его, как сделать так, чтобы в другом модуле транзакт отпустил именно захваченный ресурс?

7) Как сделать загрузку ресурсов пула более или менее равномерной?

8) На предприятии имеется четыре одинаковые единицы ресурса «Станок», как можно визуализировать каждый станок в отдельности?

9) Иван является бригадиром лесорубов и подобно другим руководителям принимает участие в планерках у директора базы. Как отразить тот факт, что Иван при этом остается лесорубом и принимает участие в работе по вырубке леса?

10) С помощью какого модуля создаются пулы ресурсов?

11) Можно ли выбрать для операции несколько единиц одного ресурса из пула?

12) Рабочие объединены в пул и выполняют операции по обработке детали. Однако одну из операций может выполнять только один рабочий, который единственный из всей бригады обладает допуском для работы с опасным оборудованием. Как это можно отразить в модели? Перечислить три возможных способа.


Использование шлагбаумов

 

Модуль Hold выполняет роль «шлагбаума» – при определенных обстоятельствах не пропускает транзакты далее, удерживает их. Относится к шаблону Advanced Process.

Обозначение:

 

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

Модуль Hold может быть трех типов:

- ожидать сигнала (Wait for Signal). Сигнал может быть отправлен из другого места модели с помощью модуля Signal;

- ожидать условия (Scan for Condition). Условием может быть логическое выражение. Оно может зависеть от переменных (каждые четыре часа касса делает перерыв, соответствующая переменная устанавливается в единицу и клиенты не могут попасть к кассиру), либо от состояния различных объектов Arena (причал морского порта допускает одновременную швартовку пяти судов, если длина соответствующей очереди равна пяти, то остальные суда вынуждены ждать на рейде);

- задержка навсегда Infinite Hold. Шаблон Advanced Process включает модули, позволяющие «вытягивать» транзакты из определенной очереди по заданному условию. Например, можно собирать в течение некоторого времени несколько транзактов-кандидатов в очередь, а затем выбрать из них самого опытного.

Параметры модуля показаны на рисунке.

 

Этот модуль Hold не пропускает транзакты-грузовики, если температура дорожного полотна превышает некоторый предел (33 градуса Цельсия). Значение текущей температуры хранится в переменной temp, значение которой может меняться в другом месте модели.

 

Пример 16. В приемной врача имеется три стула, где располагаются посетители в ожидании приема. Остальные посетители вынуждены ждать в коридоре.

 

Граф модели показан на рисунке. Модуль Hold проверяет, есть ли свободные места в очереди (длина очереди в кабинете меньше трех). Если есть, транзакт-посетитель переходит в модуль процесса, соответствующий приему и, если врач занят, встает очередь. Очередь возле модуля Hold соответствуют посетителям, ожидающим в коридоре.

 

Параметры модуля Hold показаны на рисунке. Тип модуля – «по условию» (Scan for condition). Условие прохода задано логическим выражением NQ(VisitProcess.Queue)<3. То есть, число транзактов в очереди должно быть меньше трех.

 

 

Добавим анимацию. Для этого нарисуем кабинет, приемную, разместим ресурс (врача) и преобразуем очереди в точечную форму.

Вид модели во время прогона:

Рассмотрим случай, когда модуль Hold можно использовать для создания общей очереди.

Пример 17. Вернемся к примеру со станками (Пример 5). Поступившая деталь будет проходить обработку на более современном станке, но если этот станок занят – деталь будет обработана на менее современном. Ранее, в случае занятости обоих станков мы выводили деталь из модели без обработки. Теперь же реализуем более реалистичный вариант –деталь будет ожидать в очереди, пока не освободится хотя бы один из станков.

 

Фрагмент модели:

Перед модулем выбора станка установлен модуль Hold, который не пропустит деталь далее, если оба станка заняты.

 

 

Условие звучит так: «пропустить, если свободен новый станок ИЛИ свободен старый станок».

 

STATE(newTool) == IDLE_RES || STATE(oldTool) == IDLE_RES

 

Модуль Hold позволяет строить достаточно гибкие модели, когда поведение компонента зависит от других компонентов системы. Рассмотрим более крупный пример.

 

Пример 18. На производственном предприятии имеется участок пути, где с помощью автокаров перевозятся материалы. Время от времени, происходит авария, и участок выходит из строя, пока бригада рабочих не ликвидирует последствия аварии. После этого движение автокаров возобновляется.

 

Граф модели приведен на рисунке.

 

Как видим, имеются два сегмента модели. Верхний отвечает за движение машин. Нижний – моделирует аварию и ее ликвидацию.

Заведем переменную trouble, значение которой будет служить признаком наличия аварии в настоящий момент. Если произошла авария и ее пока не ликвидировали, то значение переменной trouble равно 1. Если аварии в настоящий момент нет – значение равно 0.

Модуль Hold будет пропускать машины на участок, если значение переменной trouble равно 0:

 

 

Чтобы моделировать возникновение и ликвидацию аварий введем фиктивный транзакт troubleEntity, который будет циркулировать по нижнему сегменту модели. Транзакт создается модулем Create, в момент времени 0. Поскольку ограничитель Max Arrivals установлен равным единице, то будет создан только один такой транзакт.

 

Для анимации добавим светофор. Используем элемент Level, где в поле Expression укажем имя переменной trouble и выберем форму круга для этой фигуры.

 

Проходя следующий модуль (Assign) транзакт устанавливает значение переменной trouble в ноль. То есть система приводится в состояние «аварии нет».

 

 

Далее транзакт следует в модуль Process с называнием WaitForTrouble. Смысл «обслуживания» транзакта состоит в том, что участок эксплуатируется до появление аварии. Окончание обслуживания означает, что произошла авария.

 

 

Далее транзакт следует в модуль Assign, где, установив значение переменной trouble в единицу, объявляет системе о наличии аварии. Теперь модуль Hold не пропускает транзакты-машины.

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

 

 

 

Задача 2. Автомобили прибывают к железнодорожному переезду примерно раз в минуту (закон распределения экспоненциальный). Чтобы пересечь переезд автомобиль тратит 10-20 секунд (закон распределения равномерный). Раз в 10 минут (закон распределения экспоненциальный) приезжает поезд, которому требуется 3 минуты (экспоненциальный), чтобы миновать переезд.

Провести моделирование системы, используя модуль Hold и переменную, означающую наличие поезда.

 

Пример 19. Имеется мост, движение автомобилей по которому возможно только в одну сторону в одно время. При этом на мосту помещаются 5 автомобилей. Чтобы пересечь мост нужно ровно две минуты. Автомобили прибывают к каждому концу моста раз в минуту (закон распределения экспоненциальный).

 

Для решения задачи необходимо определиться с транзактами. В модели будут два типа транзактов:

- автомобили, прибывающие к левому концу моста leftCar;

- автомобили, прибывающие к правому концу моста rightCar.

 

 

 

В качестве ресурса установим «место на мосту», причем зададим мощность, равную 5. Мы можем не задумываться о том, что автомобили пересекают мост один за другим, поскольку время пересечения фиксировано и обгонять друг-друга автомобили не могут. Важно лишь общее число автомобилей, которые могут оказаться на мосту.

Имеются два сегмента модели, верхний демонстрирует проезд автомобилей слева направо, нижний – справа налево.

 

 

Пересечение моста – это процесс.

Поскольку мост может пересекать несколько автомобилей одновременно, то невозможно моделировать его как конкуренцию за ресурс – то есть с помощью процесса. Если автомобиль подъезжает к мосту слева, а в этот момент мост пересекает автомобиль справа, левый автомобиль не должен вступать на мост, даже если на мосту есть свободное место.

 

 

Таким образом, нужна пара модулей Hold. Первый из них (LeftHold) не допустит въезда автомобилей на мост слева, если кто-то пересекает его справа. Аналогично, второй модуль RightHold не допустит автомобиль справа, если другие автомобили пересекают мост слева.

 

 

Модули Hold имеют тип Scan for Condition (по условию). Модуль LeftHold, призванный ограничивать автомобили слева имеет логическое выражение для условия пропуска:

 

CrossFromRight.WIP ==0

 

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

Модуль RightHold работает аналогично, но проверяется число транзактов в модуле CrossFromLeft.

Для повышения наглядности изобразим светофоры в виде элементов Level:

 

 

Вид модели во время прогона:

Задача 3. Решить предыдущий пример (Пример 19) в условиях использования светофора, который делит время между правым или левым потоками. Разумеется, автомобиль не должен въезжать на мост, если с противоположной стороны автомобили заканчивают движение, даже при зеленом свете. После того, как задача со светофором будет реализована, следует сравнить эффективность двух систем – без регулирования и с регулированием – с точки зрения времени ожидания автомобилей перед мостом.

Задача 4. Отдел фирмы, обрабатывает документы, означающие приход и уход денежных средств. Документы поступают в разные моменты времени. В каждом документе прописана определенная сумма (формируется случайным образом), которая либо поступает на счет фирмы, либо должна быть уплачена. После поступления денежных средств (обработка приходного документа) баланс на счете увеличивается. Если баланс не позволяет оплатить расходный документ – расходный документ ожидает. Возможно, следует сначала оплачивать более мелкие суммы. Вероятно, стоит учесть время обработки документа сотрудником.

Необходимо отследить, насколько часто задерживается оплата.

Указание – следует использовать модули Assign, атрибуты транзактов, глобальную переменную для баланса, модуль Hold.

 

 

Контрольные вопросы

1) Какие бывают типы модуля Hold?

2) Что делает модуль Hold?

3) Каков смысл использования задержки транзакта навсегда?

4) Почему у модуля Hold имеется очередь?

5) Как работает модуль Hold с вариантом «по условию» (by condition)?

6) Как организовать задержку всех транзактов-автомобилей, если железнодорожный переезд сейчас пересекает поезд?

7) Какие параметры транзакта и модулей могут использоваться в условии модуля Hold?

8) В каком случае модуль Hold в варианте «по условию» пропускает транзакты?

9) Где в системе Arena можно найти модуль Hold?

 

 



Поделиться:


Последнее изменение этой страницы: 2016-06-29; просмотров: 613; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.90.40.84 (0.159 с.)