AnyLogic
Развернуть
Размер шрифта

Агент

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

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

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

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

Вложенные агенты

Агенты могут быть вложены в других агентов на любой "глубине". Вложенные агенты — это экземпляры типов агентов, которые помещены внутрь каждого экземпляра другого типа агента. С помощью такого вложения создается иерархия модели. По умолчанию встроенные агенты отображаются простой иконкой . Если же вы нарисовали свою иконку для типа агента, отображаться будет именно она. Помимо фигур, в состав иконки могут входить порты и переменные системной динамики.

Популяции

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

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

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

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

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

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

Имя — Имя типа агентов.

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

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

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

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

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

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

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

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

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

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

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

Использовать в диаграммах процесса как — Здесь вы можете выбрать роль агента в диаграммах процесса. Возможные варианты: Агент, Ресурс, Материальный объект, Транспортер, Пешеход, Ж/д вагон, Поезд, Автомобиль. Выбрав определенную роль, вы получите доступ к дополнительным функциям, специфичным для выбранной роли.
Например, выбрав опцию Агент вы позволите агенту проходить через блоки Библиотеки Моделирования Процессов. Выбор опции Пешеход позволит агенту проходить через блоки Пешеходной библиотеки и предоставит доступ к таким функциям пешехода, как: getComfortableSpeed(), getDiameter(), getTargetX() и т.д. Выбор опции Транспортер позволит использовать агента этого типа в качестве транспортера в блоках Библиотеки производственных систем и получить доступ к функциям транспортера: getFleet(), getUtilization(), getCargoPosition() и т.д.
Если вы не планируете использовать агентов этого типа в диаграммах процессов, то просто оставьте выбранной опцию по умолчанию Агент.

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

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

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

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

Размерности и движение

Длина — [Доступно, если в секции Агент в диаграмме процесса в свойстве Использовать в диаграммах процесса как выбран Материальный объект или Транспортер] Длина материального объекта или транспортера.

Ширина — [Доступно, если в секции Агент в диаграмме процесса в свойстве Использовать в диаграммах процесса как выбран Материальный объект или Транспортер] Ширина материального объекта или транспортера.

Высота — [Доступно, если в секции Агент в диаграмме процесса в свойстве Использовать в диаграммах процесса как выбран Материальный объект или Транспортер] Высота материального объекта или транспортера.

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

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

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

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

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

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

Непрерывное — Непрерывное пространство. Размерность пространства задается свойствами Ширина и Высота. В непрерывном пространстве есть возможность изменять местоположение агента и получать информацию о его текущем местоположении, перемещать агента с заданной скоростью из одного места в другое, выполнять действия по его прибытии в место назначения, рисовать анимацию (статического или движущегося) агента, устанавливать соединения согласно выбранному шаблону расположения агентов, и многие другие возможности. Местоположение агента в двумерном непрерывном пространстве задается двумя координатами (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 создаст наборы данных для динамических переменных (накопителей, потоков или динамических переменных), содержащихся в данном типе агента. Ниже вы можете задать время начала сбора данных: Время первого обновления (абсолютное), если хотите использовать модельное время, или задать Дату обновления (для этого выберите режим Использовать календарные даты). В каждый набор данных будет добавлено определенное число значений, собранное с заданной периодичностью.

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

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

Создать функцию toString() с параметрами — Функция toString() используется, чтобы выводить информацию об агенте в окне инспекта в ходе выполнения модели. Нажав на эту кнопку, вы создаете функцию toString() в этом типе агента. Если у вашего типа агента есть какие-то параметры, эта функция автоматически вернет имена этих параметров и их значения. Вы можете самостоятельно настроить то, что будет возвращать функция, в свойствах функции в поле Тело функции. Более подробную информацию о функциях в AnyLogic вы найдете в статье Функция.

Функция появится в графическом редакторе за пределами видимой области. Она будет располагаться слева от начальной точки координат.
Как мы можем улучшить эту статью?