Ветвление. Использование выражений 


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



ЗНАЕТЕ ЛИ ВЫ?

Ветвление. Использование выражений



 

Модуль ветвления Decide – направляет входящие транзакты по одной из исходящих ветвей в зависимости от условия или случайным образом.

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

 

Таким образом, модуль Decide позволяет реализовать модели с ветвлением, реализовать какой-то условие. Отметим, что прохождение транзактом модуля Decide происходит мгновенно, не занимает модельного времени [13].

Существует два варианта модуля Decide – «По вероятности» (by chance) или по условию (by condition). Тип задается в параметрах модуля.

Параметры модуля:

Выбран вариант «по вероятности». Задается вероятность того, что транзакт последует по правой ветке в процентах (Percent True). В данном случае, документ заполнен правильно с вероятностью 90%.

Другие примеры с модулем Decide «по вероятности»: деталь оказалась бракованной; клиент нуждается в дополнительных услугах; автомобилю нужно свернуть налево и т.д.

Модуль Decide может иметь не две, а несколько исходящих ветвей. Это относится как к варианту «по условию», так и к варианту «по вероятности». На рисунке показан случай, когда студент может получить одну из четырех оценок, от чего будет зависеть дальнейшая обработка соответствующего транзакта.

 

Окно параметров приведено на следующем рисунке. Выбран вариант «N-way by Chance», то есть несколько вариантов с вероятностью. Теперь необходимо задать вероятность в процентах для всех правых ветвей. Само собой, сумма должна быть меньше 100%. В нашем примере, вероятность получить «отлично» составляет 10%, «хорошо» – 30%, «удовлетворительно» – 50%, «неудовлетворительно» – оставшиеся 10% (нижняя ветвь Else).

 

 

Тип модуля Decide «По условию» («by condition») позволяет направлять транзакты в зависимости от значения некоторого логического выражения истина/ложь. Например: машины с весом, превышающим некоторый лимит, направляются на объездную дорогу; если какое-то устройство занято, агрегат направляется на резервное устройство, документ определенного типа пересылается заданному исполнителю и т.д.

В примере на следующем рисунке предполагается, что у транзакта-грузовика [14] имеется атрибут mass. Если значение этого атрибута больше или равно 20, транзакт перейдет по ветке True (правой), иначе по ветви False (нижней).

 

Есть и другие варианты условия:

 

В модуле decide может проверяться:

- значение переменной (Variable);

- значение элемента массива (Variable Array 1D, Variable Array 2D);

- значение атрибута транзакта (Attribute);

- тип транзакта (Entity Type);

- произвольное выражение (expression).

Для блока Decide с типом «по условию» также возможно наличие нескольких выходов.

Немного исправим пример с грузовиками, теперь, машины с массой 20 тонн и больше направляются по одному пути, от 10 до 20 тонн – по второму, меньше 10 тонн – по третьему.

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

 

 

Необходимо указать условия (они могут быть разного типа) для каждой из правых веток. Для этого используются кнопки Add, Edit, Delete. При этом будет открываться окно задания условий.

Обратим внимание на порядок условий в примере. Если бы мы поменяли их местами, а пришедший транзакт представлял бы грузовик весом 25 тонн, то первое условие было бы выполнено (атрибут mass >= 10) и грузовик отправился бы на неверный путь. Таким образом, следует внимательно следить за порядком условий.

Рассмотрим теперь несколько примеров моделей с модулем Decide.

 

Пример 3. Новые работники поступают на инструктаж по технике безопасности. После инструктажа следует небольшой тест, и если работник с ним не справляется (вероятность этого 15%), работник должен повторить инструктаж и тест снова.

 

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

Понятно, что модули Process с названиями Teach и Test соответствуют операциям обучения и проверке знаний. Далее следует модуль Decide, распределяющий сотрудников в зависимости от результатов теста. Не прошедшие тест сотрудники (нижняя ветка false) вновь отправляются на модуль процесса Teach.

 

 

Параметры модуля Decide:

 

 

Как видим, выбран тип «по вероятности» и указана вероятность успешного прохождения теста.

 

Пример 4. Студенты посещают буфет. Если студент обнаруживает, что очередь превышает 5 человек, то он уходит.

 

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

Структура модели очевидна. Модуль процесса buyFood соответствует покупке продуктов в буфете, и требует ресурса – продавца. Таким образом, у модуля будет очередь для студентов, ожидающих обслуживания.

Два модуля Dispose позволяют оценить, сколько студентов смогли купить себе обед (withFood), а сколько – нет (Hungry).

Рассмотрим модуль Decide с названием IsLineTooLong. Здесь выбран тип «По условию». Условием является выражение «Expression». Задано следующее логическое выражение:

 

NQ(buyFood.Queue)<=5

