2

我正在尝试使用 Java API 在 NetLogo 中获取海龟的坐标。我设法加载了工作区,并一直在使用我制作的以下代码:

public static int getX(HeadlessWorkspace workspace, String playerName, int agentNum)
{

    Double doubleX = null;
    int xVal = 0;
    try
    {
        xVal = doubleX.valueOf((workspace.report("[xcor] of "+playerName+" "+agentNum).toString()).trim()).intValue();
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    return xVal;
}

但是,有一个小问题。超过 5 只海龟时,速度非常慢。当我用 200 只海龟运行植绒代码时,没有得到坐标,那么我在 10 秒内得到了大约 300 个滴答声。当我使用坐标运行代码时,每个刻度大约需要 3 秒。有没有更有效的方法来实现这一目标?

谢谢,

纳迪姆

4

2 回答 2

4

我设法找出正确的方法应该是什么。这是 Seth Tisue 给出的 NetLogo 邮件列表中的代码。

import org.nlogo.headless.*;
import org.nlogo.api.*;
class J {
   public static void main(String[] args) {
      try {
         HeadlessWorkspace ws = HeadlessWorkspace.newInstance();
         ws.openString(org.nlogo.util.Utils.url2String("/system/empty.nlogo"));
         ws.command("cro 8 [ fd 5 ]");
         org.nlogo.api.Turtle turtle =(org.nlogo.api.Turtle) ws.world().turtles().agent(3);
         System.out.println("[xcor] of turtle 3 = " + turtle.xcor());
         ws.dispose();
      }
      catch(Exception ex) {
         ex.printStackTrace();
      }
   }
}

我在这里复制了代码,因此它可能会使其他人受益。要查看可以从 Turtle 获得的信息列表,请查看 NetLogo API 文档。

纳迪姆

于 2010-07-23T09:17:48.053 回答
1

因此,您使用 Java API 只是为了获得

[xcor] of "bob" 10

我很迷茫。

我可以告诉您,上面的 workspace.report() 调用非常昂贵,因为您要求 netlogo 解析然后评估您创建的表达式,然后将其解析为整数以传回 netlogo。

将所有玩家存储在列表或地图中并通过列表中的索引引用它们似乎要容易得多。也就是说,我认为您不需要使用 API 来做您似乎正在做的事情。

于 2010-07-22T13:02:50.433 回答