Тип агента может иметь параметры. Параметры обычно используются для задания статических характеристик агента. Вы можете задать различные значения параметров для разных агентов одного и того же типа, что требуется в тех случаях, когда агенты имеют одинаковое поведение, но у них отличаются некоторые характеристики.
Между переменными и параметрами есть четкая разница. Переменная обычно используется для задания меняющегося состояния модели, и ее значение может меняться во время моделирования. Параметр обычно используется для задания статических характеристик модели и обычно хранит одно и то же значение в течение всего "прогона" модели; это значение изменяется пользователем только в какие-то определенные моменты времени (обычно — между "прогонами" модели) при желании изменить характеристики модели.
Значения параметров можно изменять во время работы модели. При необходимости, вы можете задать действия, которые должны выполняться при изменении значения параметра, написав обработчик этого события.
Параметры агента верхнего уровня могут выступать в качестве входных данных для моделей, которые экспортируются в AnyLogic Cloud. Редактор Run Configuration позволяет выбрать входные данные, которые необходимо экспортировать с моделью. В данный момент для экспортируемых с моделью входных данных возможно использовать только параметры типа Статический с типами значений int, double, boolean и String. Если значение параметра определяется вызовом функции, это значение будет вычислено до экспорта, после чего будет передано с моделью в Cloud в виде фиксированного значения.
Если ваш параметр задает время, скорость, длину, ускорение, интенсивность или площадь, вы можете создать параметр соответствующего типа и указать для него подходящие единицы измерения. Например, для задания скорости и времени поддерживаются следующие единицы измерения:
- Время: миллисекунды, секунды, минуты, часы, дни, недели, месяцы, годы.
- Скорость: м/с, км/ч, футы в секунду, футы в минуту, мили в час, узлы.
Сначала выберите требуемый Тип параметра, а затем выберите единицы измерения из раскрывающегося списка Единица измерения, расположенного ниже. Вам останется только задать Значение по умолчанию для этого параметра.
Если вам будет необходимо задать фактическое значение параметра в свойствах агента или эксперимента, вы найдете выбор единиц измерения справа от поля значения в этих свойствах. Например, здесь мы задаем параметру speed значение, равное шестидесяти милям в час.
Как и многие другие инструменты имитационного моделирования, AnyLogic поддерживает параметры простых типов: вещественные параметры (real), целочисленные (integer) и логические (boolean). Но только AnyLogic предоставляет уникальную возможность создания параметров любых Java классов.
Вы можете создать, например, параметр класса String, чтобы хранить строковые константы, или параметр класса ArrayList, который будет хранить динамический массив объектов. Вы можете создать параметр типа Object (базовый Java класс) и присвоить этому параметру в качестве значения объект любого Java класса. Позднее вам будет нужно проверить фактический тип значения этого параметра и привести параметр к его фактическому типу. Описание классов Java вы можете найти в документации по Java SDK, доступной по адресу https://docs.oracle.com/en/java/javase/11/docs/api/index.html.
Вы также можете создавать параметры ваших собственных типов, созданных вами в рамках модели.
Поскольку все элементы модели AnyLogic заданы экземплярами классов Java, вы можете создать параметры соответствующих классов и использовать элементы модели в качестве параметров.
Чтобы создать параметр
- Перетащите элемент Параметр из палитры Агент на диаграмму типа агентов (или эксперимента).
- Перейдите в панель Свойства этого параметра.
- Введите имя параметра в поле Имя. По этому имени параметр будет доступен из кода.
- Если параметр задает время, скорость, длину, ускорение, интенсивность или площадь, выберите для него соответствующий Тип, а затем нужные Единицы измерения в списке ниже.
- Задайте тип параметра. Выберите один из наиболее часто используемых типов или же, если вам нужно создать параметр другого Java класса — выберите опцию Другой и введите имя типа в расположенном справа поле.
- В поле Значение по умолчанию вы можете задать значение параметра по умолчанию. Это значение может быть впоследствии изменено во время работы модели с помощью функции set_имяПараметра(новое значение). Если значение не будет задано явно, то параметр будет проинициализирован в соответствии с правилами Java, то есть, например, параметр типа double будет равен 0, параметр типа boolean будет равен false.
- Если вы хотите использовать параметр как массив системной динамики, поставьте флажок для опции Массив системной динамики, затем перейдите к таблице Размерности и выберите размерности для массива. Чтобы задать значения по умолчанию для элементов массива, щелкните по кнопке Редактировать...
- Основные свойства
-
Имя — Имя параметра. Имя используется для идентификации параметра и доступа к нему из кода.
Отображать имя — Если опция выбрана, то имя параметра будет отображаться в графическом редакторе.
Исключить — Если опция выбрана, то параметр будет исключен из модели.
Видимость — Если опция выбрана, то параметр будет отображаться на презентации во время выполнения модели.
Тип — Тип параметра. Выберите один из наиболее часто используемых типов или же, если вам нужно создать параметр другого Java класса — выберите опцию Другой и введите имя типа в расположенном справа поле.
Значение по умолчанию — Здесь вы можете задать значение параметра по умолчанию. Это значение может быть впоследствии изменено во время работы модели. Если значение не будет задано явно, то параметр будет проинициализирован в соответствии с правилами Java, то есть, например, параметр типа double будет равен 0, типа boolean — false. Если это параметр-массив, то его проще инициализировать с помощью редактора начальных значений. Если вы этого не сделаете, то автоматически будет подразумеваться, что все элементы массива изначально равны нулю.
Массив системной динамики — Если опция выбрана, то этот параметр будет массивом.
Редактировать... — [Кнопка видна, если установлен флажок Массив системной динамики] Кнопка открывает редактор начальных значений элементов массива. Инициализация массива (то есть, задание начальных значений его элементов) описана здесь.
Размерности — [Параметр виден, если установлен флажок Массив системной динамики] Сюда вы можете добавить размерности, щелкнув кнопку "плюс". Откроется окно редактирования размерностей, в котором вы можете увидеть Возможные размерности (список доступных в модели размерностей), из которых сможете выбрать размерности в таблицу Выбранные размерности (список размерностей, которые будут играть роль размерностей этого массива). Более подробная информация дана в разделе Задание массива.
Аргументы — [Виден, если установлен флажок Динамический или Действие в секции Специфические] Здесь вы можете задать аргументы динамического параметра, с помощью которых вы сможете передавать этому играющему роль функции параметру данные, необходимые для вычислений. Каждый аргумент задается в отдельной строке таблицы. Чтобы удалить аргумент, выделите соответствующую строку и щелкните по кнопке .
- Редактор значения
-
Эта группа свойств параметра задает, как он будет выглядеть в панели Свойства, на которых пользователь модели будет задавать его фактическое значение, в частности, какой элемент управления будет предоставлен пользователю для более удобного задания значения параметра. Есть два места, в которых вы можете задать фактическое значение параметра:
Основные свойства вложенного объекта — экземпляра типа агентов, в котором задан этот параметр.
Основные свойства эксперимента, у которого данный тип агента играет роль агента верхнего уровня.Метка — Метка параметра, которая будет отображаться вместо имени параметра в панели Свойства вложенного объекта и эксперимента. Если этот тип агента играет роль агента верхнего уровня в каком-либо эксперименте, то эта метка будет также использоваться в интерфейсе, создаваемом для этого эксперимента.
Тип управления — Если опция выбрана, то в панели Свойства эксперимента или вложенного объекта перед данным параметром будет добавлен разделитель. Разделитель используется для визуального отделения разных групп параметров.
Текст — Если опция выбрана, то пользователь сможет задавать фактическое значение данного параметра в панели Свойства эксперимента или вложенного объекта в текстовом поле.
Флажок — Если опция выбрана, то пользователь сможет задавать фактическое значение данного параметра в панели Свойства эксперимента или вложенного объекта с помощью флажка.
Переключатель — Если опция выбрана, то пользователь сможет задавать фактическое значение данного параметра в панели Свойства эксперимента или вложенного объекта с помощью переключателя. Кнопки переключателя (имена опций и сопоставленные этим опциям значения) задаются в таблице справа.
Выпадающий список — Если опция выбрана, то пользователь сможет задавать фактическое значение данного параметра в панели Свойства эксперимента или вложенного объекта с помощью выпадающего списка. Элементы выпадающего списка (имена элементов и соответствующие им значения) задаются в таблице справа.
Редактируемый выпадающий список — Если опция выбрана, то пользователь сможет задавать фактическое значение данного параметра в панели Свойства эксперимента или вложенного объекта с помощью редактируемого выпадающего списка. Элементы выпадающего списка (имена элементов и соответствующие им значения) задаются в таблице справа. В модели, загруженной в AnyLogic Cloud, Редактируемый выпадающий список ведет себя как Выпадающий список.
Бегунок — Если опция выбрана, то пользователь сможет задавать фактическое значение данного параметра в панели Свойства эксперимента или вложенного объекта с помощью бегунка. Минимальное и максимальное значения бегунка задаются с помощью расположенных справа элементов управления.Скрывать при выполнении условий — Список условий, определяющих видимость параметра в панели Свойства эксперимента или вложенного объекта. Для каждого условия выбирается Параметр, значение которого будет определять видимость данного параметра, в ячейке При выполнении условия выбирается операция сравнения ==|!= (равно | не равно) и задается Значение параметра. При выполнении какого-либо из заданных здесь условий параметр не будет виден в панели Свойства.
- Специфические
-
Статический — Если опция выбрана, то параметр будет статическим.
Динамический — Если опция выбрана, то этот параметр будет динамическим, т.е. его значение будет пересчитываться заново каждый раз при доступе к этому параметру. Такой параметр ведет себя как функция. Чтобы узнать его значение, нужно использовать синтаксис вызова функций, то есть написать myParameter(), а не myParameter.
Действие — если опция выбрана, параметр будет содержать исполняемый код.
Единицы измерения (сист. динамика) — Выберите эту опцию, если параметр используется в модели системной динамики, чтобы задать для него единицы измерения, например, people.
Сохранять при сохранении состояния модели — Если опция выбрана, то параметр будет сохраняться при сохранении состояния модели.
Действие при изменении — [Виден, если выбран флажок Статический] Код, который будет выполняться при изменении значения параметра. Введенный здесь код будет вызываться при вызовах функции set_<имя параметра>() (при простом присваивании, таком, как parameter=5; он выполняться не будет). Этот обработчик также не будет выполняться, если новое значение, задаваемое методом set_<имя параметра>() будет равно текущему значению данного параметра.
В этом коде доступна локальная переменная oldValue, которая хранит старое значение параметра (то значение, которое было у параметра до этого изменения значения).
Вы можете связать параметр типа агентов с параметром вложенного агента. В этом случае значение параметра вложенного агента всегда будет равно значению параметра агента верхнего уровня. И если во время выполнения модели вы измените значение параметра верхнего уровня, то соответствующим образом изменится и значение связанного с ним параметра вложенного агента. Механизм связывания параметров используется в следующих случаях:
- Если вам нужно изменить значения параметров сразу нескольких вложенных агентов (которые могут быть даже агентами разных типов). Для этого вам нужно будет просто создать один параметр в типе агента, который содержит этих вложенных агентов, связать с этим параметром параметры вложенных агентов и изменять значение только одного этого параметра.
- Если вам нужно оптимизировать модель, оптимизируя значения параметров некорневого агента. В этом случае вам будет нужно связать параметры, поскольку оптимизировать можно только параметры агента верхнего уровня модели.
- Если вам нужно варьировать параметры некорневого агента с помощью эксперимента варьирования параметров. В этом случае вам будет нужно связать параметры, поскольку варьировать можно только параметры агента верхнего уровня модели.
Вы можете задать действия, которые должны выполняться при изменении значения параметра, написав обработчик этого события в свойстве параметра Действие при изменении. Например, вы можете сохранять значение параметра в базе данных или отсылать уведомляющее сообщение.
Чтобы задать действие, выполняемое при изменении значения параметра
- Выберите параметр в графическом редакторе или в панели Проекты.
-
В секции Специфические панели Свойства введите код, который будет выполняться при изменении значения параметра, в поле Действие при изменении. Введенный здесь код будет вызываться при вызовах функции
set_<имя параметра>() (при простом присваивании, таком, как parameter=5; он выполняться не будет). Этот обработчик также не будет выполняться, если новое значение, задаваемое методом set_<имя параметра>() будет равно текущему значению данного параметра.
В этом коде доступна локальная переменная oldValue, которая хранит старое значение параметра (то значение, которое было у параметра до этого изменения значения).
-
Как мы можем улучшить эту статью?
-