При создании модели автоматически создается один простой эксперимент, названный Simulation. Как и следует из его названия, простой эксперимент представляет собой самый простой тип эксперимента. Он запускает модель с заданными значениями параметров, поддерживает режимы виртуального и реального времени, анимацию, отладку модели.
Вы можете создать несколько экспериментов с разными настройками и легко менять текущие настройки запуска модели, запуская тот или иной эксперимент.
Чтобы создать простой эксперимент
-
В панели Проекты, щелкните правой кнопкой мыши по модели, для которой вы хотите создать новый эксперимент, и выберите Создать > Эксперимент из контекстного меню.
Появится диалоговое окно Новый эксперимент. - Выберите Простой эксперимент из списка Тип эксперимента.
- Введите имя эксперимента в поле Имя.
- Выберите агента верхнего уровня для этого эксперимента из выпадающего списка Агент верхнего уровня.
- Если вы хотите применить к создаваемому эксперименту временные установки другого эксперимента, оставьте установленным флажок Копировать установки модельного времени из и выберите эксперимент из расположенного справа выпадающего списка.
- Щелкните мышью по кнопке Готово.
- Основные
-
Имя — Имя эксперимента.
Поскольку AnyLogic генерирует для каждого эксперимента соответствующий Java класс, при задании имени эксперимента нужно руководствоваться правилами названия классов в Java. Пожалуйста, начинайте имя эксперимента с заглавной буквы.Исключить — Если опция выбрана, то эксперимент будет исключен из модели.
Агент верхнего уровня — Здесь задается агент верхнего уровня этого эксперимента. Агент этого типа будет играть роль корня иерархического дерева агентов модели, запускаемой этим экспериментом.
Максимальный размер памяти — Максимальный размер памяти Java, выделенный для данной модели.
Пропустить экран эксперимента и запустить модель — Если опция выбрана, выполнение модели начинается непосредственно после запуска. В модельном окне отображается презентация агента верхнего уровня (по умолчанию это Main). Если вы хотите добавить на презентацию эксперимента графики или элементы управления, чтобы управлять параметрами модели, отключите эту опцию.
- Параметры
-
Этот раздел свойств виден только в том случае, если у агента верхнего уровня модели есть параметр(ы).
Здесь пользователь задает актуальные значения параметров агента верхнего уровня модели. Эти значения переопределят заданные в свойствах параметров значения по умолчанию. Метки имен тех параметров, значения которых отличаются от заданных по умолчанию, выделены полужирным шрифтом.
Вставить из буфера — С помощью этой кнопки вы можете вставить значения параметров модели из Буфера обмена в расположенные выше поля. Значения должны быть предварительно скопированы в Буфер обмена (например, из окна модели после завершения эксперимента калибровки или оптимизации).
- Модельное время
-
Режим выполнения — Здесь вы можете выбрать режим выполнения модели:
Виртуальное время (максимальная скорость) — Режим виртуального времени. В этом режиме модель выполняется без привязки к физическому времени — она просто выполняется настолько быстро, насколько это возможно. Этот режим лучше всего подходит в том случае, когда требуется моделировать работу системы в течение достаточно длительного периода времени.
Реальное время со скоростью — Режим реального времени. В этом режиме задается связь модельного времени с физическим, то есть задается количество единиц модельного времени, выполняемых в одну секунду. Это часто требуется, когда вы хотите, чтобы анимация модели отображалась с той же скоростью, что и в реальной жизни.Остановить — Здесь вам нужно задать, когда вы хотите, чтобы моделирование было остановлено. Если вы хотите, чтобы моделирование продолжалось бесконечно, до тех пор, пока вы сами его не остановите, выберите из выпадающего списка Нет. Если же вы хотите, чтобы моделирование длилось до заданного времени или заданной даты, выберите здесь соответственно В заданное время или В заданную дату. В этом случае время остановки будет задаваться элементом управления Начальное время/Начальная дата.
Начальное время — Начальное время моделируемого интервала времени.
Начальная дата — Начальная календарная дата моделируемого интервала времени.
Конечное время — Конечное время моделируемого интервала времени (количество единиц модельного времени, по прошествии которого модель будет остановлена).
Конечная дата — Конечная календарная дата моделируемого интервала времени.
- Случайность
-
Генератор случайных чисел — В стохастических моделях важную роль играет заданное вами начальное число генератора случайных чисел — от этого будет зависеть, будут ли «прогоны» стохастической модели уникальными или воспроизводимыми. Здесь вы можете выбрать, хотите ли вы задать случайное число, чтобы «прогоны» были уникальными, фиксированное число, чтобы они были воспроизводимыми, или вообще задать свой собственный генератор случайных чисел вместо используемого AnyLogic по умолчанию.
Случайное начальное число (уникальные "прогоны") — Если опция выбрана, то «прогоны» модели будут уникальными и не смогут быть воспроизведены в силу того, что при каждом новом запуске модели генератор случайных чисел будет инициализироваться другим числом.
Фиксированное начальное число (воспроизводимые "прогоны") — Если опция выбрана, то генератор случайных чисел модели будет всегда инициализироваться одним и тем же начальным числом (оно задается в поле Начальное число), поэтому все запуски модели будут идентичными и воспроизводимыми.
Нестандартный генератор (подкласс класса Random) — Если по каким-либо причинам вас не устраивает качество стандартного генератора Random, то вы можете использовать вместо него ваш собственный ГСЧ. Для этого создайте его (это должен быть подкласс Java класса Random, например, MyRandom), выберите данную опцию и введите выражение, возвращающее экземпляр класса вашего ГСЧ, в расположенном справа поле, например: new MyRandom() или new MyRandom( 1234 ). Подробнее см. здесь. - Окно
-
Свойства, расположенные на странице Окно, отвечают за внешний вид и настройки окна модели, которое отображается при запуске эксперимента. Обратите внимание, что размеры окна модели задаются с помощью объекта Рамка и являются общими для всех типов агентов и экспериментов вашей модели.
Заголовок — Заголовок, который будет показан в окне презентации.
Разрешить изменение масштаба и перетаскивание — Если опция выбрана, то пользователь сможет изменять масштаб содержимого окна презентации во время моделирования и перемещать холст окна презентации с помощью мыши (перемещая мышь с нажатой правой кнопкой).
Панель разработчика — Если опция выбрана, панель разработчика будет доступна в окне модели.
Показать панель разработчика при старте модели — [Параметр доступен, если выбрана опция Панель разработчика] Если опция выбрана, панель разработчика будет по умолчанию отображаться в окне модели при каждом запуске эксперимента.
- Действия Java
-
Код инициализации эксперимента — Код инициализации эксперимента, который выполняется, когда эксперимент и его интерфейс уже созданы.
Действие перед запуском каждого эксперимента — Код, который выполняется перед запуском каждого эксперимента.
Действие перед "прогоном" модели — Код, выполняемый перед каждым «прогоном» модели. Этот код запускается при инициализации модели. К этому моменту корневой объект модели уже создан, но модель еще не запущена. Здесь вы можете выполнять действия с элементами агента верхнего уровня, например, присвоить другие значения его параметрам.
Действие после "прогона" модели — Код, выполняемый после каждого «прогона» модели. Этот код выполняется, когда исполняющий модуль завершает выполнение модели (вызывается метод Engine.finished()). Этот код не выполняется, если вы останавливаете модель с помощью кнопки Прекратить выполнение.
- Java для экспертов
-
Импорт — Выражения импорта import, необходимые для успешной компиляции кода класса эксперимента. Во время генерации Java кода эти выражения вставляются перед строкой объявления Java класса эксперимента.
Дополнительный код класса — Здесь вы можете объявить какие-то служебные переменные кода, вложенные классы, константы и методы. Этот код будет вставлен в объявление класса эксперимента. Все объявленные здесь члены класса будут доступны из кода эксперимента.
Аргументы Java машины — [Параметр приложения] Задайте здесь аргументы Java машины, которые будут применяться при запуске модели. Подробное описание возможных аргументов дано на сайте Oracle: https://docs.oracle.com/en/java/javase/11/tools/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: если аргументов нет, возвращает пустой массив.
Эту функцию нельзя вызывать из значений статических переменных: такие переменные инициализируются раньше, чем класс эксперимента.
-
Как мы можем улучшить эту статью?
-