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
Интенсивность прибытия
[Параметр виден, если Прибывают согласно Интенсивности] Интенсивность прибытия агентов. Если указана интенсивность и ее значение станет 0, следующее прибытие не будет запланировано до тех пор, пока значение интенсивности не изменится на положительное.
Синтаксис: double rate
Значение по умолчанию: 1 в секунду
Время между прибытиями [динамический]
[Параметр виден, если Прибывают согласно Времени между прибытиями] Выражение, вычисляющее время до прибытия следующего агента.
Тип значения: double
Значение по умолчанию: exponential(1) секунды
Таблица базы данных
[Параметр виден, если Прибывают согласноРасписанию прибытий из БД] Выберите таблицу базы данных, которая содержит данные о прибытии агентов.
Время прибытия
[Параметр виден, если Прибывают согласноРасписанию прибытий из БД] Выберите столбец Таблицы базы данных, который содержит отметки времени прибытия агентов.
Расписание интенсивностей
[Параметр виден, если Прибывают согласно Расписанию интенсивностей] Имя расписания, в котором задано, как интенсивность прибытия агентов изменяется с течением времени.
Синтаксис: 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 - Географ. место
Скорость [динамический]
[Параметр виден, если Местоположение прибытия задано] Скорость движения агентов, которых создает этот блок.
Тип значения: double
Значение по умолчанию: 10 метров в секунду
Локальная переменная: T agent - агент.
Координаты X, Y, Z [динамический]
[Параметр виден, если Местоположение прибытия: Точка] Координаты точки.
Тип значения: double
Локальная переменная: T agent - агент.
... в сети
[Параметр виден, если Местоположение прибытия: Точка] Если эта опция выбрана (true), агенты добавляются в сеть, которую вы можете выбрать в поле Сеть.
Синтаксис: boolean locationXYZInNetwork
Сеть [динамический]
[Параметр виден, если выбрана опция ... в сети] Сеть, куда помещаются агенты, созданные этим блоком.
Тип значения: Network
Локальная переменная: T agent - агент.
Узел [динамический]
[Параметр виден, если Местоположение прибытия: Узел сети / ГИС] Узел сети, ГИС точка или ГИС регион, где появляются агенты, созданные этим блоком.
Локальная переменная: T agent - агент.
Аттрактор [динамический]
[Параметр виден, если Местоположение прибытия: Аттрактор] Аттрактор, где появляются агенты, созданные этим блоком.
Тип значения: Attractor
Локальная переменная: T agent - агент.
Широта, Долгота [динамический]
[Параметр виден, если Местоположение прибытия: (широта, долгота)] Координаты широты и долготы точки на ГИС карте, где появляются агенты.
Тип значения: double
Локальная переменная: T agent - агент.
Имя места [динамический]
[Параметр виден, если Местоположение прибытия: Географ. место] Имя конкретного места на карте ГИС, где будут появляться агенты. Укажите имя как текст в кавычках, например, "London". ГИС карта выполнит поиск места по этому имени. Первый результат в списке результатов ГИС поиска будет использован в качестве местоположения, куда будут помещены агенты.
Тип значения: String
Локальная переменная: 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(int n) - Создает заданное количество агентов (равное n).

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

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

Порты

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