Повторно упаковать и распространить модель как jar без графического интерфейса и исходного кода

#java #agent-based-modeling #repast-simphony

#java #моделирование на основе агентов #repast-simphony

Вопрос:

Ранее я работал с моделью ABM, которая теперь превращается в производственную среду (внедряет ее в систему онлайн-платформы).

Для этого мне нужно достичь двух важных целей:

  1. Как упаковать и распространить модель и вспомогательные файлы другим людям, в агрегированном виде, предпочтительно в виде одного файла jar, который может быть легко и автоматически вызван другой программой для запуска моделирования, когда это необходимо. Предпочтительнее запускать модель в безголовом режиме. При вызове и запуске модели следует избегать всплывающего окна управления графическим интерфейсом repast. Кстати: текущая версия модели не требует одновременных пакетных запусков разных сценариев, каждый раз требуется только один запуск.
  2. Как скрыть / запутать исходный код модели полностью или, по крайней мере, частично, чтобы защитить мою интеллектуальную собственность, связанную с самой моделью.

Ответ №1:

Для 1 это не идеально, но вы могли бы по существу имитировать то, что делает один пакетный запуск. Это не единственное решение для jar, но это, безусловно, самый простой способ выполнить один запуск без головы. Так,

  1. Создайте complete_model.jar использование графического интерфейса пакетного запуска (нажмите кнопку Создать архив модели для пакетных запусков, вторая кнопка справа). Это создает файл jar со всем необходимым для запуска модели.
  2. Создайте каталог, в который complete_model.jar будет расстегнута молния.
  3. Скопируйте complete_model.jar в этот каталог.
  4. Извлеките эту банку с помощью jar -xf или просто разархивируйте ее.
  5. Создайте каталог «instance» в каталоге, из которого вы извлекли модель

Имея все это на месте, вы должны иметь возможность запускать свою модель, используя repast.simphony.batch.InstanceRunner ее в качестве основного класса, используя сценарий оболочки. В macOS этот скрипт будет выглядеть примерно так:

 cd instance
java -cp "../lib/*" repast.simphony.batch.InstanceRunner -pxml ../scenario.rs/batch_params.xml -scenario ../scenario.rs -id 1 -pinput param_line.txt
 

param_line.txt файл должен состоять из одной строки с параметрами вашей модели в этом формате: RtP1tV1,P2tV2,... где R — номер запуска (т.е. 1), ‘ t’ — вкладка, P1 — имя первого параметра, V1 — значение первого параметра и так далее.

Подробнее об аргументах InstanceRunner здесь:

https://github.com/Repast/repast.simphony/blob/master/repast.simphony.distributed .batch/src/repast/simphony/batch/InstanceRunner.java

То, что вы бы дали людям, — это архивированная копия каталога верхнего уровня, и модель может быть запущена путем выполнения вашего сценария оболочки. Как я уже сказал, это не идеально, но это единственное безголовое решение, которое я могу придумать.

Комментарии:

1. Привет, Ник, при успешном применении вышеуказанного метода, каков наилучший способ решения проблемы 2? (сделать исходный код невидимым для других)

2. Я заметил, что папка complete_model фактически не содержит папку src. Является ли этот подход уже автоматическим пропуском исходных кодов модели?