Repast - 将模型打包并分发为 jar,无需 GUI 和源代码

Repast - Pack and distribute the model as jar without GUI and source code

之前在做一个ABM模型,现在转入生产环境(嵌入在线平台系统)。

为了做到这一点,我有两个重要的目标要实现:

  1. 如何将模型和相关文件以聚合的方式打包并分发给其他人,最好是作为一个单独的 jar 文件,其他程序可以轻松自动地调用它 运行 需要的时候模拟。 运行 无头模式下的模型是首选。在调用和 运行 模型时应避免弹出 REPAST GUI 控件 window。 BTW:the当前版本的模型不需要同时批量运行个不同的场景,每次只需要一个运行。

  2. 如何 hide/obfuscate 完整或至少部分模型的源代码,以确保我的知识 属性 与模型本身相关联。

对于 1,这并不理想,但您基本上可以模仿单个批次 运行 的作用。它不是一个单一的 jar 解决方案,但它肯定是做一个单一的 headless 运行 的最简单的方法。所以,

  1. 使用批处理 运行 GUI 创建 complete_model.jar(单击“为批处理 运行 创建模型存档”按钮,右起第二个按钮)。这将创建一个 jar 文件,其中包含 运行 模型所需的一切。
  2. 创建一个目录,complete_model.jar 将解压到该目录。
  3. 将 complete_model.jar 复制到该目录。
  4. 使用 jar -xf 提取该 jar 或直接解压它。
  5. 在您提取模型的目录中创建一个“实例”目录

有了所有这些,您应该能够 运行 使用 repast.simphony.batch.InstanceRunner 作为主要 class 的模型,使用 shell 脚本。在 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 文件应该是单行格式的模型参数:R\tP1\tV1,P2\tV2,... 其中 R 是 运行 数字(即 1),'\t' 是一个选项卡,P1是第一个参数的名称,V1是第一个参数的值等等。

在此处了解有关 InstanceRunner 参数的更多信息:

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

您提供给人们的是顶层目录的压缩副本,并且可以通过执行您的 shell 脚本来 运行 模型。正如我所说,它并不理想,但它是我能想到的唯一无头解决方案。