Изменение значений параметров и переменных во время работы модели
AnyLogic предоставляет сразу несколько способов изменения значений параметров и переменных:
- С помощью окон инспекта
- С помощью элементов управления
- Программно
- Если вы будете изменять значение параметра, с которым будет связан параметр вложенного объекта, то соответствующим образом изменится и значение этого параметра вложенного объекта (за исключением случая, когда вы программно изменяете значение не с помощью метода set_ parameter (10) , а с помощью оператора присваивания parameter = 10 ).
- Если вы будете изменять значение переменной, а с ней будет соединена другая переменная, объявленная зависимой , то соответствующим образом изменится и ее значение.
Проще всего изменять значения параметров и переменных по ходу моделирования с помощью окон инспекта. С их помощью можно изменять значения:
- Параметров типов boolean , String , а также численных типов ( double , int , и т.д.), если они не объявлены динамическими.
- Простых переменных типов boolean , String , а также численных типов ( double , int , и т.д.), если они не объявлены константами.
- Накопителей , если они не объявлены массивами.
- Во время работы модели, щелкните мышью по значку параметра/переменной в окне презентации.
- Вы увидите небольшое окошко - окно инспекта . Оно имеет два режима - отображение значения и изменение значения. У накопителей также есть режим отображения графика истории изменения значения.
- По умолчанию окно инспекта отображает значение параметра/переменной. Чтобы переключиться в режим изменения значения, дважды щелкните мышью по самому значению. При этом фон окна модели изменит цвет.
- Введите новое значение в открывшемся поле редактирования. Вы можете заметить, что в случае введения значений, недопустимых для типа данного параметра/переменной (например, значений, отличных от true и false для логического параметра типа boolean ), будет выдано предупреждение об ошибке. Информация о типе данных отображается в нижней части окна инспекта.
- Когда закончите ввод значения, нажмите клавишу Enter . Вы увидите, что параметру/переменной будет присвоено новое значение.
- Можете закрыть окно инспекта, наведя мышь на окно инспекта и затем щелкнув по появившейся кнопке в верхнем правом углу окна.
Вы можете также привычно изменять значения переменных и параметров с помощью элементов управления. Приведенная ниже таблица перечисляет элементы управления, которые могут для этого использоваться, а также приводит информацию о том, параметры и переменные каких типов можно связать с каждым элементом управления:
Можно связать с переменной/параметром типа
При выборе флажка связанная переменная примет значение true , при сбросе - false .
String, double, int
Значения целочисленных переменных и параметров удобнее изменять с помощью бегунков.
При выборе первой кнопки переключателя связанной переменной/параметру будет присвоено значение 0, при выборе второй кнопки 1 и т.д.
Может быть как редактируемым, так и нет - в этом случае пользователю будет предоставлен выбор из фиксированного набора значений.
Связать список с параметром или переменной можно будет только в том случае, если вы не выберете у него опцию Выбор нескольких элементов .
Чтобы изменять значение параметра/переменной с помощью элемента управления
- Добавьте требуемый элемент управления из палитры Элементы управления на диаграмму вашего агента или эксперимента.
- Выберите в свойствах этого элемента флажок Связать с и введите имя параметра/переменной в расположенном справа поле.
- Если вы хотите связать с элементом управления численный параметр или переменную, то возможно вы захотите задать границы диапазона допустимых значений в полях Минимальное значение и Максимальное значение .
- После этого, запустив модель, вы сможете изменять значение связанной с элементом переменной или параметра, изменяя состояние или значение элемента управления.
Можете посмотреть на простейшую модель, в которой значение параметра можно изменять с помощью связанного с ним бегунка.
Программное изменение значений параметров и переменныхКак параметры, так и переменные доступны из кода по своим именам, например, parameterA , plainVar2 .
Вы можете программно менять их значения, написав соответствующие строки кода, например, в кодовых параметрах блоков вашей диаграммы процесса, в действиях событий, переходов диаграмм состояний, элементов управления и т.д.
Программное изменение значений переменныхЧтобы изменить значение скалярной переменной, нужно просто выполнить строку кода, в которой с помощью оператора присваивания переменной присваивается новое значение, например: plainVar = 10;
Если же у вас есть, скажем, переменная-массив целочисленных значений plainVar (с типом int [] и начальным значением new int [5] ), то чтобы присвоить первому элементу массива (с индексом 0) значение 10, нужно будет выполнить строку кода plainVar[0]=10;
вы не можете программно изменять значения простых переменных, объявленных константами.
Программное изменение значений параметровЗначение параметра также можно изменять с помощью простого оператора присваивания, например, если у нас есть целочисленный параметр parameter , то присвоить ему значение 10 можно так: parameter = 10; Но в этом случае остальные элементы модели не будут знать о произведенном изменении, и оно может не повлиять на модель должным образом.
Поэтому мы рекомендуем изменять значение параметра посредством вызова метода set_имяПараметра() (в данном случае - set_parameter() ), автоматически генерируемого AnyLogic, которому в качестве аргумента нужно передать новое значение. В этом случае изменение будет распространяться и по всем зависимостям этого параметра.
При необходимости, вы можете задать действия, которые должны выполняться при изменении значения параметра, написав обработчик этого события в свойстве параметра Действие при изменении . Введенный здесь код будет вызываться при вызовах функции set_имяПараметра() . В этом коде доступна локальная переменная oldValue , которая хранит старое значение параметра (то значение, которое было у параметра до этого изменения значения).
Действие при изменении параметра не будет выполняться, если новое значение, задаваемое методом set_имяПараметра() будет равно текущему значению данного параметра.