SelectOutput

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

Может использоваться для сортировки заявок согласно заданному критерию, для случайного разделения потока заявок на части и т.д. Предположим, например, что в Вашей модели моделируются клиенты (с помощью заявок типа Customer, у которого есть поле vip типа boolean). Тогда если Вы захотите направлять VIP клиентов в верхний порт (True), а всех остальных - в нижний (False), то Вы должны задать условие  entity.vip и выбрать класс Customer в качестве класса заявки объекта SelectOutput. Более сложный случай: Вы хотите перенаправить в верхний порт объекта только 80% VIP клиентов, а оставшиеся 20% (и всех остальных) - в нижний порт. Тогда условие будет выглядеть как  entity.vip && randomTrue( 0.8 ).

Иногда требуется иметь более двух выходов (и соответственно, больше одного условия). Вы можете создать свой собственный активный объект SelectOutput[N] с одним входным портом, несколькими (N) выходными портами и N-1 динамическим параметром, задающим условия. Есть два способа реализации: Вы можете либо использовать  каскад из N-1 объекта SelectOutput, либо добавить внутрь объекта один объект Exit и N объектов Enter (реализовать так называемый механизм  сложной маршрутизации).

Параметры класса

Класс заявки
Класс заявок, проходящих через объект, должен быть подклассом Entity. Указав класс заявки, Вы можете напрямую обращаться к полям этого класса в коде динамических параметров, например, onEnter.
Синтаксис: T extends Entity
Значение по умолчанию: Entity

Порты

InPort in
Входной порт.
OutPortPush outT
Выходной порт для заявок, для которых выбирается выход true.
OutPortPush outF
Выходной порт для заявок, для которых выбирается выход false.

Параметры

Выход true выбирается
Определяет, как будет производиться маршрутизация заявок: будут ли заявки направляться на выход true (верхний порт outTПри выполнении условия, заданного в поле Условие или же случайно, С заданной вероятностью, заданной в поле Вероятность [0..1].
Синтаксис: boolean conditionIsProbabilistic
Значение по умолчанию: С заданной вероятностью (true)
Условие [динамический]
[Параметр виден, если Выход true выбирается При выполнении условия] Условие, вычисляемое для входящей заявки. Если оно выполняется (равно true), то заявка покидает объект через порт outT, если нет - через порт outF
Синтаксис:  boolean condition
Локальная переменная: T entity - заявка.
Значение по умолчанию: randomTrue( 0.5 ) - не зависит от поступающих заявок и просто разделяет поток заявок на две равные части.
Вероятность [0..1] [динамический]
[Параметр виден, если Выход true выбирается С заданной вероятностью] Выражение, вычисляющее вероятность того, что текущая заявка покинет объект через порт outT. Значение вероятности должно лежать в пределах [0..1].
Синтаксис: double probability
Локальная переменная: T entity - заявка.
Значение по умолчанию: 0.5 - не зависит от поступающих заявок и просто разделяет поток заявок на две равные части.
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект.
Синтаксис: void onEnter
Локальная переменная: T entity - заявка.
Действие при выходе (true) [динамический]
Код, выполняемый, когда заявка покидает объект через порт outT.
Синтаксис: void onExitTrue
Локальная переменная: T entity - заявка.
Действие при выходе (false) [динамический]
Код, выполняемый, когда заявка покидает объект через порт outF.
Синтаксис: void onExitFalse
Локальная переменная: T entity - заявка.