Реплицированные объекты

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

С помощью репликации объектов можно:

Создание реплицированного объекта

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

Чтобы сделать вложенный объект реплицированным
  1. В графическом редакторе или в панели Проекты выделите тот вложенный объект, который Вы хотите сделать реплицированным.
  2. На вкладке Основные панели Свойства задайте требуемое количество экземпляров этого объекта, которое Вы хотите создать, в поле Количество.

Вы можете задать количество элементов реплицированного объекта с помощью параметра активного объекта типа integer или double. Такая параметризация может понадобиться при необходимости одновременного изменения количества элементов сразу нескольких реплицированных объектов.

Если Вы зададите количество элементов реплицированного объекта с помощью параметра, то AnyLogic создаст количество элементов, равное начальному значению параметра (или его округленному значению - в случае параметра типа double). AnyLogic не будет автоматически изменять количество элементов объекта в случае изменения значения параметра во время работы модели. Вы можете сами задать соответствующие действия в обработчике события изменения значения этого параметра (свойство параметра Действие при изменении).

Доступ к элементам реплицированного объекта

Получить доступ к отдельному элементу реплицированного объекта anObject можно с помощью метода anObject.get(), которому в качестве аргумента нужно передать номер этого элемента в векторе реплицированных элементов (нумерация начинается с 0, номер последнего элемента можно получить как anObject.size() – 1).

Сбор агрегированной статистики по коллекции объектов

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

Поддерживается следующие типы функций сбора статистики: Кол-воСуммаСреднееМин. и Макс.

При необходимости СуммаСреднееМин. и Макс. значения могут вычисляться только для тех агентов, для которых будет выполнено дополнительное Условие. Например, мы хотим сосчитать средний возраст потребителей продукта в агентной модели Диффузии по Бассу. Пусть агенты в нашей модели представлены реплицированным объектом класса Person. У этого класса есть диаграмма состояний с состояниями PotentialAdopter и Adopter и параметр age, задающий возраст человека. В этом случае наша функция сбора статистики должны выглядеть так:


 Чтобы задать у реплицированного объекта новую функцию сбора статистики

  1. Выделите реплицированный объект в графическом редакторе или в панели Проекты.
  2. Перейдите на страницу Статистика панели Свойства.
  3. Щелкните мышью по кнопке Добавить ф-ю сбора статистики. При этом откроется новый раздел свойств, в котором Вы сможете задать свойства создаваемой функции.
  4. Измените имя функции в поле Имя. Это имя будет использоваться для вызова данной функции.
  5. Выберите тип функции сбора статистики с помощью группы кнопок Тип

  6. Задайте Выражение и/или Условие с помощью расположенных ниже элементов управления. Текущий элемент реплицированного объекта (т.е. тот, по которому в текущий момент проходит итерационный цикл функции сбора статистики) доступен в этих полях как item

  7. Чтобы добавить другие функции сбора статистики, пожалуйста, повторите шаги 3-6. Если какая-то ранее заданная функция Вам больше не нужна, Вы можете удалить ее, щелкнув по кнопке в соответствующем разделе свойств.
Заданную функцию сбора статистики можно будет вызывать, как и любую другую функцию: написав ее имя, после которого должны следовать круглые скобки. То есть, чтобы произвести сбор статистики с помощью заданной на приведенном выше рисунке функции, нужно будет написать peopleStat()

Оптимизация производительности реплицированного объекта

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

Чтобы сменить тип коллекции, используемой AnyLogic для хранения элементов реплицированного объекта
  1. В графическом редакторе или в панели Проекты выделите реплицированный объект.
  2. На вкладке Основные панели Свойства выберите нужный Вам тип коллекции с помощью переключателя Оптимизировать. Опции этого переключателя имеют интуитивные имена:
    Память и поиск по индексу (ArrayList) - реплицированный объект будет представлять собой коллекцию типа ArrayLIst, что обеспечит более быстрое выполнение операций поиска элементов по индексу и более экономное расходование памяти.
    Удаление/добавление элементов (LinkedHashSet) - реплицированный объект будет представлять собой коллекцию типа LinkedHashSet, что обеспечит более быстрое выполнение операций динамического удаления и добавления элементов реплицированного объекта.

См. также

 Анимация реплицированных объектов

 Динамическое добавление/удаление элементов реплицированного объекта