AnyLogic позволяет оценить степень и характер влияния отдельных параметров на поведение модели. Для этого вам не нужно самостоятельно запускать вашу модель раз за разом, вручную менять значения параметров между запусками, и пытаться отследить какие-то закономерности, анализируя результаты каждого запуска по отдельности.
С помощью эксперимента варьирования параметров ваша модель будет автоматически запускаться заданное количество раз с варьирующимися значениями выбранных параметров. Изучить и сравнить поведение модели при разных значениях параметров вы сможете с помощью диаграмм AnyLogic. Запуск данного эксперимента с фиксированными значениями параметров позволит вам оценить влияние случайных факторов в стохастических моделях.
Вы можете управлять экспериментом варьирования параметров с помощью кода Java.
Чтобы провести эксперимент варьирования параметров
- Создайте новый эксперимент варьирования параметров.
- Настройте этот эксперимент, т.e. выберите параметры, которые вы хотите варьировать, и задайте диапазоны возможных значений этих параметров.
- Создайте интерфейс эксперимента.
- Запустите эксперимент.
Чтобы создать эксперимент варьирования параметров
- В панели Проекты, щелкните правой кнопкой мыши по модели, для которой вы хотите создать новый эксперимент, и выберите Создать > Эксперимент из контекстного меню.
- Появится диалоговое окно Новый эксперимент.
- Выберите Варьирование параметров из списка Тип эксперимента.
- Введите имя эксперимента в поле Имя.
- Выберите тип агента для этого эксперимента из выпадающего списка Агент верхнего уровня.
- Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из и выберите эксперимент из расположенного справа выпадающего списка.
- Щелкните мышью по кнопке Готово.
- Основные
-
Имя — Имя эксперимента.
Поскольку AnyLogic генерирует для каждого эксперимента соответствующий Java класс, при задании имени эксперимента нужно руководствоваться правилами названия классов в Java. Пожалуйста, начинайте имя эксперимента с заглавной буквы.Исключить — Если опция выбрана, то эксперимент будет исключен из модели.
Агент верхнего уровня — Здесь задается агент верхнего уровня этого эксперимента. Агент этого типа будет играть роль корня иерархического дерева агентов модели, запускаемой этим экспериментом.
Максимальный размер памяти — Максимальный размер памяти Java, выделенный для данной модели.
Создать интерфейс — Кнопка создает для эксперимента пользовательский интерфейс по умолчанию.
- Параметры
-
Параметры — Здесь вы можете выбрать, будут ли параметры варьироваться в заданном диапазоне или произвольно.
Варьировать в диапазоне — Если опция выбрана, то вы сможете явно задать диапазон возможных значений для каждого варьируемого параметра. Если быть точнее, то для каждого варьируемого параметра вам нужно будет задать в таблице Параметры минимум и максимум диапазона значений, а также величину шага (инкремента), с помощью которого будут определяться допустимые значения данного параметра внутри диапазона.
Именно эта опция и должна быть выбрана в случае эксперимента варьирования параметров.Произвольно — Если опция выбрана, то модель будет запускаться заданное вами количество раз (оно задается в поле Кол-во "прогонов"). Значения параметров в этом случае будут вычисляться в соответствии с выражениями, которые вы зададите в таблице ниже.
Эта опция используется, если вам нужен эксперимент Монте-Карло или эксперимент анализа чувствительности, но не эксперимент варьирования параметров.Кол-во "прогонов" — [Активно и применяется, только если выше выбрана опция Произвольно] Задает, сколько раз эксперимент будет запускать модель с разными значениями параметров.
В расположенной здесь таблице пользователь задает набор параметров, которые будут варьироваться. В таблице перечислены все параметры агента верхнего уровня. Чтобы разрешить варьирование параметра, перейдите на соответствующую строку таблицы, щелкните мышью в ячейке Тип и выберите Диапазон. Если это численный параметр, то задайте диапазон допустимых значений параметра. Введите нижнюю границу диапазона в ячейке Мин и верхнюю — в ячейке Макс. В ячейке Шаг задайте шаг между значениями (инкремент).
Если выше будет выбрана опция варьировать Параметры: Произвольно, то для каждого параметра в таблице вместо упомянутых выше ячеек будет показана ячейка Выражение, где можно будет задать выражение, согласно которому будет вычисляться значение параметра (но это случай других экспериментов - Монте-Карло и анализа чувствительности). Номер текущего «прогона» модели доступен в коде выражения как index.
- Модельное время
-
Остановить — Здесь вам нужно задать, когда вы хотите, чтобы моделирование было остановлено. Если вы хотите, чтобы моделирование продолжалось бесконечно, до тех пор, пока вы сами его не остановите, выберите из выпадающего списка Нет. Если же вы хотите, чтобы моделирование длилось до заданного времени или заданной даты, выберите здесь соответственно В заданное время или В заданную дату. В этом случае время остановки будет задаваться элементом управления Начальное время/Начальная дата.
Начальное время — Начальное время моделируемого интервала времени.
Начальная дата — Начальная календарная дата моделируемого интервала времени.
Конечное время — Конечное время моделируемого интервала времени (количество единиц модельного времени, по прошествии которого модель будет остановлена).
Конечная дата — Конечная календарная дата моделируемого интервала времени.
Дополнительные условия остановки эксперимента — Здесь вы можете задать любое количество дополнительных условий остановки эксперимента. Когда выполнится любое из этих условий, эксперимент будет остановлен. Условие может включать в себя проверку значений переменных, средних значений наборов данных и т.д. Агент верхнего уровня эксперимента доступен здесь как root, поэтому если вы хотите, например, остановить эксперимент, когда значение переменной plainVar агента верхнего уровня эксперимента превзойдет некоторое пороговое значение (скажем, 11), напишите здесь root.plainVar>11. Чтобы сделать это условие активным, вам нужно будет установить флажок в соответствующей строке таблицы.
- Случайность
-
Генератор случайных чисел — В стохастических моделях важную роль играет заданное вами начальное число генератора случайных чисел — от этого будет зависеть, будут ли «прогоны» стохастической модели уникальными или воспроизводимыми. Здесь вы можете выбрать, хотите ли вы задать случайное число, чтобы «прогоны» были уникальными, фиксированное число, чтобы они были воспроизводимыми, или вообще задать свой собственный генератор случайных чисел вместо используемого AnyLogic по умолчанию.
Случайное начальное число (уникальные "прогоны") — Если опция выбрана, то «прогоны» модели будут уникальными и не смогут быть воспроизведены в силу того, что при каждом новом запуске модели генератор случайных чисел будет инициализироваться другим числом.
Фиксированное начальное число (воспроизводимые "прогоны") — Если опция выбрана, то генератор случайных чисел модели будет всегда инициализироваться одним и тем же начальным числом (оно задается в поле Начальное число), поэтому все запуски модели будут идентичными и воспроизводимыми.
Нестандартный генератор (подкласс класса Random) — Если по каким-либо причинам вас не устраивает качество стандартного генератора Random, то вы можете использовать вместо него ваш собственный ГСЧ. Для этого создайте его (это должен быть подкласс Java класса Random, например, MyRandom), выберите данную опцию и введите выражение, возвращающее экземпляр класса вашего ГСЧ, в расположенном справа поле, например: new MyRandom() или new MyRandom( 1234 ). Подробнее см. в статье о нестандартном генераторе случайных чисел. - Репликации
-
Использовать репликации — Если опция выбрана, то оптимизатор будет выполнять несколько репликаций за один "прогон". Это нужно тогда, когда в вашей модели есть стохастика. В таких случаях результаты «прогонов» являются уникальными, и значения оптимизируемой функции, полученные для «прогонов», произведенных при одних и тех же значениях оптимизационных параметров, скорее всего, отличаются друг от друга. Мы не можем произвести всего лишь один «прогон», принять его результат в качестве результата для данной итерации и продолжать оптимизацию дальше, проверяя другие значения параметров. Чтобы получить репрезентативные данные, которым можно доверять, нам нужно провести несколько «прогонов» (называемых в даном контексте репликациями) для одного набора значений параметров и принять в качестве значений целевой функции среднее значение результатов всех репликаций.
Фиксированное количество репликаций — Если опция выбрана, то в рамках одной итерации будет производиться фиксированное количество репликаций.
Кол-во репликаций за итерацию — [Доступно, если выбрана опция Фиксированное количество репликаций] количество репликаций, которое будет производиться в рамках одной итерации.
Переменное кол-во репликаций (останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала) — Если опция выбрана, то в рамках одной итерации будет производиться переменное количество репликаций.
Для оптимизации с переменным количеством репликаций в одной итерации задаются минимальное и максимальное количество репликаций. За одну итерацию оптимизатор всегда выполняет заданное минимальное количество репликаций. Необходимость выполнения дополнительных репликаций определяется оптимизатором. Прекращение выполнения дополнительных репликаций произойдет в одном из следующих случаев:
- Доверительный интервал для всех репликаций в рамках текущей итерации достаточно мал, чтобы попасть в интервал, заданный степенью доверия (то есть, искомое значение целевой функции для данной итерации несущественно отличается от среднего значения всех репликаций, что свидетельствует о том, что выборка репрезентативна, и найденному к данному моменту значению можно доверять).
- Было выполнено заданное максимальное количество репликаций.
Максимальное кол-во репликаций — [Доступно, если выбрана опция Переменное кол-во репликаций (Останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] — Максимальное количество репликаций, которые будет производить оптимизатор за одну итерацию.
Доверительная вероятность — [Доступно, если выбрана опция Переменное кол-во репликаций (Останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] — Значение доверительной вероятности для получаемых значений целевой функции.
Доверительная вероятность показывает, с какой вероятностью случайный ответ попадет в доверительный интервал. Для простоты можно понимать её как точность выборки. Как правило, используется 95%, но в тех случаях, когда высокая точность не нужна, вероятностью можно пожертвовать и понизить её уровень до 90% и даже до 85%. И наоборот, чем большую выборку может себе позволить исследователь, тем выше можно установить точность полученных данных. Доверительный интервал можно понимать как погрешность, задает размах части кривой распределения по обе стороны от выбранной точки, куда могут попадать ответы.
Относительный уровень ошибки — [Доступно, если выбрана опция Переменное кол-во репликаций (Останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] — Значение от 0 до 1, определяющее размер доверительного интервала, который нас будет устраивать в качестве условия прекращения выполнения дополнительных репликаций для текущей итерации. Интервал считается как («текущее среднее значение» - «текущее среднее значение» * относительный уровень ошибки, «текущее среднее значение» + «текущее среднее значение» * относительный уровень ошибки).
- Окно
-
Свойства, расположенные на странице Окно, отвечают за внешний вид и настройки окна модели, которое отображается при запуске эксперимента. Обратите внимание, что размеры окна модели задаются с помощью объекта Рамка и являются общими для всех типов агентов и экспериментов вашей модели.
Заголовок — Заголовок, который будет показан в окне презентации.
Разрешить изменение масштаба и перетаскивание — Если опция выбрана, то пользователь сможет изменять масштаб содержимого окна презентации во время моделирования и перемещать холст окна презентации с помощью мыши (перемещая мышь с нажатой правой кнопкой).
Панель разработчика — Если опция выбрана, панель разработчика будет доступна в окне модели.
Показать панель разработчика при старте модели — [Параметр доступен, если выбрана опция Панель разработчика] Если опция выбрана, панель разработчика будет по умолчанию отображаться в окне модели при каждом запуске эксперимента.
- Действия Java
-
Код инициализации эксперимента — Код инициализации эксперимента, который выполняется, когда эксперимент и его интерфейс уже созданы.
Действие перед запуском каждого эксперимента — Код, который выполняется перед запуском каждого эксперимента.
Действие перед "прогоном" модели — Код, выполняемый перед каждым «прогоном» модели. Этот код запускается при инициализации модели. К этому моменту агент верхнего уровня модели уже создан, но модель еще не запущена. Здесь вы можете выполнять действия с элементами агента верхнего уровня, например, присвоить другие значения его параметрам.
Действие после "прогона" модели — Код, выполняемый после каждого «прогона» модели. Этот код выполняется, когда исполняющий модуль завершает выполнение модели (вызывается метод Engine.finished()). Этот код не выполняется, если вы останавливаете модель с помощью кнопки Прекратить выполнение.
Действие после итерации — Код, выполняемый после каждой итерации.
Действие по окончании эксперимента — Код, выполняемый после окончания выполнения эксперимента.
- Java для экспертов
-
Импорт — Выражения импорта import, необходимые для успешной компиляции кода класса эксперимента. Во время генерации Java кода эти выражения вставляются перед строкой объявления Java класса эксперимента.
Дополнительный код класса — Здесь вы можете объявить какие-то служебные переменные кода, вложенные классы, константы и методы. Этот код будет вставлен в объявление класса эксперимента. Все объявленные здесь члены класса будут доступны из кода эксперимента.
Аргументы Java машины — [Параметр приложения] Задайте здесь аргументы Java машины, которые будут применяться при запуске модели. Подробное описание возможных аргументов дано на сайте Oracle: https://docs.oracle.com/en/java/javase/11/tools/java.html
Аргументы командной строки — [Параметр приложения] Здесь вы можете задать аргументы командной строки, с помощью которых вы хотите передать модели определенные данные. Значения переданных аргументов доступны во всех кодовых полях с помощью метода String[] getCommandLineArguments(). Единственное ограничение: вы не можете вызывать этот метод, чтобы задавать значение статических переменных.
- Специфические
-
Разрешить параллельное выполнение итераций — Если опция выбрана, то при наличии у процессора пользовательского компьютера нескольких ядер, сразу несколько итераций эксперимента будет параллельно выполняться на разных ядрах процессора. Это приведет к многократному увеличению производительности и завершению эксперимента за значительно меньшее время. Возможность отключения параллельного выполнения предоставляется потому, что в редких случаях такое выполнение может нарушить стратегию оптимизатора, что в итоге может потребовать проведения большего числа итераций для нахождения оптимального решения. Если параллельное выполнение итераций разрешено, не используйте в модели статические переменные, коллекции, табличные функции и эмпирические распределения. Проверьте, что у таких элементов опция Статическая в секции свойств Специфические отключена.
Загрузить агента верхнего уровня из файла сохраненного состояния — Если опция выбрана, то агент верхнего уровня эксперимента будет загружаться из файла сохраненного состояния модели, указанного в расположенном справа поле. Эксперимент будет запущен с того момента модельного времени, когда было сохранено состояние модели.
AnyLogic поддерживает два режима варьирования параметров:
- Варьировать в диапазоне. Вы явно задаете диапазон возможных значений для каждого варьируемого параметра: минимум, максимум, а также величину шага (инкремента), с помощью которого будут определяться допустимые значения данного параметра внутри диапазона. Модель будет запускаться столько раз, сколько нужно для того, чтобы перебрать все возможные комбинации значений варьируемых параметров.
- Произвольно. Модель запускается заданное количество раз. Значения параметров высчитываются в соответствии с заданными пользователем выражениями.
Варьироваться могут только параметры агента верхнего уровня эксперимента. Если вам нужно варьировать параметры вложенных агентов, воспользуйтесь механизмом связывания параметров. (Из этого вытекает и другое логичное требование: чтобы проводить эксперименты варьирования параметров, агент верхнего уровня этого эксперимента должен содержать хотя бы один параметр).
Чтобы настроить эксперимент варьирования параметров
- В панели Проекты, щелкните мышью по эксперименту.
- Перейдите в секцию Параметры панели Свойства.
- Выберите, хотите ли вы, чтобы параметры варьировались в заданном диапазоне или произвольно (выберите опцию Варьировать в диапазоне или Произвольно соответственно). Если вы выберете опцию Произвольно, то вам нужно будет указать, сколько раз будет запускаться ваша модель в расположенном справа поле Кол-во "прогонов".
- Задайте свойства варьируемых параметров в таблице Параметры (в ней перечислены все параметры агента верхнего уровня).
- Если вы будете варьировать параметры в диапазоне, то вам будет нужно задать диапазоны значений варьируемых параметров. Чтобы разрешить варьирование параметра, перейдите на соответствующую строку таблицы Параметры, щелкните мышью в ячейке Тип и выберите тип параметра, отличный от значения фиксированный. Список возможных значений будет меняться в зависимости от типа параметра: набор, int, дискретный для целочисленных параметров типа непрерывный и дискретный для вещественных параметров типа double и т.д. Задайте диапазон допустимых значений параметра. Введите нижнюю границу диапазона в ячейке Мин и верхнюю — в ячейке Макс. Для параметров набор и дискретный нужно также указать в ячейке Шаг величину шага (инкремента), с помощью которого будут определяться допустимые значения данного параметра (первое допустимое значение равно заданной нижней границе интервала, следующее равно сумме первого значения и заданного шага и т.д.). Подробнее о типах варьируемых параметров вы можете прочитать здесь.
- Если же параметры будут варьироваться Произвольно, то вы должны ввести для каждого параметра Выражение, согласно которому будет высчитываться его значение (если вы не хотите варьировать какой-то параметр, то вы можете ввести в ячейке Выражение соответствующей строки таблицы просто фиксированное значение). Номер текущего «прогона» модели доступен в выражении как index.
Как и у других экспериментов, у эксперимента варьирования параметров есть своя графическая диаграмма, на которой вы можете нарисовать презентацию для этого эксперимента. Эта презентация будет отображена в окне презентации, которое откроется после запуска эксперимента.
По умолчанию эта диаграмма пуста. Но AnyLogic поддерживает механизм автоматического создания типового интерфейса, содержащего элементы управления, отображающие ход выполнения эксперимента.
Мы советуем вам вначале создать типовой интерфейс, а потом изменять его в соответствии с вашими требованиями.
Чтобы создать интерфейс эксперимента варьирования параметров
- В панели Проекты, щелкните мышью по эксперименту варьирования параметров.
- Перейдите в панель Свойства.
- Щелкните мышью по кнопке Создать интерфейс. При этом будет создан использующийся по умолчанию интерфейс эксперимента - на презентацию будут добавлены элементы, отображающие значения параметров в текущей итерации.
Таблица, расположенная в левой части окна, отображает всю необходимую информацию о ходе выполнения эксперимента - номер текущей итерации (в строке Итерация) и текущие значения параметров.
Если вы варьируете параметры детерминированной модели, в которой нет стохастики (то есть, случайных процессов, описанных с помощью вероятностных распределений), то любые два «прогона» с одними и теми же значениями параметров всегда будут выдавать одни и те же результаты. В этом случае достаточно выполнить всего лишь один «прогон» для каждой итерации (то есть, для каждого набора значений параметров).
Если же в вашей модели есть стохастика, то результаты «прогонов» будут уникальными, и результаты «прогонов», произведенных при одних и тех же значениях параметров, скорее всего, будут отличаться. В этом случае мы не можем производить всего лишь один «прогон», принимать его результат в качестве результата для данной итерации и продолжать выполнение эксперимента дальше с другими значениями параметров. Чтобы получить репрезентативные данные, которым можно доверять, нам нужно провести несколько «прогонов» (называемых в данном контексте репликациями) для одного набора значений параметров и принять в качестве значения выражения на итерации среднее значение результатов всех репликаций.
Число репликаций, производимых в рамках одной итерации, может быть как фиксированным, так и переменным. В первом случае вы просто задаете то количество репликаций, при котором вы считаете, что полученному результату можно будет доверять. В этом случае за одну итерацию всегда будет выполняться строго заданное количество репликаций.
Для эксперимента с переменным количеством репликаций в одной итерации задаются минимальное и максимальное количество репликаций. За одну итерацию всегда будет выполнено заданное минимальное количество репликаций. Необходимость выполнения дополнительных репликаций определяется исполняющим модулем. Прекращение выполнения дополнительных репликаций произойдет в одном из следующих случаев:
- Доверительный интервал для всех репликаций в рамках текущей итерации достаточно мал, чтобы попасть в интервал, заданный степенью доверия (то есть, искомое значение заданного выражения для данной итерации несущественно отличается от среднего значения всех репликаций, что свидетельствует о том, что выборка репрезентативна, и найденному к данному моменту значению можно доверять).
-
Было выполнено заданное максимальное количество репликаций.
Чтобы запланировать выполнение фиксированного числа репликаций за одну итерацию
- Выберите эксперимент в панели Проекты.
- Перейдите в секцию Репликации панели Свойства.
- Установите флажок Использовать репликации.
- Выберите опцию Фиксированное количество репликаций.
- Задайте количество репликаций в поле Кол-во репликаций за итерацию.
Чтобы запланировать выполнение переменного числа репликаций за одну итерацию
- Выберите эксперимент в панели Проекты.
- Перейдите в секцию Репликации панели Свойства.
- Установите флажок Использовать репликации.
- Выберите опцию Переменное кол-во репликаций (Останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала).
- Задайте минимальное количество репликаций в поле Минимальное кол-во репликаций.
- Задайте максимальное количество репликаций в поле Максимальное кол-во репликаций.
- В поле Доверительная вероятность задайте значение доверительной вероятности для вычисляемого выражения. Доверительная вероятность показывает, с какой вероятностью случайный ответ попадет в доверительный интервал. Для простоты можно понимать её как точность выборки. Как правило, используется 95%, но в тех случаях, когда высокая точность не нужна, вероятностью можно пожертвовать и понизить её уровень до 90% и даже до 85%. И наоборот, чем большую выборку может себе позволить исследователь, тем выше можно установить точность полученных данных. Доверительный интервал можно понимать как погрешность, задает размах части кривой распределения по обе стороны от выбранной точки, куда могут попадать ответы.
- В поле Относительный уровень ошибки задайте значение от 0 до 1, определяющее размер доверительного интервала, который нас будет устраивать в качестве условия прекращения выполнения дополнительных репликаций для текущей итерации. Интервал считается как (“текущее среднее значение” - “текущее среднее значение” * относительный уровень ошибки, “текущее среднее значение” + “текущее среднее значение” * относительный уровень ошибки).
Вы можете использовать следующие функции для управления экспериментом варьирования параметров и сбора данных о состоянии его выполнения, на основании которых вы сможете построить собственный интерфейс пользователя для эксперимента.
- Управление выполнением
-
Функция Описание void run() Начинает выполнение эксперимента из его текущего состояния.
Если модель еще не существует, функция перезапускает эксперимент, создает и запускает модель.void pause() Приостанавливает выполнение эксперимента. void step() Выполняет один шаг эксперимента. Если модель еще не существует, функция перезапускает эксперимент, создает и запускает модель. void stop() Прекращает выполнение эксперимента. void close() Функция мгновенно возвращает управление и выполняет следующие действия в параллельном потоке: - Останавливает эксперимент, если он не остановлен,
- Уничтожает модель,
- Закрывает окно эксперимента (только если модель запущена в режиме отдельного приложения).
Experiment.State getState() Возвращает текущее состояние эксперимента: IDLE, PAUSED, RUNNING, FINISHED, ERROR или PLEASE_WAIT. double getRunTimeSeconds() Возвращает длительность выполнения эксперимента в секундах (за вычетом времени, когда эксперимент был приостановлен). int getRunCount() Возвращает номер текущего запуска, т.е. сколько раз модель была уничтожена. double getProgress() Возвращает степень выполнения эксперимента: число от 0 до 1, соответствующее завершенной на данный момент части эксперимента (доля выполненных итераций от их общего числа). Если степень выполнения невозможно вычислить, то возвращает -1. int getParallelEvaluatorsCount() Возвращает количество параллельных вычислителей, используемых в данной модели.
На многоядерных / мультипроцессорных системах, которые позволяют осуществить параллельный запуск, это число может превышать 1. - Итерации
-
Функция Описание int getCurrentIteration() Возвращает текущее значение счетчика итераций. int getMaximumIterations() Возвращает общее количество итераций. int getNumberOfCompletedIterations() Возвращает количество выполненных итераций. - Репликации
-
Прежде чем вызывать функции эксперимента варьирования параметров, вам необходимо убедиться, что репликации используются. Это можно сделать, вызвав функцию isUseReplications().
Функция Описание boolean isUseReplications() Возвращает true, если эксперимент использует репликации; в противном случае возвращает false. int getCurrentReplication() Возвращает количество репликаций, выполненных для текущей итерации. - Доступ к модели
-
Функция Описание Engine getEngine() Возвращает исполняющий модуль AnyLogic. Чтобы получить доступ к агенту верхнего уровня (как правило, Main), вызовите функцию getEngine().getRoot(); IExperimentHost getExperimentHost() Возвращает хост эксперимента модели или пустой объект, лишенный функциональности, если хост не существует. - Восстановление сохраненного состояния модели
-
Функция Описание void setLoadRootFromSnapshot(String snapshotFileName) По вызову этой функции простой эксперимент загружает агента верхнего уровня из файла состояния модели AnyLogic. Данная функция доступна только в AnyLogic Professional. snapshotFileName — имя файла состояния модели AnyLogic, например: "C:\My Model.als" boolean isLoadRootFromSnapshot() Возвращает true, если эксперимент настроен так, чтобы запускать модель из состояния, загружаемого из файла состояния модели; в противном случае возвращает false. String getSnapshotFileName() Возвращает имя файла состояния модели, из которого, в соответствии с настройками эксперимента, запускается модель. - Обработка ошибок
-
Функция Описание RuntimeException error(Throwable cause, String errorText) Сообщает об ошибке во время выполнения модели: выдает исключение RuntimeException с соответствующим текстом errorText, предварив его полным именем агента.
Эта функция никогда ничего не возвращает, лишь выдает исключение. Тип возвращаемого объекта задается в тех случаях, когда вы хотите использовать следующий способ вызова: throw error("my message");
cause — причина (сохраняется для более подробного сообщения), может быть null.
errorText — текст с описанием ошибки для отображения.RuntimeException errorInModel(Throwable cause, String errorText) Сообщает об ошибке во время выполнения модели: выдает исключение ModelException с заданным текстом ошибки, предварив его полным именем агента. Эта функция никогда ничего не возвращает, лишь выдает исключение. Тип возвращаемого объекта задается в тех случаях, когда вы хотите использовать следующий способ вызова: throw errorInModel("my message");
Данная функция отличается от функции error() тем, как отображается сообщение об ошибке: ошибки в логике модели не так “серьезны” по сравнению с другими ошибками. Они случаются довольно часто и сообщают разработчику о необходимости изменить некоторые параметры модели.
Примером могут послужить такие сообщения: “агент не смог покинуть блок диаграммы процесса, поскольку следующий блок занят” или “недостаточная вместимость стеллажа”.
cause — причина (сохраняется для более подробного сообщения), может быть null.
errorText — текст с описанием ошибки для отображения.void onError(Throwable error) Эту функцию можно переопределить для нестандартной обработки ошибок, произошедших во время выполнения модели (т.е. ошибок в коде событий, динамических событий, переходов, действий на входе / выходе из состояний и т.д.).
По умолчанию функция ничего не совершает, так как она не определена. Чтобы переопределить функцию, вы можете добавить функцию в эксперимент, назвать ее onError и задать для нее один аргумент класса java.lang.Throwable.
error — ошибка, возникшая в ходе выполнения события.void onError(Throwable error, Agent root) Схожа с функцией onError(Throwable error) за одним исключением: предоставляет еще один аргумент для доступа к агенту верхнего уровня модели.
Функция особенно полезна при работе с экспериментами с множественными прогонами, которые выполняются одновременно.
error — ошибка, возникшая в ходе выполнения события.
root — агент верхнего уровня модели. В некоторых случаях значение может быть равно null (например, если ошибка возникла при создании агента верхнего уровня). - Аргументы командной строки
-
Функция Описание String[] getCommandLineArguments() Возвращает массив аргументов командной строки, которые передаются данному эксперименту при запуске модели. Никогда не возвращает null: если аргументов нет, возвращает пустой массив.
Эту функцию нельзя вызывать из значений статических переменных: такие переменные инициализируются раньше, чем класс эксперимента.
-
Как мы можем улучшить эту статью?
-