Эксперимент Сравнение "прогонов"

Обучающее видео: Compare Runs experiment

Этот тип эксперимента позволяет интерактивно задавать различные значения параметров и запускать модель с этими значениями.

Интерфейс эксперимента содержит диаграммы, одновременно отображающие результаты всех совершенных вами "прогонов" (которые могут быть заданы как в скалярной форме, так и в виде наборов данных), позволяя тем самым визуально сравнивать результаты моделирования, полученные при тех или иных значениях параметров.

Простая демо модель: Compare Runs Experiment

Создание эксперимента Сравнение "прогонов"

Чтобы создать эксперимент сравнения "прогонов"
  1. В панели Проекты, щелкните правой кнопкой мыши по модели, для которой вы хотите создать новый эксперимент, и выберите Создать > Эксперимент из контекстного меню.
    Появится диалоговое окно Новый эксперимент.
  2. Выберите Сравнение "прогонов" из списка Тип эксперимента.
  3. Введите имя эксперимента в поле Имя.
  4. Выберите тип агента для этого эксперимента из выпадающего списка Агент верхнего уровня.
  5. Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из и выберите эксперимент из расположенного справа выпадающего списка.

  6. Щелкните мышью по кнопке Далее. Откроется страница Мастера Параметры. Здесь вам нужно будет выбрать, какие параметры корневого объекта вы хотите варьировать между "прогонами" этого эксперимента.
  7. Добавьте нужные вам параметры из списка Доступны в список Выбраны. Чтобы добавить параметр, выберите его в списке Доступны и щелкните по кнопке . Чтобы добавить все доступные параметры, щелкните по кнопке . При необходимости вы можете удалить ранее выбранный параметр из списка выбранных параметров. Чтобы удалить параметр, выберите его в списке Выбраны и щелкните по кнопке . Чтобы удалить все параметры, щелкните мышью по кнопке .

  8. Щелкните мышью по кнопке Далее. Откроется следующая страница Мастера - Диаграммы. Здесь вы можете задать свойства диаграмм, которые будут отображать сравниваемые результаты моделирования. Каждая диаграмма задается в отдельной строке таблицы: Тип, Заголовок диаграммы и Выражение. Заголовок диаграммы будет отображаться в окне презентации над диаграммой. Тип определяет тип отображаемого на диаграмме результата моделирования: Набор данных или скаляр. В поле Выражение вам нужно написать выражение, результат вычисления которого и будет отображаться на диаграмме. Агент верхнего уровня эксперимента доступен в этом поле как root, поэтому вы можете написать здесь, например, root.myDataset.
    Например, пусть вы хотите запустить несколько раз модель диффузии продукта Bass Diffusion с разными значениями параметров и сравнить динамику приобретения продукта в зависимости от значений варьируемых параметров. Предположим, что вы храните историю по численности населения потребителей продукта в наборе данных, хранящемся в корневом объекте, скажем, adoptersDS. Чтобы добавить график, отображающий кривые динамики изменения численности потребителей для нескольких "прогонов" с разными значениями параметров, нужно выбрать Набор данных в ячейке Тип, ввести Заголовок диаграммы, скажем, Кол-во потребителей, и ввести имя набора данных, хранящего историю изменения этой численности, в ячейке Выражение: в нашем случае это будет root.adoptersDS.

  9. Завершите создание эксперимента, щелкнув мышью по кнопке Готово.

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

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

Свойства

Основные

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

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

Агент верхнего уровня – Здесь задается агент верхнего уровня этого эксперимента. Агент этого типа будет играть роль корня иерархического дерева агентов модели, запускаемой этим экспериментом.

Максимальный размер памяти – Максимальный размер памяти Java, выделенный для данной модели.

Параметры

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

Модельное время

Остановить – Здесь вам нужно задать, когда вы хотите, чтобы моделирование было остановлено. Если вы хотите, чтобы моделирование продолжалось бесконечно, до тех пор, пока вы сами его не остановите, выберите из выпадающего списка Нет. Если же вы хотите, чтобы моделирование длилось до заданного времени или заданной даты, выберите здесь соответственно В заданное время или В заданную дату. В этом случае время остановки будет задаваться элементом управления Начальное время/Начальная дата.

Начальное время – Начальное время моделируемого интервала времени.

Начальная дата – Начальная календарная дата моделируемого интервала времени.

Конечное время – Конечное время моделируемого интервала времени (количество единиц модельного времени, по прошествии которого модель будет остановлена).

Конечная дата – Конечная календарная дата моделируемого интервала времени.

Случайность

Генератор случайных чисел – В стохастических моделях важную роль играет заданное вами начальное число генератора случайных чисел - от этого будет зависеть, будут ли "прогоны" стохастической модели уникальными или воспроизводимыми. Здесь вы можете выбрать, хотите ли вы задать случайное число, чтобы "прогоны" были уникальными, фиксированное число, чтобы они были воспроизводимыми, или вообще задать свой собственный генератор случайных чисел вместо используемого AnyLogic по умолчанию.

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

