Использование NetLogo API для получения координат черепахи - PullRequest
2 голосов
/ 19 июля 2010

Я пытаюсь получить координаты для черепах в NetLogo с помощью Java API.Мне удалось загрузить рабочее пространство, и я использовал следующий код, который я сделал:

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 черепах.Когда я запускаю код Flocking с 200 черепахами, не получая координат, я получаю около 300 тиков за 10 секунд.Когда я запускаю код с координатами, то каждый тик занимает около 3 секунд.Есть ли более эффективный способ достижения этого?

Спасибо,

Надим

Ответы [ 2 ]

4 голосов
/ 23 июля 2010

Мне удалось выяснить, каким должен быть правильный путь.Это код в списке рассылки 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.

Nadim

1 голос
/ 22 июля 2010

Итак, вы используете Java API только для того, чтобы получить

[xcor] of "bob" 10

Я очень смущен.

Я могу вам сказать, что ваш вызов workspace.report () выше очень дорогой, так как вы просите netlogo проанализировать, затем оценить созданное вами выражение, а затем проанализировать его в целое число для передачи обратно в netlogo.

Кажется, было бы намного проще просто сохранить всех игроков в списке или на карте и ссылаться на них по их индексу в списке. То есть я не думаю, что вам нужно использовать API, чтобы делать то, что вы делаете.

...