Запуск модели AnyLogic из внешнего приложения

AnyLogic предлагает в распоряжение пользователей простой механизм встраивания моделей AnyLogic в сторонние Java приложения.

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

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

Обучающая модель: Launching AnyLogic Model from External Application

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

Модель содержит:

Откройте код класса MyApplication, сделав двойной щелчок по этому классу в панели Проекты. Вы увидите следующий код:

Метод System.out.println() просто выводит информацию о ходе моделирования, нам же нужно обратить пристальное внимание всего на несколько строк кода.

Прежде всего - на строку: 

final Simulation s = new Simulation();

Здесь вызывается конструктор простого эксперимента Simulation. Пожалуйста, обратите внимание, что Simulation - это имя простого эксперимента в этой конкретной модели, а не имя базового класса для всех простых экспериментов в AnyLogic. Если бы эксперимент назывался MyExperiment, нужно было бы вызвать конструктор MyExperiment s = new MyExperiment();

Далее мы вызываем конструктор для создания хост-объекта для простого эксперимента:

IExperimentHost host = new ExperimentHost( s );

Затем обратите внимание на следующие функции:

s.setup(host);

host.launch();

Функция эксперимента setup() выполняет инициализацию простого эксперимента. В качестве аргумента этой функции передается ранее созданный хост-объект.

Функция launch() создает окно презентации модели и затем сразу же возвращает управление основному исполняемому потоку приложения.

Ну и наконец, интерес представляет функция эксперимента runTheModel(). эта функция объявлена прямо в модели, на диаграмме простого эксперимента. Она запускает модель и показывает в окне презентации презентацию корневого типа агентов модели.

Обратите внимание, что ваше приложение может задавать значения для параметров модели - они доступны в коде как поля эксперимента, по их именам. В нашем примере строка s.Fraction=0.012345; задает значение 0.012345 переменной Fraction.  

 Чтобы проверить, как работает этот сценарий интегрирования

  1. Откройте указанный пример модели и экспортируйте его как отдельное приложение.
  2. Измените bat/sh/cmd файл, заменив имя класса с Simulation на MyApplication.
  3. Запустите bat/sh/cmd файл.

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

 Чтобы использовать описанный механизм в вашем приложении

  1. Прежде всего, экспортируйте модель как отдельное приложение (мы рекомендуем экспортировать модель сразу в ту папку, где находится ваш Java проект).

  2. Добавьте .jar файлы, созданные при экспорте модели, в ваш Java проект. Для этого предварительно обновите информацию в дереве проекта, щелкнув правой кнопкой мыши по проекту  в дереве и выбрав пункт контекстного меню Refresh.

  1. Вы увидите новые файлы в дереве проекта.

  2. Выделите скомпилированный .jar файл модели (model.jar) и выберите команду Build path > Add to build path из контекстного меню. Нет необходимости добавлять bat/cmd/sh файлы, используемые для запуска автономного приложения и совершенно не нужные в нашем Java проекте.

  3. Таким же способом добавьте .jar файлы библиотек, необходимые для успешного построения модели. Папки, в которых находятся эти файлы, выделены красным на изображении ниже. Разверните каждую из этих папок в Package Explorer и добавьте все хранящиеся в них jar. файлы в ваш Java проект.


  1. Импортируйте в класс вашего проекта пакет, необходимый для конфигурации модельного приложения, написав в самом начале кода класса строку:

    import com.anylogic.engine.gui.*;

    Обратите внимание, что вводя код в среде Eclipse, вы можете пользоваться уже привычным Мастером подстановки кода, появляющимся по нажатию комбинации клавиш Ctrl+пробел (Mac OS: Alt+пробел).

  2. Далее импортируйте пакет, содержащий классы модели, написав следующую строку:

    import <имя_пакета_модели>.*;

    (Имя пакета модели можно узнать в AnyLogic, зайдя в секцию Специфические свойств модели)

    В нашем конкретном случае нужно написать

    import launching_model.*;

    Код класса вашего проекта должен выглядеть следующим образом:


  3. Теперь вы можете ссылаться в коде классов вашего проекта на классы модели. Самый простой способ реализовать предложенное в модели решение - просто скопировать код метода  main() из класса модели MyApplication в класс вашего Java проекта:

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

Информация о ходе моделирования будет выводиться в панель Eclipse Консоль.


См. также

 Встраивание моделей AnyLogic в сторонние Java приложения

 Запуск модели без окна презентации из стороннего приложения