Netlogo Api 控制器 - 获取 Table 视图

Netlogo Api Controller - Get Table View

我正在使用 Netlogo Api 带有 spring 引导的控制器 这是我的代码(我从这个 link 得到的)

HeadlessWorkspace workspace = HeadlessWorkspace.newInstance();
        try {
             workspace.open("models/Residential_Solar_PV_Adoption.nlogo",true);

             workspace.command("set number-of-residences 900");
             workspace.command("set %-similar-wanted 7");
             workspace.command("set count-years-simulated 14");
             workspace.command("set number-of-residences 500");
             workspace.command("set carbon-tax 13.7");
             workspace.command("setup");
             workspace.command("repeat 10 [ go ]");
             workspace.command("reset-ticks");
             workspace.dispose();

             workspace.dispose();
        }
        catch(Exception ex) {
                  ex.printStackTrace();
        }

我在控制台中得到了这个结果:

但我想获取 table 视图并保存到数据库。我可以使用哪个命令来获取 table 视图?

Table 视图:

有什么帮助吗?

如果你能弄清楚为什么要尝试以这种方式生成数据,我或其他人可能会给出更好的建议。

没有单独的 NetLogo 命令或 NetLogo API 方法来生成 table,您必须使用 BehaviorSpace 来获取它。这里有一些选项,按照从简单到最难的粗略顺序列出。

选项 1

如果可能,我建议仅从命令行 运行ning BehaviorSpace 实验来生成您的 table。这将为您提供与您正在寻找的完全相同的输出。您可以在 the NetLogo manual's BehaviorSpace guide 中找到有关如何执行此操作的信息。如有必要,您可以从 Java 程序中的命令行 运行 NetLogo headless,只需查找有关从 Java 调用外部程序的资源,也许 ProcessBuilder .

如果您 运行 在 Java 中设置和更改 BehaviorSpace 实验的参数,而您无法在程序中执行此操作,则可以改为生成实验 Java 中的 XML 个文件以在命令行传递给 NetLogo。参见 the docs on the XML format

选项 2

您可以在模型中使用 CSV 扩展名重新创建 table 的内容,并添加更多命令来生成数据。这不会创建完全相同的 table,但它会以计算机和人类可读的格式输出数据。

在纯 NetLogo 代码中,您需要类似下面的内容。请注意,您可以通过在 运行ning setupgo 之前 运行ning 其他预实验命令来控制更多行为(如文件名或所需变量) Java 代码。您还可以使用控制 API 运行 来自 Java 的 CSV 特定文件代码并保持模型不变,但您需要编写自己的 [= 的 NetLogo 代码版本14=]原始。

globals [
  ;; your model globals here

  output-variables
]

to setup
  clear-all

  ;;; your model setup code here

  file-open "my-output.csv"
  ; the given variables should be valid reporters for the NetLogo model
  set output-variables [ "ticks" "current-price" "number-of-residences" "count-years-simulated" "solar-PV-cost" "%-lows" "k" ]
  file-print csv:to-row output-variables

  reset-ticks
end

to go
  ;;; the rest of your model code here

  file-print csv:to-row map [ v -> runresult v ] output-variables
  file-flush
  tick
end

选项 3

如果您确实需要准确地重现 BehaviorSpace table 导出,您可以尝试 运行 直接从 Java 进行 BehaviorSpace 实验。 table 生成 by this code 但正如您所看到的,它与 LabProtocol class 绑定在一起,这意味着您必须通过以下方式设置和 运行 您的模型BehaviorSpace 而不是像您在示例代码中那样逐步使用工作区。

一个很好的例子可能是 the Main.scala object,它从预期的命令行参数中提取一些实验设置,然后将它们与 lab.run() 方法一起用于 运行 BehaviorSpace 实验并生成输出。那是 Scala 代码而不是 Java,但希望它不会太难翻译。您同样必须设置一个 org.nlogo.nvm.LabInterface.Settings 实例并将其传递给 HeadlessWorkspace.newLab.run() 才能让事情顺利进行。