Агент

Под агентом в агентном моделировании понимается элемент модели, который может иметь поведение, память (историю), контакты и т.д. Агенты могут моделировать людей, компании, проекты, автомобили, города, животных, корабли, товары и т.д. 

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

Создание агента обычно начинается с определения его интерфейса для связи с внешним миром. В случае систем с большим количеством агентов с динамическими связями (например, в моделях социальных сетей) агенты могут взаимодействовать друг с другом путем вызова методов друг у друга.

Начальное состояние и поведение агента могут быть реализованы различными способами. Состояние (накопленная история) агента может быть представлено с помощью переменных, либо состояния диаграммы состояний. Поведение может быть либо пассивным (агенты реагируют только на прибытие сообщений или на вызов методов и не имеют собственных событий, запланированных на будущее) или активным, когда внутренняя динамика агента (события, запланированные через заданные таймауты или процессы системной динамики) является причиной действий, совершаемых агентом. В последнем случае внутри агентов скорее всего должны быть заданы события и/или диаграммы состояний.

Создание агентов

Каждый агент принадлежит определенному типу агентов. Типы агентов разрабатываются и задаются пользователем. Вы можете создавать агентов с помощью мастера Создания агентов. На первой странице мастера выберите, хотите ли вы создать популяцию агентов, одного агента или только задать тип агента и не создавать пока агентов этого типа.

Тип агента. Свойства

Основные свойства

Имя – Имя типа агентов.
Так как AnyLogic создает класс Java для каждого типа агентов, следуйте правилам Java при именовании. Имя должно начинаться с заглавной буквы. 

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

Предв. просмотр параметров

Секция свойств Предв. просмотр параметров доступна, только если данный тип агента имеет какие-либо параметры. 
Здесь вы можете изменить порядок, в котором параметры будут отображены в свойствах агентов этого типа. 

Действия агента

При запуске - Здесь вы можете написать Java код, который будет выполняться после того, как все объекты модели будут созданы, соединены и проинициализированы, но до выполнения каких-либо дальнейших активных действий. Здесь вы можете, например, запустить какие-либо события этого агента. Порядок выполнения действий При запуске у агентов может меняться.

При уничтожении - Здесь вы можете написать Java код, который будет выполняться при уничтожении агента этого типа (например, когда пользователь завершает эксперимент и уничтожается агент верхнего уровня, для агентов, которые в нем находились, запускается в определенном порядке код При уничтожении). 

При достижении точки назначения – Код, выполняемый, когда агент прибывает на место назначения.

Перед выполнением шага – Код, выполняемый до того, как агент выполнит шаг в агентных моделях с синхронизацией. Действие Перед выполнением шага выполняется для агентов в детерминированном порядке. 

Действие на шаге – Код, выполняемый, когда агент делает шаг в агентных моделях с синхронизацией. Действие на шаге выполняется для агентов в детерминированном порядке.

Агент в диаграмме процесса

Использовать в диаграммах процесса как – Здесь вы можете выбрать роль агента в диаграммах процесса. Выбор опции Агент позволяет агенту проходить через блоки Библиотеки Моделирования Процессов, выбор Пешеход позволяет агенту проходить через блоки Пешеходной библиотеки и т.д.

При входе в блок диаграммы процесса - Сюда вы можете вписать код, выполняемый, когда агент вступает в диаграмму процесса. 

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

При занятии ресурса - Сюда вы можете вписать код, выполняемый, когда агент захватывает ресурс, еще находясь в диаграмме процесса.

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

Движение

Начальная скорость – Скорость агента.

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

Также наклонять и вертикально  – Если эта опция выбрана, то фигура анимации агента будет также вращаться вдоль оси Z.

Пространство и сеть

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

Типы пространстваГруппа кнопок, позволяющая задавать тип пространства, в котором будут обитать агенты:

