在Matlab扩展中访问无头NetLogo的命令行参数

时间:2014-05-16 15:06:31

标签: matlab netlogo

我在无头(非gui)模式下运行netlogo的matlab扩展。我已经下载了扩展源,并尝试从扩展中的java代码访问命令行参数。命令行参数存储在LabInterface.Settings中。我希望能够在扩展的Java代码中访问该对象。我已经在这方面工作了几天但却没有成功。似乎扩展过程旨在创建在netlogo中使用的基元。这些原语具有不同netlogo对象的知识,但扩展java代码无法访问它。我将不胜感激任何帮助。

我希望能够在多台机器(可能是通量集群)的批处理模式下运行多个带有不同参数的netlogo-matlab分析。由于批处理性质,我需要无头运行。有时候跑步会在同一台机器上运行,有时会分布在多台机器,助焊器或秃鹰上。我知道netlogo中存在类似的功能,用于在单个会话中运行不同的参数。有没有办法在多台机器上分割这些?

目前,我为netlogo创建了一系列安装文件。每个设置文件代表针对该运行而变化的参数。然后我将每个netlogo - setup文件组合作为单个运行提交。每次运行都可以用于单独的机器或处理器。添加matlab扩展会使这变得复杂。 matlab扩展将它的服务器连接到端口9999.运行多个服务器时,它们都连接到端口9999,这会导致问题。我希望从设置文件名中获取信息,以创建与设置文件名相关联的独立端口号。这样我就可以为每个设置文件创建一个唯一的套接字,从而为每个netlogo运行创建一个唯一的服务器连接。

1 个答案:

答案 0 :(得分:0)

NetLogo没有提供在群集上分发模型运行的工具,但不管怎样,各种人都已经完成了。参见:

以及netlogo-users组中有关它的过去的帖子。没有单一的标准解决方案。

至于访问LabInterface.Settings,在我看来,通过NetLogo源代码查看设置对象实际上并未存储在任何地方。它只是从方法转移到方法,最终转移到lab.Lab.run,而不是实际保留。因此,尝试访问设置文件的名称将无法正常工作。

因此,您需要采用其他方式使扩展程序生成唯一的端口号。在我看来,有很多可能的解决方案。在生成安装文件时,您知道其名称,因此您可以同时生成端口号并将其包含在文件中包含的实验定义中。或者,您可以在启动NetLogo时在Java系统属性中使用端口号(使用-D)。或者,您可以根据JVM进程的进程ID生成端口号。或者您可以使用扩展名尝试端口9999并查看它是否已在使用中,如果已经使用,则尝试使用其他端口号。这只是一些想法......我可能会提出十个想法。