Среда является специальным объектом, позволяющим задавать свойства, общие для группы агентов. Хотя использование среды в агентной модели и не является обязательным, тем не менее большая часть специфичной для агентных моделей функциональности становится доступной именно с помощью среды. В одной модели может быть задано сразу несколько сред; эти среды могут быть иерархически организованы (например, агенты-компании могут находиться в одной среде, а агенты-служащие при этом могут обитать в локальной среде, заданной внутри компании). Агент может принадлежать только одной среде. Обычно в простейшей агентной модели присутствует одна среда, заданная на диаграмме корневого объекта эксперимента - там же, куда добавлен и реплицированный объект класса агента, моделирующий агентов. Чтобы добавить агентов в среду, нужно указать имя соответствующего объекта "среда" в свойствах вложенного объекта, моделирующего агентов.
Чтобы добавить среду
из палитры Основная на диаграмму
класса активного объекта.Имя
– Имя объекта. Имя используется для идентификации
объекта и доступа к нему из кода.
Это имя должно быть указано в свойстве Среда вложенного объекта,
моделирующего тех агентов, которых Вы хотите добавить в эту среду.
Отображать имя – Если опция выбрана, то имя среды будет отображаться в графическом редакторе.
Исключить – Если опция выбрана, то объект "среда" будет исключен из модели.
На презентации – Если опция выбрана, то этот объект "среда" будет отображаться на презентации во время выполнения модели.
Выполнять шаги – Если опция выбрана, то агентное моделирование будет синхронным. Синхронное моделирование подразумевает выполнение дискретных временных шагов. При выполнении каждого шага агенты (а возможно, и среда) синхронно выполняют свои действия.Длительность шага (в единицах мод. времени) – [Доступно, если выбрана опция Выполнять шаги] Здесь пользователь может задать длительность дискретного шага для синхронного агентного моделирования (по умолчанию длительность равна 1 единице модельного времени).
Действие перед выполнением шага – [Доступно, если выбрана опция Выполнять шаги] Код, выполняемый перед тем, как все агенты выполнят свои шаги.
Действие после выполнения шага – [Доступно, если выбрана опция Выполнять шаги] Код, выполняемый после того, как все агенты выполнят свои шаги.
Тип пространства – Группа кнопок, позволяющая задавать тип пространства, в котором будут обитать агенты.
Карта ГИС - [Отображается, если выбрано ГИС пространство] Имя карты ГИС, задающей географическое пространство среды.
Ширина
– [Доступно, если выбрано Непрерывное2D, Непрерывное3D или Дискретное2D пространство] Горизонтальная размерность области, визуально
представляющей пространство на презентации (в пикселах).
В дискретном пространстве ширина ячейки высчитывается путем деления
заданной Ширины на
число Столбцов
пространства.
Высота
– [Доступно, если выбрано Непрерывное2D, Непрерывное3D или Дискретное2D пространство] Вертикальная размерность области, визуально
представляющей пространство на презентации (в пикселах).
В дискретном пространстве высота ячейки высчитывается путем деления
заданной Высоты на
число Строк пространства.
Столбцы – [Доступно, если выбрано Дискретное2D пространство] Количество столбцов в дискретном пространстве.
Строки – [Доступно, если выбрано Дискретное2D пространство] Количество строк в дискретном пространстве.Тип соседства
– [Доступно, если выбрано Дискретное2D
пространство]
Задает модель соседства, определяющую, какие именно агенты будут
считаться соседями агента в дискретном пространстве. Есть две модели
соседства:
Тип расположения
– [Доступно, если выбрано Дискретное2D или Непрерывное2D
пространство] Задает тип расположения агентов (то, как агенты будут
изначально расположены в пространстве).
Если Вы хотите, чтобы агенты были расставлены по своим местам в
соответствии с выбранным типом их расположения прямо при запуске
модели, то установите флажок Применить
при запуске справа.
AnyLogic поддерживает следующие стандартные типы расположения
агентов:
Случайное - агенты случайно и равномерно распределяются в пределах размерностей пространства
Упорядоченное - агенты упорядоченно распределяются в пределах размерностей пространства
Кольцо - агенты равномерно распределяются по кольцу, диаметр которого меньше самой маленькой размерности пространства
Пружинящая масса - агенты располагаются аналогично системе с пружинящими массами, где агенты представляют собой массы, а их соединения - пружины. Этот тип зависит от выбранного типа сети
Тип сети – [Доступно, если выбрано Непрерывное2D, Непрерывное3D или Дискретное2D пространство] Тип сети, определящий, между какими агентами будут устанавливаться связи. Ни один тип сети не требует того, чтобы агенты имели только те связи, которые были установлены данным типом сети. Вы можете самостоятельно установить любое количество дополнительных связей между агентами.Кол-во связей у агента – [Доступно, если Тип сети: Случайное, Малый мир или Решеточно упорядоченное кольцо] Среднее (или точное) количество связей у агента.
Радиус соединения – [Доступно, если Тип сети: Согласно расстоянию] Задает радиус области соединения для агента. Агент будет соединен со всеми агентами, которые будут располагаться от данного агента на расстоянии, не превосходящим заданный радиус.
Доля соседей – [Доступно, если Тип сети: Малый мир] Параметр типа сети Малый мир.
M – [Доступно, если Тип сети: Безразмерная] Параметр типа сети Безразмерная (начальное количество концентраторов ("хабов")).
Чтобы
задать
среду для агентов
Среда обеспечивает унифицированный доступ (например, для посылки сообщения какому-то агенту) ко всем агентам, обитающим в данной среде (не имеет значения, принадлежат ли агенты одному и тому же реплицированному (или нереплицированному) вложенному активному объекту). Программный интерфейс следующий:
class AgentCollection extends AbstractCollection<Agent> - специальный класс коллекции, позволяющий последовательно проходить по всем агентам и находить агента по его номеру
AgentCollection getAgentCollection() - возвращает коллекцию всех агентов, населяющих среду
size() - возвращает количество агентов, населяющих среду
Agent getRandomAgent() - возвращает случайно выбранного агента
deliverToAll( Object msg ) - немедленно доставляет сообщение всем агентам, населяющих среду
deliverToRandom( Object msg ) - немедленно доставляет сообщение случайно выбранному агенту
Для того, чтобы выполнить с каждым агентом какое-то действие, Вам нужно будет написать подобный код:
Если Вы хотите, чтобы в Вашей модели выполнялись дискретные шаги, то за синхронизацию агентов будет отвечать тоже среда. Подробнее синхронизация агентов описана здесь.
Среда отвечает и за поддержку пространства. Если в случае непрерывного пространства эта поддержка сводится лишь к расположению агентов в пространстве согласно различным типам расположения (соответствующий программный интерфейс и свойства описаны в разделе Непрерывное пространство), то в дискретном пространстве среда также отслеживает, какой агент находится в какой ячейке, и предоставляет следующие дополнительные методы:
int[] findRandomEmptyCell() - возвращает координаты {строка, столбец} псевдослучайно расположенной свободной ячейки (или null, если все ячейки заняты)
Agent getAgentAtCell( int r, int c ) - возвращает агента, находящегося в заданной ячейке (или null, если ячейка пуста)
Среда может создавать сети разных типов. Соответствующие свойства и программный интерфейс описаны в разделе Связи агентов и сети.