当前位置: 首页 > 知识库问答 >
问题:

Repast——无GUI的java程序调用模拟

汝天宇
2023-03-14

我正在按照说明测试从另一个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格式,以便反馈给服务器。

共有1个答案

冯敏达
2023-03-14

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

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在远程资源上执行命令的代码、复制文件的方法等等。所以,也许这对你有用。

 类似资料:
  • 我试图从另一个java程序调用我的模拟模型。我按照官方指示,获得了如下代码: 没用。我认为这是因为错误的课程路径。如何正确配置它?

  • 在上一章中,我们创建了一个示例RMI应用程序。 在本章中,我们将解释如何创建RMI应用程序,其中客户端调用显示GUI窗口(JavaFX)的方法。 定义远程接口 在这里,我们使用名为animation()的方法定义一个名为Hello的远程接口。 import java.rmi.Remote; import java.rmi.RemoteException; // Creating Remote

  • 我有一个基于代理的模型,它是在Repast中开发的。为了校准模型,我需要运行带有参数列表的模型。并且,使用一些优化算法来寻找最佳参数集(最小化一些损失值)。我想知道如何在就餐辛普森做到这一点。显然,标准的就餐GUI不支持这一点。我试过批量运行,但似乎也不是我想要的。我可以将JAVA代码打包为JAR文件,并从命令行运行它。但是如何让程序在我的Repast/JAVA实现中接受命令行参数呢?

  • 问题内容: 我正在学习Java中的GUI,为此我创建了一个演示程序: 它已成功编译。但是,当我尝试执行程序时,发现以下错误: 我正在使用Xubuntu 10.10并给出: 我该怎么办? 还有一件事:这是我尝试执行Dr. Java和HJSplit的jar文件时遇到的错误。 问题答案: Ubuntu可以选择安装无头Java,这意味着无需图形库。并非总是如此,但是前几天我在尝试运行Java文本编辑器10

  • 我试图为在GUI运行之前下载信息的应用程序编写一个进度条。因为下载和组织信息的过程非常漫长,所以我想通知用户进展情况。我决定在游戏后期使用进度条,因此,大部分代码都是编写的,我正在尝试将进度条合并到代码中,而无需对代码进行剧烈的重新操作。以下是进度条的代码。目前,一切运行完毕,GUI弹出后,进度条就会出现。 该程序最初调用GUI应用程序,然后运行数据库获取代码,如下所示。 swing worker

  • 我正在用SWING用JAVA开发一个图形用户界面应用程序。当我试图从Netbean IDE运行图形用户界面时,我遇到了一个问题,一旦图形用户界面运行,我就无法在界面上点击或做任何事情,换句话说,我无法与用户界面交互。例如,当我尝试按下一个按钮时,它什么也不做,就像冻结一样,但是它不会显示任何错误,你可以正常关闭它(x图标)。这是一张照片 有人知道如何解决这个问题吗? 我用的是Ubuntu 14.0