Source

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

Агенты могут быть стандартными или заданными пользователем агентами типа Agent. Вы можете сконфигурировать блок так, чтобы он создавал агентов других типов, указав конструктор нужного типа в параметре Новый агент, а также задать действие, которое должно выполняться перед тем, как новый агент покинет блок Source, в поле действия При выходе.

Есть несколько способов задания того, сколько агентов и когда должен создавать этот блок.

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

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

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

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

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

Параметры

Прибывают согласно
Определяет, будут ли агенты прибывать согласно:
Интенсивности - агенты прибывают согласно заданной интенсивности прибытия (эквивалентной экспоненциально распределенному времени между прибытиями со средним значением, равным 1/интенсивность).
Времени между прибытиями - время между двумя последовательными прибытиями определяется заданным выражением (используйте эту опцию для периодической генерации агентов или для генерации агентов с интервалами времени, не подчиняющимся экспоненциальному закону распределения).
Расписанию прибытий из БД - агенты прибывают согласно данным таблицы БД, которую пользователь указывает в параметре Таблица базы данных. Выберите столбец, содержащий моменты прибытий из раскрывающегося списка Время прибытия. Блок будет создавать одного агента для каждой записи данных в указанной таблице. Если вы хотите создавать несколько агентов для одной записи, установите флажок напротив опции За 1 раз создается несколько агентов и укажите необходимое количество агентов, прибывающих за 1 раз в поле Кол-во агентов, прибывающих за 1 раз.
Расписанию интенсивностей - агенты генерируются согласно указанному расписанию, в котором задано, как интенсивность прибытия агентов изменяется с течением времени.
Расписанию прибытий - агенты генерируются согласно указанному расписанию, в котором заданы моменты появления агентов и количество агентов, прибывающее в каждый указанный в расписании момент времени.
Вызовам метода inject() - агенты создаются не автоматически, а только при вызове функции inject().
Имя: arrivalType
Значение по умолчанию: Интенсивности
Допустимые значения:
Source.RATE - Интенсивности
Source.INTERARRIVAL_TIME - Времени между прибытиями
Source.DATABASE_ARRIVAL_TABLE - Расписанию прибытий из БД
Source.RATE_TABLE - Расписанию интенсивностей
Source.ARRIVAL_TABLE - Расписанию прибытий
Source.MANUAL - Вызовам метода inject()
Интенсивность прибытия
[Параметр виден, если Прибывают согласно: Интенсивности] Интенсивность прибытия агентов. Если указана интенсивность и ее значение станет 0, следующее прибытие не будет запланировано до тех пор, пока значение интенсивности не изменится на положительное.
Синтаксис: double rate
Значение по умолчанию: 1 в секунду
Время между прибытиями [динамический]
[Параметр виден, если Прибывают согласно: Времени между прибытиями] Выражение, вычисляющее время до прибытия следующего агента.
Тип значения: double
Значение по умолчанию: exponential(1) секунды
Первое прибытие происходит
[Параметр виден, если Прибывают согласно: Времени между прибытиями] Задает время прибытия первых агентов в блок Source.
После заданного времени - первое прибытие происходит по истечении времени, заданного в параметре Время между прибытиями
При запуске модели - первое прибытие происходит в момент запуска модели
В другое время - первое прибытие происходит в момент времени, заданный в параметре Время первого прибытия
Синтаксис: FirstArrivalMode firstArrivalMode
Допустимые значения:
Source.AFTER_TIMEOUT - После заданного времени
Source.AT_START - При запуске модели
Source.AT_TIME - В другое время
Время первого прибытия
[Параметр виден, если Первое прибытие происходит: В другое время] Точное время, когда блок Source генерирует первого агента (агентов). Это время не может быть меньше времени запуска модели или времени создания и запуска данного блока Source.
Синтаксис: double firstArrivalTime
Таблица базы данных
[Параметр виден, если Прибывают согласно: Расписанию прибытий из БД] Выберите таблицу базы данных, которая содержит данные о прибытии агентов.
Время прибытия
[Параметр виден, если Прибывают согласно: Расписанию прибытий из БД] Выберите столбец Таблицы базы данных, который содержит отметки времени прибытия агентов.
Расписание интенсивностей
[Параметр виден, если Прибывают согласно: Расписанию интенсивностей] Имя расписания, в котором задано, как интенсивность прибытия агентов изменяется с течением времени.
Синтаксис: Schedule<?> rateSchedule
Изменять интенсивность
[Параметр виден, если Прибывают согласно: Расписанию интенсивностей] Если опция выбрана, вы можете задать выражение, согласно которому интенсивность будет изменяться, в следующем параметре.
Синтаксис: boolean modifyRate
Согласно выражению [динамический]
[Параметр виден, если выбрана опция Изменять интенсивность] Выражение, согласно которому изменяется интенсивность.
Тип значения: double
Значение по умолчанию: baseRate
Локальная переменная: double baseRate - значение интенсивности расписания
Расписание прибытий
[Параметр виден, если Прибывают согласно: Расписанию прибытий] Имя расписания, в котором заданы моменты появления агентов и количество агентов, прибывающее в каждый указанный в расписании момент времени.
Синтаксис: Schedule<Integer> arrivalSchedule
За 1 раз создается несколько агентов
[Параметр виден, если для Прибывают согласно не выбрано Вызовам метода inject()] Синтаксис: boolean multipleEntitiesPerArrival
Кол-во агентов, прибывающих за 1 раз [динамический]
[Параметр виден, если выбрана опция За 1 раз создается несколько агентов] Количество прибывающих за один раз агентов.
Тип значения: int
Значение по умолчанию: uniform_discr(3,5)
Ограниченное кол-во прибытий
[Параметр виден, если для Прибывают согласно не выбрано Вызовам метода inject()] Если опция выбрана (true), то количество прибытий, генерируемое этим блоком, будет ограничено заданным ниже Максимальным количеством прибытий.
Синтаксис: boolean limitArrivals
Максимальное кол-во прибытий
[Параметр виден, если выбрана опция Ограниченное количество прибытий] Максимальное количество прибытий, заданное для этого блока.
Синтаксис: long maxArrivals
Местоположение прибытия
Здесь задается местоположение агентов по прибытию. Выберите либо опцию Не задано, либо одну из следующих опций:
Узел сети / ГИС - агенты будут помещены в заданный узел сети, в ГИС точке или в ГИС регионе.
Аттрактор - агенты будут появляться в заданном аттракторе.
Точка - точка в координатах x, y, z, в которой будут появляться агенты.
(Широта/долгота) - агенты появляются в точке на карте с заданными координатами Широты и Долготы.
Географ. место - агенты появляются в определенном месте на карте. Вы можете задать это местоположение в параметре Имя места.
Имя: locationType
Допустимые значения:
Source.LOCATION_NOT_SPECIFIED - Не задано
Source.LOCATION_XYZ - Точка
Source.LOCATION_NODE - Узел сети
Source.LOCATION_ATTRACTOR - Аттрактор
Source.LOCATION_LATLON - (Широта/долгота)
Source.LOCATION_GEO_PLACE - Географ. место
Узел [динамический]
[Параметр виден, если Местоположение прибытия: Узел сети / ГИС] Узел сети, ГИС точка или ГИС регион, где появляются агенты, созданные этим блоком.
Локальная переменная: T agent - агент
Аттрактор [динамический]
[Параметр виден, если Местоположение прибытия: Аттрактор] Аттрактор, где появляются агенты, созданные этим блоком.
Тип значения: Attractor
Локальная переменная: T agent - агент
Координаты X, Y, Z [динамический]
[Параметр виден, если Местоположение прибытия: Точка] Координаты точки.
Тип значения: double
Локальная переменная: T agent - агент
... расположена [динамический]
[Параметр виден, если Местоположение прибытия: Точка (x, y, z)] Здесь можно выбрать, где будет находиться точка, в которой окажется агент, созданный этим блоком: на уровне или в сети.
Тип значения: boolean destinationInNetwork
Значение по умолчанию: false
Уровень [динамический]
[Параметр виден, если ...расположена: на уровне] Уровень, на котором расположена точка, куда будет помещен агент, созданный этим блоком.
Локальная переменная: T agent - агент
Сеть [динамический]
[Параметр виден, если ...расположена: в сети] Сеть, в которой расположена точка, куда будет помещен агент, созданный этим блоком.
Тип значения: INetwork
Локальная переменная: T agent - агент
Широта, Долгота [динамический]
[Параметр виден, если Местоположение прибытия: (широта, долгота)] Координаты широты и долготы точки на ГИС карте, где появляются агенты.
Тип значения: double
Локальная переменная: T agent - агент
Имя места [динамический]
[Параметр виден, если Местоположение прибытия: Географ. место] Имя конкретного места на карте ГИС, где будут появляться агенты. Укажите имя как текст в кавычках, например, "London". ГИС карта выполнит поиск места по этому имени. Первый результат в списке результатов ГИС поиска будет использован в качестве местоположения, куда будут помещены агенты.
Тип значения: String
Локальная переменная: T agent - агент
Скорость [динамический]
[Параметр виден, если Местоположение прибытия задано] Скорость движения агентов, которых создает этот блок.
Тип значения: double
Значение по умолчанию: 10 метров в секунду
Локальная переменная: T agent - агент
Агент
Новый агент [динамический]
Тип агентов, создаваемых этим блоком. Обычно вы просто выбираете имя типа агентов из списка. В редких случаях (например, когда требуется проинициализировать параметры агента разными значениями), вы можете переключиться в редактор задания динамического выражения и написать в поле вызов конструктора типа агента.
Значение по умолчанию: Agent
Изменить размеры [динамический]
Если опция выбрана (true), можно будет изменить размеры агента, создаваемого этим блоком, задав соответствующие значения в параметрах Длина, Ширина и Высота ниже.
Тип значения: boolean
Локальная переменная: agent - агент
Длина [динамический]
[Параметр виден, если выбрана опция Изменить размеры] Новая длина создаваемого агента.
Тип значения: double
Локальная переменная: agent - агент
Ширина [динамический]
[Параметр виден, если выбрана опция Изменить размеры] Новая ширина создаваемого агента.
Тип значения: double
Локальная переменная: agent - агент
Высота [динамический]
[Параметр виден, если выбрана опция Изменить размеры] Новая высота создаваемого агента.
Тип значения double
Локальная переменная: agent - агент
Специфические
Установить время начала
[Параметр виден, если для Прибывают согласно не выбрано Вызовам метода inject()] Если эта опция выбрана (true), вы можете задать подходящее вам время, когда блок должен начать создавать агентов.
Синтаксис: boolean enableCustomStartTime
Начать создавать агентов
[Параметр виден, если выбрана опция Установить время начала] Момент модельного времени, когда блок должен начать генерировать агентов.
Синтаксис: double startTime
Добавить агентов в
Здесь вы можете указать, куда будут помещены агенты, созданные этим блоком: в популяцию по умолчанию или в другую популяцию агентов, которую вы можете выбрать ниже. Популяцию по умолчанию, содержащуюся внутри агента верхнего уровня (Java-коллекцию типа AgentList<Agent>), можно выбрать с помощью вызова функции агента getDefaultPopulation().
Синтаксис: boolean addToCustomPopulation
Популяция агентов [динамический]
[Параметр виден, если Добавить агентов в: другую популяцию агентов] Имя популяции агентов, куда будут помещены агенты, созданные этим блоком.
Тип значения: AgentList
Локальная переменная: T agent - агент
Выталкивать агентов
Если опция выбрана (true), то агенты, созданные этим блоком, будут немедленно вытолкнуты дальше независимо от состояния следующего блока. Если опция не выбрана, агенты не выталкиваются, а следуют сценарию, который вы укажете в следующем параметре.
Синтаксис: boolean pushProtocol
Агенты, которые не могут выйти
[Параметр виден, если не выбрана опция Выталкивать агентов] Выберите, что происходит с агентами, которые не могут покинуть блок, уничтожаются ли они или ожидают в этом блоке.
Синтаксис:boolean discardHangingEntities
Действия
До прибытия [код]
Код, выполняемый, до того, как агент генерируется.
При подходе к выходу [код]
Код, выполняемый, когда агент готов покинуть блок.
Локальная переменная: T agent - агент
При выходе [код]
Код, выполняемый, когда агент покидает блок.
Локальная переменная: T agent - агент
При избавлении[код]
[Параметр виден, если Агенты, которые не могут выйти: уничтожаются] Код, выполняемый, когда агент покидает блок.
Локальная переменная: T agent - агент

Функции

void inject() - Создает одного агента.

void inject(int n) - Создает заданное количество агентов (равное n).

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

long countArrivals() - Возвращает количество прибытий, произошедших в данном блоке Source к текущему моменту времени (поскольку одно прибытие может генерировать несколько агентов, это задается параметрами блока За 1 раз создается несколько агентов и Кол-во агентов прибывающих за 1 раз).

Порты

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