我正在按照说明测试从另一个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格式以反馈给服务器。
最佳答案
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在远程资源上执行命令的代码,用于复制文件的方法等。因此,也许对您有用。