Source

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

Заявки могут быть либо базового для заявок класса Entity, либо любого класса пользователя, унаследованного от этого базового класса. Вы можете сконфигурировать объект так, чтобы он создавал заявки других типов, указав конструктор нужного класса в параметре Новая заявка, а также задать действие, которое должно выполняться перед тем, как новая заявка покинет объект, и связать с заявкой определенную фигуру анимации. 

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

Демо модель: Source Arrival Modes

Заявки могут создаваться согласно заданной интенсивности (которая может изменяться динамически с помощью метода set_rate()), времени между прибытиями, изменяющейся во времени интенсивности, заданной с помощью расписания или табличной функции (таблице интенсивностей), расписанию, задающему точные времена и количество прибывающих заявок, или "вручную" путем вызова метода объекта inject(). Например, пуассоновский поток заявок может быть промоделирован путем генерации заявок согласно заданной интенсивности, или согласно времени между прибытиями, подчиняющемуся экспоненциальному закону распределения. Если создание заявок подчиняется закону распределения, то время до создания следующей заявки вычисляется при создании заявки; следовательно, оно может быть сделано вероятностным, детерминированным, зависящим от каких-то дополнительных данных, и т.д.

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

Если заявки прибывают согласно заданному времени между прибытиями, и значение этого времени в какой-то момент становится равным Double.POSITIVE_INFINITY, то объект Source прекратит создание заявок (и в течение текущего "прогона" модели больше уже не возобновит). Если заявки прибывают согласно интенсивности, и значение интенсивности становится равным нулю, тообъект не будет создавать новые заявки до тех пор, пока значение интенсивности не станет положительным.

В некоторых случаях, чтобы реализовать сложные расписания прибытий заявок, имеет смысл использовать несколько параллельно работающих объектов Source, см. рисунок ниже.

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

Есть и другие способы создания заявок в моделях, построенных с помощью объектов Основной библиотеки, помимо Source. Например, Вы можете использовать в качестве начальной точки потока заявок объект Enter и добавлять заявки в поток с помощью его метода take(). Этот способ  обычно выбирается тогда, когда заявки создаются, например, с помощью диаграммы состояний или события, и их нужно просто добавить в моделируемый процесс.

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

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

Порты

OutPortPush out
Выходной порт.

Параметры

