Калибровка

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

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

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

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

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

 Чтобы создать эксперимент калибровки
  1. В панели Проекты, щелкните правой кнопкой мыши по модели, для которой вы хотите создать новый эксперимент, и выберите Создать > Эксперимент из контекстного меню.
  2. Появится диалоговое окно Новый эксперимент.
  3. Выберите Калибровка из списка Тип эксперимента.
  4. Введите имя эксперимента в поле Имя.
  5. Выберите тип агента для этого эксперимента из выпадающего списка Агент верхнего уровня.
  6. Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из и выберите эксперимент из расположенного справа выпадающего списка.
  7. Щелкните мышью по кнопке Далее. Откроется вторая страница Мастера создания эксперимента Параметры и критерии. Здесь вы можете задать критерии калибровки и выбрать параметры, которые оптимизатор сможет варьировать.
  8. В таблице Параметры будут перечислены все параметры агента верхнего уровня. Чтобы разрешить варьирование параметра оптимизатором, перейдите на соответствующую строку таблицы Параметры, щелкните мышью в ячейке Тип и выберите тип параметра, отличный от значения фиксированный. Список возможных значений будет меняться в зависимости от типа параметра: набор, intдискретный для целочисленных параметров типа intнепрерывный и дискретный для вещественных параметров типа double и т.д. Задайте диапазон допустимых значений параметра. Введите нижнюю границу диапазона в ячейке Мин и верхнюю - в ячейке Макс. Для параметров набор и дискретный нужно также указать в ячейке Шаг величину шага (инкремента), с помощью которого будут определяться допустимые значения данного параметра (первое допустимое значение равно заданной нижней границе интервала, следующее равно сумме первого значения и заданного шага и т.д.).
  9. В расположенной ниже таблице Критерии задайте критерии калибровки. Каждый критерий задается в отдельной строке таблицы. Введите имя критерия в ячейке Заголовок. Выберите тип критерия в ячейке Тип. Есть два типа критериев: скаляр для нахождения соответствия отдельному числу, и набор данных для соответствия с набором данных. 
  10. В поле Результат моделирования введите имя скалярной переменной или набора данных, хранящие результаты моделирования, которые необходимо откалибровать. Агент верхнего уровня эксперимента доступен здесь как root, т.е. Вы можете написать, например, root.myDataset
  11. В поле Реальные данные введите выражение скалярного типа или имя существующего набора данных (здесь также можно ссылаться на root), представляющие собой известные реальные данные - эталон, которого будет стремиться достичь оптимизатор эксперимента. Вы можете задать и имя несуществующего набора данных или табличной функции - в этом случае их создаст Мастер создания эксперимента. 
  12. Если вы используете несколько критериев калибровки, то в столбце Коэффициент вы можете задать для них весовые коэффициенты. 
  13. Завершите процесс создания эксперимента, щелкнув мышью по кнопке Готово.
Эксперимент калибровки поддерживает визуализацию процесса калибровки и соответствия результатов каждому заданному критерию с помощью графика. Если вы измените свойства эксперимента (варьируемые параметры или их свойства), то вам нужно будет создать интерфейс эксперимента заново, щелкнув мышью по кнопке Создать интерфейс в панели свойств эксперимента.

Свойства

Основные

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

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

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

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

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

Автоматическая остановка – Если опция выбрана, то калибровка будет остановлена, если значение целевой функции перестанет существенно улучшаться (эта опция называется автоостановом оптимизации).

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

Создать интерфейс – Кнопка создает для эксперимента пользовательский интерфейс по умолчанию. 
 Пожалуйста, не нажимайте эту кнопку - это удалит интерфейс, созданный мастером, и для оптимизации эксперимента создаст интерфейс по умолчанию, что может не соответствовать вашим задачам.

Параметры

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

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

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

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

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

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

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