Непрерывное - Непрерывное пространство. Размерность пространства задается свойствами Ширина и Высота. В непрерывном пространстве есть возможность изменять местоположение агента и получать информацию о его текущем местоположении, перемещать агента с заданной скоростью из одного места в другое, выполнять действия по его прибытии в место назначения, рисовать анимацию (статического или движущегося) агента, устанавливать соединения согласно выбранному шаблону расположения агентов, и многие другие возможности. Местоположение агента в двумерном непрерывном пространстве задается двумя координатами (x,y) типа double.
Дискретное - Дискретное пространство. Двумерное дискретное пространство представляет собой прямоугольный массив ячеек, полностью или частично занятых агентами. В одной ячейке может находиться не больше одного агента. Поддержка этого типа пространства в AnyLogic включает в себя возможности по распределению агентов по ячейкам, их перемещению в соседние или любые другие ячейки, определению того, какие агенты являются соседями (согласно выбранной модели соседства), нахождению свободных ячеек и т.д.
ГИС - Пространство ГИСГИС пространство позволяет размещать агентов в геопространственной среде, заданной с помощью карты ГИС. Поддержка ГИС пространства  включает возможности помещения агента в новое место, получения информации о текущем местоположении, перемещения агента из текущего местоположения в новое с заданной скоростью, выполнения определенного действия по прибытии, отображения анимации агента (статической или движущейся), установления связей между агентами в зависимости от их расположения и многое другое. 

Карта ГИС - [Отображается, если выбрано ГИС пространство] Имя карты ГИС, задающей географическое пространство среды.

Ширина – [Доступно, если выбрано Непрерывное или Дискретное пространство] Горизонтальная размерность области, визуально представляющей пространство на презентации (в пикселах). В дискретном пространстве ширина ячейки высчитывается путем деления заданной Ширины на число Столбцов пространства.

Высота – [Доступно, если выбрано Непрерывное или Дискретное пространство] Вертикальная размерность области, визуально представляющей пространство на презентации (в пикселах). В дискретном пространстве высота ячейки высчитывается путем деления заданной Высоты на число Строкпространства.

Z-Высота - [Доступно, если выбрано Непрерывное пространство] Высота по оси Z.

Столбцы – [Доступно, если выбрано Дискретное пространство] Количество столбцов в дискретном пространстве.

Строки – [Доступно, если выбрано Дискретное пространство] Количество строк в дискретном пространстве.

Тип соседства – [Доступно, если выбрано Дискретное пространство] Задает модель соседства, определяющую, какие именно агенты будут считаться соседями агента в дискретном пространстве. Есть две модели соседства:

Мурово (8 соседей)  - Соседями считаются агенты, располагающиеся в 8 соседних ячейках (к северу (Agent.NORTH), югу (Agent.SOUTH), востоку (Agent.EAST), западу (Agent.WEST), северо-востоку (Agent.NORTHEAST), северо-западу (Agent.NORTHWEST), юго-востоку (Agent.SOUTHEAST) и юго-западу (Agent.SOUTHWEST) от данной).
Евклидово (4 соседа)  - Соседями считаются агенты, располагающиеся в 4 соседних ячейках (к северу (Agent.NORTH), югу (Agent.SOUTH), востоку (Agent.EAST) и западу (Agent.WEST) от данной).

Тип расположения – [Доступно, если выбрано Непрерывное или Дискретное пространство] Задает тип расположения агентов (то, как агенты будут изначально расположены в пространстве). 
Если вы хотите, чтобы агенты были расставлены по своим местам в соответствии с выбранным типом их расположения прямо при запуске модели, то установите флажок Применить при запуске справа.
AnyLogic поддерживает следующие стандартные типы расположения агентов: 

Задается пользователем - при выборе этой опции пользователь должен будет сам расположить агентов в пространстве, например, в Действии при запуске агента верхнего уровня эксперимента.
Случайное
агенты случайно и равномерно распределяются в пределах размерностей пространства.
Упорядоченноеагенты упорядоченно распределяются в пределах размерностей пространства.
Кольцо агенты равномерно распределяются по кольцу, диаметр которого меньше самой маленькой размерности пространства.
Пружинящая массаагенты располагаются аналогично системе с пружинящими массами, где агенты представляют собой массы, а их соединения - пружины. Этот тип зависит от выбранного типа сети.

