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

标签 java agent-based-modeling repast-simphony

之前我正在使用ABM模型,现在正在转向将其投入生产环境(将其嵌入到在线平台系统中)。

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

  1. 如何以聚合的方式打包并分发模型及相关文件给其他人,最好是作为一个单独的 jar 文件,以便其他程序在需要时可以轻松自动调用该文件来运行模拟。首选以 headless 模式运行模型。调用和运行模型时应避免弹出就餐GUI控制窗口。 BTW:当前版本的模型不需要同时批量运行不同场景,只需每次运行一次。

  2. 如何完全或至少部分隐藏/混淆模型的源代码,以保护我与模型本身相关的知识产权。

最佳答案

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

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

完成所有这些后,您应该能够使用 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 参数的更多信息:

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

您向人们提供的是顶级目录的压缩副本,并且可以通过执行 shell 脚本来运行模型。就像我说的,它并不理想,但它是我能想到的唯一 headless 解决方案。

关于java - Repast - 将模型打包并分发为 jar,无需 GUI 和源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65336687/

相关文章:

Java 2D 数组,分配的是随机值,而不是应该分配的值

java - 添加 Apache POI 作为外部库后应用程序立即崩溃

java - 线程回调未调用。为什么?

algorithm - Netlogo,创建避障算法

agent-based-modeling - "Multi-agent computing"简单来说

java - 有没有一种简单的方法可以从父类(super class)对象列表创建子类对象列表?

Java 选择排序交换不按预期工作

java - Servlet MultipartConfig 参数

netlogo - 通过 slider 改变正态分布的形状

repast-simphony - 我可以在运行 GUI 中显示parameters.xml 中定义的参数顺序吗?