Repast - 在没有 GUI 的情况下从 java 程序调用模拟

Repast - call simulation from java program without GUI

我正在按照说明测试从另一个 java 程序调用我的仿真模型。

package test;

//import repast.simphony.runtime.RepastMain;

public class UserMain {

public UserMain(){};

  public void start(){

    String[] args = new String[]{"D:\user\Repast_java\IntraCity_Simulator\IntraCity_Simulator.rs"};

    repast.simphony.runtime.RepastMain.main(args);
//    repast.simphony.runtime.RepastBatchMain.main(args);
  }

  public static void main(String[] args) {

    UserMain um = new UserMain();
    um.start();
  }
}

java 程序将使用 RepastMain 配置启动 GUI:

repast.simphony.runtime.RepastMain.main(args);

如果我应用非 GUI 配置,java 程序将在没有 运行ning 且不返回任何内容的情况下很快终止:

repast.simphony.runtime.RepastBatchMain.main(args);

如何在无头模式下启用模拟的 运行ning?


其次,我需要在远程服务器 (Linux) 上部署我的仿真模型。服务器调用我的仿真模型的最佳方式是什么?如果是HTTP,后续如何配置?模型的 运行 宁优选批处理 运行 方法(单个 运行 或多个 运行 取决于用户选择)。批量运行输出需要转成JSON格式反馈给服务器

Simphony 的部分批处理 运行 机制或许可以用于此。有关无头命令行批处理 运行s 的一些上下文,请参阅:

https://repast.github.io/docs/RepastBatchRunsGettingStarted.pdf

考虑到您将模拟 运行 嵌入到其他 java 代码中,这与您尝试做的事情不完全一致,但作为背景应该有所帮助。

最终,尽管批处理 运行 代码调用了 InstanceRunner:

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

InstanceRunner 遍历文件中的参数集列表或直接传递给它的参数集字符串,然后对每个参数集执行模拟 运行。如果您将单个参数集传递给它,它将 运行 一次,我认为这就是您想要做的。因此,我建议查看 InstanceRunner 代码以了解其工作原理,并在调用模拟的代码中模仿 InstanceRunner.main() 。

至于远程执行,Simphony 可以将模拟复制到远程资源,运行 并将结果复制回来。它与 Simphony GUI 集成在一起,因此如果您不做一些工作,就无法从其他代码中调用它。所有相关代码都在:

https://github.com/Repast/repast.simphony/tree/master/repast.simphony.distributed.batch/src/repast/simphony/batch

SSHSession class 包含通过 SSH 在远程资源上执行命令的代码、复制文件的方法等。所以,也许这对你有用。