Дополнительные условия остановки оптимизации  – Здесь вы можете задать любое количество дополнительных условий остановки оптимизации. Когда выполнится любое из этих условий, оптимизация будет остановлена. Условие может включать в себя проверку значений переменных, средних значений наборов данных и т.д. Агент верхнего уровня эксперимента доступен здесь как root, поэтому если вы хотите, например, остановить оптимизацию, когда значение переменной plainVar агента верхнего уровня эксперимента превзойдет некоторое пороговое значение (скажем, 11), напишите здесь root.plainVar>11. Чтобы сделать это условие активным, вам нужно будет установить флажок в соответствующей строке таблицы.

Случайность

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

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

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

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

Упорядочение одновременных событий – Здесь вы можете выбрать порядок выполнения для одновременных событий (событий, которые происходят в один и тот же момент исполнения модели). Выберите один из следующих режимов: FIFO (в порядке поступления), LIFO (в обратном порядке) или Случайно.

Ограничения

Здесь пользователь может задать ограничения и требования - дополнительные ограничения, накладываемые на параметры и найденные решения оптимизатором.

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

Ограничение представляет собой арифметическое выражение, задающее более узкий диапазон допустимых значений параметров. Оно всегда представляет собой ограничение, задающее верхнюю или нижнюю границу диапазона значений параметра, например: parameter1 >= 10.

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

Требования

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

Выражение требования может содержать любые арифметические операции над данными модели. В выражении также можно вызывать созданные вами функции, а также предопределенные функции (sin(), cos(), sqrt() и т.д.). Агент верхнего уровня эксперимента доступен здесь как root.

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

Репликации

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

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

Кол-во репликаций за итерацию – [Доступно, если выбрана опция Фиксированное количество репликаций] количество репликаций, которое будет производиться в рамках одной итерации.

Переменное кол-во репликаций (останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала) – Если опция выбрана, то в рамках одной итерации будет производиться переменное количество репликаций. 
Для оптимизации с переменным количеством репликаций в одной итерации задаются минимальное и максимальное количество репликаций. За одну итерацию оптимизатор OptQuest всегда выполняет заданное минимальное количество репликаций. Необходимость выполнения дополнительных репликаций определяется оптимизатором. Прекращение выполнения дополнительных репликаций произойдет в одном из следующих случаев:

Минимальное кол-во репликаций – [Доступно, если выбрана опция Переменное кол-во репликаций (останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] – Минимальное количество репликаций, которые будет производить оптимизатор OptQuest за одну итерацию.

Максимальное кол-во репликаций – [Доступно, если выбрана опция Переменное кол-во репликаций (останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] – Максимальное количество репликаций, которые будет производить оптимизатор OptQuest за одну итерацию.

Доверительная вероятность – [Доступно, если выбрана опция Переменное кол-во репликаций (останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] – Значение доверительной вероятности для получаемых значений целевой функции. Доверительная вероятность показывает, с какой вероятностью случайный ответ попадет в доверительный интервал. Для простоты можно понимать её как точность выборки. Как правило, используется 95%, но в тех случаях, когда высокая точность не нужна, вероятностью можно пожертвовать и понизить её уровень до 90% и даже до 85%. И наоборот, чем большую выборку может себе позволить исследователь, тем выше можно установить точность полученных данных. Доверительный интервал можно понимать как погрешность, задает размах части кривой распределения по обе стороны от выбранной точки, куда могут попадать ответы.

Относительный уровень ошибки – [Доступно, если выбрана опция Переменное кол-во репликаций (останов после выполнения минимального кол-ва репликаций, при достижении доверительного интервала)] –  Значение от 0 до 1, определяющее размер доверительного интервала, который нас будет устраивать в качестве условия прекращения выполнения дополнительных репликаций для текущей итерации. Интервал считается как ("текущее среднее значение" - "текущее среднее значение" * относительный уровень ошибки, "текущее среднее значение" + "текущее среднее значение" * относительный уровень ошибки).

Окно

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

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

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

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

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

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

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

Действия 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()

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

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

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