4

我正在按照说明测试从另一个 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 程序将很快终止而不运行并且不返回任何内容:

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

在此处输入图像描述

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


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

4

1 回答 1

4

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

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

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

最终,虽然批处理运行代码调用了 InstanceRunner:

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

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

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

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

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

于 2020-01-06T14:38:04.430 回答