Код Java для нестандартного эксперимента

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

Пример кода для агента Main, выполняющего нестандартный эксперимент: 

// Создайте нестандартный эксперимент, передайте выполняемый в данный момент эксперимент
// конструктору в качестве аргумента

MyCustomExperiment e = new MyCustomExperiment(getExperiment());

// настройте нестандартные поля, заданные в
// дополнительном коде класса MyCustomExperiment:

e.day = getDayOfWeek();

// запустите эксперимент

e.run();

// соберите данные из нестандартных полей, заданных в
// дополнительном коде класса MyCustomExperiment:

traceln( "result: " + e.myResult );

(В приведенном выше примере у нестандартного эксперимента внутри функции run() есть код, который возвращает поле "day", заданное в дополнительном коде класса, использует его в эксперименте и задает значение полученного результата в поле myResult).

Примечания к использованию

Используйте функцию createEngine(), чтобы создать новый экземпляр класса Engine. Используйте функцию Engine.runFast(), чтобы запустить эксперимент с максимально доступной скоростью выполнения.

Не забудьте предварительно задать время или дату остановки исполняющего модуля.

Используйте функцию ExperimentOptimization.createOptimization(Engine), чтобы создать новый экземпляр OptQuest Optimization.

Простейший пример кода функции run():  

 // Создайте экземпляр Engine, инициализируйте генератор случайных чисел:

 Engine engine = createEngine();

 // Задайте время остановки

 engine.setStopTime( 100 );

 // Задайте нового агента верхнего уровня:

 Main root = new Main(engine, null, null);

 // Задайте параметры для агента верхнего уровня здесь

 root.myParameter = 10;

 // Подготовьте экземпляр Engine к простому эксперименту:

 engine.start( root );

 // Запустите простой эксперимент в быстром режиме:

 engine.runFast();

 // Получите результаты простого эксперимента здесь

 traceln( root.myResult );

 // Уничтожьте модель:

 engine.stop();

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

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

Функция

Описание

Engine createEngine()

Создает экземпляр класса Engine

void run()

Использует createEngine().

Обработка ошибок

Функция

Описание

void onError
(Throwable error)

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

По умолчанию функция ничего не совершает, так как она не определена. Чтобы переопределить функцию, вы можете добавить функцию в эксперимент, назвать ее onError и задать для нее один аргумент класса java.lang.Throwable.

Параметр:
error - ошибка, возникшая в ходе выполнения события.

void onError
(Throwable error, Agent root)

Схожа с функцией onError(Throwable error) за одним исключением: использует еще один аргумент, чтобы обратиться к агенту верхнего уровня в модели.

Параметры:
error - ошибка, возникшая в ходе выполнения события.
root - агент верхнего уровня в модели. Полезен при работе с экспериментами с множественными прогонами, которые выполняются одновременно. В некоторых случаях начение может быть null (например, если ошибка возникла при создании агента верхнего уровня).


Аргументы командной строки

Функция

Описание

String[] getCommandLineArguments()

Возвращает массив аргументов командной строки, которые передаются данному эксперименту при запуске модели. Никогда не возвращает null: если аргументов нет, возвращает пустой массив.

Данная функция предназначена для использования внутри функции run().