То есть проверяется, что число транзактов в очереди с именем bueFood.Queue в настоящий момент (функция NQ()) меньше или равно пяти.

 

 

Для ввода этого выражение удобно использовать построитель выражений. Если в поле Value нажать правую кнопку мыши и в контекстном меню вызвать Build expression, то в удобном окне построителя выражений можно легко получить доступ к необходимым объектам Arena:

 

 

В данном случае в древоподобном списке мы выбрали Basic Process Variables (что дало нам доступ к объектам Arena), затем Queue (очереди), а затем функцию Current Number in Queue (обозначение NQ()). В выпадающем списке справа мы выбрали имя интересующей нас очереди buyFood.queue.

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

Покупатель в супермаркете станет выбирать кассу с более короткой очередью.

 

 

В модуле decide происходит выбор дальнейшего пути покупателя. Если очередь у первой кассы короче – клиент направляется к ней, иначе – ко второй кассе.

 

 

 

Рассмотрим еще один пример.

 

Пример 5. Поступившая деталь будет проходить обработку на более современном станке, но если этот станок занят – деталь будет обработана на менее современном. Если заняты оба станка, деталь будет выведена из цеха без обработки.

 

Фрагмент модели показан на рисунке:

 

Имеются два ресурса newTool и oldTool, они используются в соответствующих процессах. Оба модуля имеют очереди, однако в ходе моделирования эти очереди всегда будут пусты.

Параметры модуля Decide:

 

 

Модуль имеет тип «N-way by condition». Имеются три выхода – на новый станок, на старый станок и на выход без обработки (else, по умолчанию). Для первых двух исходящих веток прописаны условия. Для нового станка:

STATE(newTool) == IDLE_RES

Для старого станка:

 

STATE(oldTool) == IDLE_RES

Функция STATE() возвращает состояние заданного ресурса. Константа IDLE_RES означает, что ресурс свободен.

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

 

Пример 6. Вернемся теперь к примеру с парикмахерской (пример 1). Внесем в него исправления, будем считать, что прибывают клиенты двух типов – мужчины и женщины. Причем женщина с вероятностью 25% помимо стрижки захочет сделать маникюр, за что отвечает специальный сотрудник. Продолжительность маникюра – 30± 5 минут [15].

 

Теперь у нас два типа транзактов, с соответствующими изображениями:

 

На рисунке представлен новый граф модели:

 

 

Генераторы транзактов ManCome и WomanCome вводят в модель соответственно транзакты «мужчина» и «женщина»:

 

 

Далее эти транзакты направляются в модуль Process, отвечающий за стрижку. После модуля стрижки имеется модуль isMan типа Decide, который направляет транзактов-мужчин и транзактов-женщин в разные ветви. Транзакт-мужчина покидает модель с помощью модуля ExitModel типа Dispose, а транзакт-женщина направляется далее в модуль WantManicure.

В параметрах модуля isMan используется тип «by condition» (по условию), причем в качестве условия выбран тип транзакта Entity type. Если транзакт – мужчина, он направляется по правой ветке (True):

 

 

Транзакты-женщины попадают во второй модуль Decide с названием WantManicure, где определяется (по вероятности), желает ли женщина сделать маникюр.

 

С вероятностью 25% транзакт перейдет по правой ветке в модуль Process соответствующий маникюру Manicure. В противном случае, транзакт покидает модель.

Задача 1. Посетители небольшого магазина самообслуживания приходят раз в 3 минуты, закон распределения – экспоненциальный. Покупатели тратят на выбор товара от 3 до 7 минут, закон распределения равномерный. Обратим внимание, что одновременно выбирать товар возле прилавков может неограниченное число покупателей. Затем покупатели отправляются к кассам. В магазине две кассы и покупатель перейдет к той, возле которой меньше очередь. Обслуживание на кассе занимает от 3 до 5 минут, закон распределения равномерный. Построить модель магазина, оценить среднее время ожидания в очереди, загрузку кассиров.

 

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

1) Для чего предназначен модуль Decide?

2) В чем разница между вариантами модуля Decide «по условию» и «по вероятности»?

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

4) Как проверить длину определенной очереди?

5) Каким образом можно направить транзакт в ту или иную ветвь при условии занятости определенного ресурса?

6) Как можно направить транзакты разных типов в разные модули?

7) Почему важна правильная последовательность условий для модуля с несколькими исходящими ветвями?

8) Можно ли использовать атрибуты транзакта в условии модуля Decide?

9) В каком случае модуль Decide может иметь несколько выходов?

10) Имеется ли возле модуля Decide очередь?

11) Что означают цифры, которые появляются у выходов модуля Decide при моделировании?

12) В каком случае в модуле Decide необходимо использовать логическое выражение?

 

 



Поделиться:


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

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