Функции эксперимента оптимизации

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

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

Функция

Описание

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.


Целевая функция

Функция

Описание

double getCurrentObjectiveValue()

Возвращает значение целевой функции для текущего решения.

double getBestObjectiveValue()

Возвращает значение целевой функции для наилучшего из найденных на данный момент решений. 

Обратите внимание на то, что решение может быть невыполнимым. Чтобы проверить, выполняется ли решение, вызовите функцию isBestSolutionFeasible().

double getSelectedNthBestObjectiveValue()

Возвращает целевое значение для энного наилучшего решения, определенного с помощью вызова функции selectNthBestSolution(int).


Решение

Функция

Описание

boolean isBestSolutionFeasible()

Возвращает true, если наилучшее решение удовлетворяет всем ограничениям и требованиям; в противном случае возвращает false.

boolean isCurrentSolutionBest()

Возвращает true, если решение на данный момент является наилучшим; в противном случае возвращает false.

boolean isCurrentSolutionFeasible()

Возвращает true, если текущее решение удовлетворяет всем ограничениям и требованиям; в противном случае возвращает false.

boolean isSelectedNthBestSolutionFeasible()

Возвращает true, если N-ое наилучшее решение удовлетворяет всем ограничениям и требованиям; в противном случае возвращает false.

void selectNthBestSolution
(int bestSolutionIndex)

Эта функция находит N-ое лучшее решение и задает данные для последущих вызовов функции, которые возвращают конкретную информацию (например, для функций  getSelectedNthBestObjectiveValue() и getSelectedNthBestParamValue(COptQuestVariable)).

Параметр:
bestSolutionIndex - индекс наилучших решений (если передать в качестве аргумента 1, функция вернет наилучшее решение, если 2 - второе наиболее подходящее и т.д.)


Параметры оптимизации

Функция

Описание

double getCurrentParamValue
(COptQuestVariable optimizationParameterVariable)

Возвращает значение переменной заданного параметра оптимизации для текущего решения.

double getBestParamValue
(COptQuestVariable optimizationParameterVariable)

Возвращает значение переменной данного параметра оптимизации для наилучшего из найденных решений. 

Обратите внимание на то, что решение может быть невыполнимым. Чтобы проверить, выполняется ли решение, вызовите функцию isBestSolutionFeasible().

double getSelectedNthBestParamValue
(COptQuestVariable optimizationParameterVariable)

Возвращает значение переменной для N-го наилучшего решения, определенного с помощью вызова функции selectNthBestSolution(int).


Итерации

Возвращает итерацию, которая привела к наилучшему из найденных на данный момент решений. 

Обратите внимание на то, что решение может быть невыполнимым. Чтобы проверить, выполняется ли решение, вызовите функцию isBestSolutionFeasible().

Функция

Описание

int getCurrentIteration()

Возвращает текущее значение счетчика итераций.

int getBestIteration()

Возвращает итерацию, в ходе которой было получено наилучшее решение.

Обратите внимание на то, что решение может быть невыполнимым. Чтобы проверить, выполняется ли решение, вызовите функцию isBestSolutionFeasible().

int getMaximumIterations()

Возвращает общее количество итераций.

int getNumberOfCompletedIterations()

Возвращает количество выполненных итераций.

int getSelectedNthBestIteration()

Возвращает номер итерации для N-го наилучшего решения, определенного с помощью вызова функции selectNthBestSolution(int).


Репликации

Прежде чем вызывать функции эксперимента оптимизации, вам необходимо убедиться, что репликации используются. Это можно сделать, вызвав функцию isUseReplications()

Функция

Описание

boolean isUseReplications()

Возвращает true, если эксперимент использует репликации; в противном случае возвращает false.

int getCurrentReplication()

Возвращает количество репликаций, выполненных на данный момент для решения, которое проходит проверку.

int getBestReplicationsNumber()

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

Обратите внимание на то, что решение может быть невыполнимым. Чтобы проверить, выполняется ли решение, вызовите функцию isBestSolutionFeasible().

int getSelectedNthBestReplicationsNumber()

Возвращает количество репликаций для N-го наилучшего решения, определенного с помощью вызова функции selectNthBestSolution(int).


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

Функция

Описание

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

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


См. также

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