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

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

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

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

Обучающая модель: Running the Model from Outside Without Presentation Window

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

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

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


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

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

CustomExperiment ex = new CustomExperiment(null); 

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

С помощью единственного аргумента конструктора передается родительский элемент для этого эксперимента. Если вы создаете этот нестандартный эксперимент в коде простого экспермента, то нужно передать в качестве значения этого аргумента этот простой эксперимент.  

Далее обратите внимание на строку: 

ex.run(); 

Таким образом запускается ранее созданный эксперимент. 

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

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

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

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

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

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

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



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

  2. Импортируйте в класс вашего проекта пакет, содержащий классы модели, написав в самом начале кода класса строку:

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

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


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

    import running_model_outside.*;



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

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

Это все, теперь вы можете запустить класс вашего проекта как Java приложение. Вы увидите, что эксперимент модели будет выполнен (информация о ходе моделирования будет выведена в панель Eclipse Console, см. рисунок ниже), но окно презентации модели создаваться и отображаться не будет.


См. также

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

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