我正在按照说明测试从另一个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);

repast-simphony - Repast-从不带GUI的Java程序进行调用模拟-LMLPHP

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

其次,我需要在远程服务器(Linux)上部署仿真模型。服务器调用模拟模型的最佳方法是什么?如果是HTTP,随后如何执行配置?模型的运行方式最好是批处理方式(一次运行还是多次运行,具体取决于用户的选择)。批处理运行的输出需要转换为JSON格式以反馈给服务器。

最佳答案

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

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类具有用于通过SSH在远程资源上执行命令的代码,用于复制文件的方法等。因此,也许对您有用。

10-04 23:00