Фиксированное начальное число (воспроизводимые "прогоны") – Если опция выбрана, то генератор случайных чисел модели будет всегда инициализироваться одним и тем же начальным числом (оно задается в поле Начальное число), поэтому все запуски модели будут идентичными и воспроизводимыми.

Нестандартный генератор (подкласс класса Random) – Если по каким-либо причинам вас не устраивает качество стандартного генератора Random, то вы можете использовать вместо него ваш собственный ГСЧ. Для этого создайте его (это должен быть подкласс Java класса Random, например, MyRandom), выберите данную опцию и введите выражение, возвращающее экземпляр класса вашего ГСЧ, в расположенном справа поле, например: new MyRandom() или new MyRandom( 1234 ). Подробнее см. здесь.

Окно

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

Заголовок – Заголовок, который будет показан в окне презентации.

Разрешить изменение масштаба и перетаскивание – Если опция выбрана, то пользователь сможет изменять масштаб содержимого окна презентации во время моделирования и перемещать холст окна презентации с помощью мыши (перемещая мышь с нажатой правой кнопкой).

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

Показать панель разработчика при старте модели – [Параметр доступен, если выбрана опция Панель разработчика] Если опция выбрана, панель разработчика будет по умолчанию отображаться в окне модели при каждом запуске эксперимента.

Действия Java

Код инициализации эксперимента – Код инициализации эксперимента, который выполняется, когда эксперимент и его интерфейс уже созданы.

Действие перед запуском каждого эксперимента – Код, который выполняется перед запуском каждого эксперимента.

Действие перед "прогоном" модели – Код, выполняемый перед каждым "прогоном" модели. Этот код запускается при инициализации модели. К этому моменту корневой объект модели уже создан, но модель еще не запущена. Здесь вы можете выполнять действия с элементами агента верхнего уровня, например, присвоить другие значения его параметрам.

Действие после "прогона" модели – Код, выполняемый после каждого "прогона" модели. Этот код выполняется, когда исполняющий модуль завершает выполнение модели (вызывается метод Engine.finished()). Этот код не выполняется, если вы останавливаете модель с помощью кнопки Прекратить выполнение.

Java для экспертов

Импорт – Выражения импорта import, необходимые для успешной компиляции кода класса эксперимента. Во время генерации Java кода эти выражения вставляются перед строкой объявления Java класса эксперимента.

Дополнительный код класса – Здесь вы можете объявить какие-то служебные переменные кода, вложенные классы, константы и методы. Этот код будет вставлен в объявление класса эксперимента. Все объявленные здесь члены класса будут доступны из кода эксперимента.

Аргументы Java машины – [Параметр приложения] Задайте здесь аргументы Java машины, которые будут применяться при запуске модели. Подробное описание возможных аргументов дано на сайте Java Sun Microsystems: http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html

Аргументы командной строки – [Параметр приложения] Здесь вы можете задать аргументы командной строки, с помощью которых вы хотите передать модели определенные данные. Значения переданных аргументов доступны во всех кодовых полях с помощью метода String[] getCommandLineArguments(). Единственное ограничение: вы не можете вызывать этот метод, чтобы задавать значение статических переменных.

Специфические

Загрузить агента верхнего уровня из файла сохраненного состояния – Если опция выбрана, то агент верхнего уровня эксперимента будет загружаться из файла сохраненного состояния модели, указанного в расположенном справа поле. Эксперимент будет запущен с того момента модельного времени, когда было сохранено состояние модели.

Функции

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

Управление выполнением

Функция

Описание

void run()

Начинает выполнение эксперимента из его текущего состояния.

Если модель еще не существует, функция перезапускает эксперимент, создает и запускает модель.

void pause()

Приостанавливает выполнение эксперимента.

void step()

Выполняет один шаг эксперимента.

Если модель еще не существует, функция перезапускает эксперимент, создает и запускает модель.

void stop()

Прекращает выполнение эксперимента.

void finish()

Устанавливает маркер, после проверки которого исполняющий модуль останавливает работу по завершении текущего события.

void close()

Функция мгновенно возвращает управление и выполняет следующие действия в параллельном потоке:

  • Останавливает эксперимент, если он не остановлен,

  • Уничтожает модель,

  • Закрывает окно эксперимента (только если модель запущена в режиме отдельного приложения).

Experiment.State getState()

Возвращает текущее состояние эксперимента: IDLE, PAUSED, RUNNING, FINISHED, ERROR или PLEASE_WAIT.

double getRunTimeSeconds()

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

int getRunCount()

Возвращает номер текущего запуска, т.е. сколько раз модель была уничтожена.

double getProgress()

Возвращает степень выполнения эксперимента: число от 0 до 1, соответствующее завершенной на данный момент части эксперимента (доля выполненных итераций от их общего числа). Если степень выполнения невозможно вычислить, то возвращает -1.


Доступ к модели

Функция

Описание

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: если аргументов нет, возвращает пустой массив.

Эту функцию нельзя вызывать из значений статических переменных: такие переменные инициализируются раньше, чем класс эксперимента.