AnyLogic
Развернуть
Размер шрифта

Интеграция моделей AnyLogic со сторонними Java приложениями

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

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

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

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

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

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

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

Демо-модель: Launching AnyLogic Model from External Application Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

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

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

  • Тип агента Main, задающий логику модели.
  • Простой эксперимент Simulation. Запуская этот эксперимент из AnyLogic, вы запускаете модель так, что создается и показывается окно ее презентации. Мы хотим запустить модель так же, но из внешнего приложения.
  • Java класс MyApplication. Он играет роль внешнего Java приложения и содержит код, который должно содержать приложение для запуска простого эксперимента модели AnyLogic, с созданием и отображением окна презентации модели.

Откройте код класса 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.

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

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

  6. Импортируйте в класс вашего проекта пакет, необходимый для конфигурации модельного приложения, написав в самом начале кода класса строку:
    import com.anylogic.engine.gui.*;

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

  7. Далее импортируйте пакет, содержащий классы модели, написав следующую строку:
    import <имя_пакета_модели>.*;

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

    В нашем конкретном случае нужно написать import launching_model.*;

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

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

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

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

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

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

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

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

Демо-модель: Running the Model from Outside Without Presentation Window Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

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

Модель содержит:
  • Тип агента Main, задающий логику модели. В модели есть один параметр, также эта модель возвращает результат моделирования.
  • Нестандартный эксперимент CustomExperiment. Запустив этот эксперимент в AnyLogic, вы запустите модель так, что окно презентации модели создаваться не будет. Мы хотим запустить модель так же, но из внешнего приложения.
  • Java класс MyApplication. Он играет роль внешнего Java приложения и содержит минимальный код, который должно содержать приложение для запуска нестандартного эксперимента модели AnyLogic.

Откройте код класса 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.

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

  6. Импортируйте в класс вашего проекта пакет, содержащий классы модели, написав в самом начале кода класса строку:
    import <имя_пакета_модели>.*;

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

    В нашем конкретном случае нужно написать import running_model_outside.*;:

    Обратите внимание, что вводя код в среде Eclipse, вы можете пользоваться уже привычным Мастером подстановки кода, появляющимся по нажатию комбинации клавиш Ctrl + Пробел (macOS: Alt + Пробел).
  7. Теперь вы можете ссылаться в коде классов вашего проекта на классы модели. Самый простой способ реализовать предложенное в модели решение — просто скопировать код метода main() из класса модели MyApplication в класс вашего Java проекта:

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

Как мы можем улучшить эту статью?