Заявки прибывают согласно
Определяет, будут ли заявки прибывать согласно:
Интенсивности - заявки прибывают согласно заданной интенсивности прибытия (эквивалентной экспоненциально распределенному времени между прибытиями со средним значением, равным 1/интенсивность).
Времени между прибытиями - время между двумя последовательными прибытиями определяется заданным выражением (используйте эту опцию для периодической генерации заявок или для генерации заявок с интервалами времени, не подчиняющимся экпоненциальному закону распределения).
Расписанию прибытий - заявки генерируются согласно указанному расписанию, в котором заданы моменты появления заявок и количество заявок, прибывающее в каждый указанный в расписании момент времени. 
Интенсивности (по расписанию) - заявки генерируются согласно указанному расписанию, в котором задано, как интенсивность прибытия заявок изменяется с течением времени. 
Таблице интенсивностей (устар.) - заявки генерируются согласно таблице интенсивностей - табличной функции, определяющей, как интенсивность прибытия заявок изменяется с течением времени. Начиная с версии 6.5.1 есть более полноценная и удобная альтернатива этому режиму - Интенсивности (по расписанию).
Таблице прибытий (устар.) - заявки генерируются согласно расписанию - табличной функции, в которой заданы времена прибытия заявок. и количество заявок, прибывающее в каждый указанный в таблице момент времени. Начиная с версии 6.5.1 есть более полноценная и удобная альтернатива этому режиму - Расписанию прибытий.
Вызовам метода inject() - заявки создаются не автоматически, а только при вызове метода inject().
Синтаксис: int arrivalType
Значение по умолчанию: Интенсивности
Допустимые значения: Source.RATE, Source.INTERARRIVAL_TIME, Source.RATE_SCHEDULE, Source.ARRIVAL_SCHEDULE, Source.RATE_TABLE, Source.ARRIVAL_TABLE, Source.MANUAL
Интенсивность прибытия
[Параметр виден, если Заявки прибывают согласно Интенсивности] Интенсивность прибытия заявок. 
Синтаксис: double rate
Значение по умолчанию: 1
Время между прибытиями [динамический]
[Параметр виден, если Заявки прибывают согласно Времени между прибытиями] Выражение, вычисляющее время до прибытия следующей заявки.
Синтаксис: double interarrivalTime
Значение по умолчанию: exponential(1)
Расписание интенсивностей
[Параметр виден, если Заявки прибывают согласно Интенсивности (по расписанию)] Имя расписания, в котором задано, как интенсивность прибытия заявок изменяется с течением времени. 
Синтаксис: Schedule rateSchedule
Расписание прибытий
[Параметр виден, если Заявки прибывают согласно Расписанию прибытий] Имя расписания, в котором заданы моменты появления заявок и количество заявок, прибывающее в каждый указанный в расписании момент времени. 
Синтаксис: Schedule arrivalSchedule
Таблица интенсивностей
[Параметр виден, если Заявки прибывают согласно Таблице интенсивностей (устар.)] Имя табличной функции, задающей изменение интенсивности прибытия заявок во времени. Табличная функция может быть циклической и должны быть интерполированной. В заданные в таблице моменты времени текущая интенсивность прибытия заявок будет пересчитана в соответствии с ее новым значением. Запрещается иметь в таблице строки с нулевым значением интенсивности.
Синтаксис: TableFunction rateTable
Таблица прибытий
[Параметр виден, если Заявки прибывают согласно Таблице прибытий (устар.)] Имя табличной функции, в которой заданы времена прибытия заявок. и количество заявок, прибывающее в каждый указанный в таблице момент времени. Например, если Вы укажете здесь таблицу с двумя строками (20, 100) и (50, 150), то объект выдаст 100 заявок в момент времени 20 и 150 заявок в момент времени 50. Табличная функция может быть циклической. Запрещается иметь в таблице строки с нулевым значением количества прибывающих заявок.
Синтаксис: TableFunction arrivalTable
Количество заявок, прибывающих за один раз [динамический]
[Параметр виден, если Заявки прибывают согласно ИнтенсивностиВремени между прибытиями или Таблице интенсивностей] Количество прибывающих за один раз заявок.
Синтаксис: int entitiesPerArrival
Значение по умолчанию: 1
Ограниченное количество прибытий
Если опция выбрана (true), то количество прибытий, генерируемое этим объектом, будет ограничено заданным ниже Максимальным количеством прибытий.
Синтаксис: boolean limitArrivals
Значение по умолчанию: false
Максимальное количество прибытий
[Параметр виден, если выбрана опция Ограниченное количество прибытий] Максимальное количество прибытий, заданное для этого объекта.
Синтаксис: int maxArrivals
Значение по умолчанию: Integer.MAX_VALUE
Новая заявка [динамический]
Выражение, определяющее, какая заявка будет создаваться (обычно просто вызов конструктора класса создаваемой заявки).
Синтаксис: Entity newEntity
Значение по умолчанию: new Entity()
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект.
Синтаксис: void onExit
Локальная переменная: T entity - заявка.
Фигура анимации заявки [динамический]
Фигура анимации, с помощью которой заявки, создаваемые этим объектом, будут отображаться на презентации. Фигура доступна из кода как  entity.getShape() и может быть изменена в любое время с помощью метода entity.setShape(). Поскольку этот параметр динамический, Вы можете задавать различные фигуры для различных заявок, или вообще задать уникальную фигуру для каждой заявки, написав здесь, например, new ShapeOval().
Синтаксис: Shape entityShape
Локальная переменная: T entity - заявка.
Уникальная фигура для каждой заявки
Если опция выбрана (true), то объект создаст копию заданной Фигуры анимации заявки и присвоит ее создаваемой заявке. В этом случае свойства фигуры (и ее содержимое, если это группа фигур) могут быть изменены отдельно для каждой заявки. Если же опция не выбрана, то все заявки будут отображаться с помощью одной и той же фигуры, и любое изменение ее свойств приведет к изменению анимаций всех таких заявок.
Синтаксис: boolean uniqueShape
Значение по умолчанию: false
Разрешить вращение
Если опция выбрана (true), то при движении заявок их фигуры анимации будут всегда поворачиваться согласно текущему направлению движения заявки.
Синтаксис: boolean enableRotation
Значение по умолчанию: false
Разрешить вращение по вертикали
Если опция выбрана (true), то при движении заявок их фигуры анимации будут поворачиваться согласно текущему направлению движения заявки как по горизонтали, так и по вертикали.
Синтаксис: boolean enableVerticalRotation
Значение по умолчанию: true

Функции

void inject(int n) - создает n заявок.

int count() - возвращает количество заявок, созданных этим объектом.