之前我正在使用ABM模型,现在正在转向将其投入生产环境(将其嵌入到在线平台系统中)。
为了做到这一点,我有两个重要目标要实现:
如何以聚合的方式打包并分发模型及相关文件给其他人,最好是作为一个单独的 jar 文件,以便其他程序在需要时可以轻松自动调用该文件来运行模拟。首选以 headless 模式运行模型。调用和运行模型时应避免弹出就餐GUI控制窗口。 BTW:当前版本的模型不需要同时批量运行不同场景,只需每次运行一次。
如何完全或至少部分隐藏/混淆模型的源代码,以保护我与模型本身相关的知识产权。
最佳答案
对于 1,这并不理想,但您基本上可以模仿单个批处理运行的操作。它不是单个 jar 解决方案,但它肯定是进行单个 headless 运行的最简单方法。所以,
- 使用批量运行 GUI 创建complete_model.jar(单击“为批量运行创建模型存档”按钮,右侧第二个按钮)。这将创建一个 jar 文件,其中包含运行模型所需的所有内容。
- 创建一个目录,complete_model.jar 将解压到其中。
- 将complete_model.jar复制到该目录。
- 使用 jar -xf 提取该 jar 或直接解压缩它。
- 在提取模型的目录中创建一个“实例”目录
完成所有这些后,您应该能够使用 shell 脚本使用 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 文件应为单行,其中包含以下格式的模型参数:R\tP1\tV1,P2\tV2,...
其中 R 是运行编号(即 1 ), '\t' 是制表符,P1 是第一个参数的名称,V1 是第一个参数的值,依此类推。
有关 InstanceRunner 参数的更多信息:
您向人们提供的是顶级目录的压缩副本,并且可以通过执行 shell 脚本来运行模型。就像我说的,它并不理想,但它是我能想到的唯一 headless 解决方案。
关于java - Repast - 将模型打包并分发为 jar,无需 GUI 和源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65336687/