Тип сети – [Доступно, если выбрано Непрерывное или Дискретное пространство] Тип сети, определящий, между какими агентами будут устанавливаться связи. Ни один тип сети не требует того, чтобы агенты имели только те связи, которые были установлены данным типом сети. Вы можете самостоятельно установить любое количество дополнительных связей между агентами. Если вы хотите, чтобы сеть создавалась прямо при запуске модели, то установите флажок Применить при запуске справа.
AnyLogic поддерживает следующие стандартные типы сетей агентов: 

Задается пользователемпри выборе этой опции пользователь должен будет сам установить связи между агентами, например, в Действии при запуске агента верхнего уровня эксперимента.
Случайноеагенты соединяются случайно, у каждого агента устанавливается заданное количество связей.
Согласно расстояниюдруг с другом соединяются те агенты, расстояние между которыми не больше заданного  радиуса соединения (только в непрерывном пространстве).
Решеточно упорядоч. кольцосвязи агентов образуют кольцо, в котором каждый агент соединяется с заданным количеством ближайших агентов.
Малый мирпредставляет собой решеточно упорядоченное кольцо, где некоторые связи были разорваны и установлены с удаленными агентами.
Безразмернаянекоторые агенты являются "хабами" (или концентраторами) с множествами соединений, а некоторые -  "отшельниками" с небольшим числом соединений. Подход описан в научной статье Barabasi, A. L. and R. Albert. 1999. Emergence of scaling in random networks. Science 286(5439): 509-512Детальное описание подхода вы можете найти в википедии.

Кол-во связей у агента – [Доступно, если Тип сети: Случайное, Малый мир или Решеточно упорядоченное кольцоСреднее (или точное) количество связей у агента.

Радиус соединения – [Доступно, если Тип сети: Согласно расстояниюЗадает радиус области соединения для агента. Агент будет соединен со всеми агентами, которые будут располагаться от данного агента на расстоянии, не превосходящим заданный радиус.

Доля соседей – [Доступно, если Тип сети: Малый мирПараметр типа сети Малый мир.

M – [Доступно, если Тип сети: Безразмерная] Задает оба параметра типа сети Безразмерная: M и M0 (начальное количество концентраторов ("хабов")). Детальное описание подхода и обоих параметров вы можете найти в википедии.

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

Длительность шага - [Доступно, если выбрана опция Выполнять шаги] Здесь пользователь может задать длительность дискретного шага для синхронного агентного моделирования (по умолчанию длительность равна 1 единице модельного времени). 

Перед выполнением шага [Доступно, если выбрана опция Выполнять шаги] Код, выполняемый перед тем, как все агенты выполнят свои шаги.

Действие после выполнения шага [Доступно, если выбрана опция Выполнять шаги] Код, выполняемый после того, как все агенты выполнят свои шаги.

Java для экспертов

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

Реализуемые интерфейсы – Здесь задается список интерфейсов, реализуемых этим классом (имена интерфейсов должны разделяться запятыми).

Дополнительный код класса – Здесь вы можете объявить какие-то служебные переменные кода, константы и методы. Этот код будет вставлен в объявление класса эксперимента. Все объявленные здесь члены класса будут доступны из кода эксперимента. Хотя вы можете поместить сюда любой Java код, мы не рекомендуем задавать здесь вложенные классы - используйте вместо этого элемент AnyLogic Java класс. Вместо перечислений Java мы советуем использовать списки вариантов.

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

Специфические

Расширяет тип агента - вы можете унаследовать один тип агента от другого. Это дает вам возможность вынести какую-то общую для нескольких агентов функциональность в один тип агента (назовем его базовым типом). Эта функциональность будет доступна всем агентам, расширяющим этот базовый тип.

Создать область просмотра в начале координат - Выберите эту опцию, если хотите создать область просмотра в начале координат.

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

Период – [Доступно, если выбрана опция Создавать наборы данных для динамических переменныхПериод добавления текущих значений динамических переменных в соответствующие наборы данных.

Ограничить количество хранимых значений первыми ... значениями – [Доступно, если выбрана опция Создавать наборы данных для динамических переменныхКоличество значений, которое будет храниться в автоматически созданном для динамической переменной наборе данных.