2010-07-19 5 views
2

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

Спасибо,

Надим

ответ

4

Мне удалось выяснить, каким должен быть правильный путь. Это код в списке рассылки NetLogo, как указано Seth Tisue.

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.

Надим

1

Таким образом, вы используете API Java, чтобы убедиться, что вы можете получить

[xcor] of "bob" 10 

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

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

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

+0

Привет jmvidal, Я пишу программу в Java, что делает использование NetLogo сделать обработку, и, таким образом, мне нужно было использовать API Java. Я не мог найти простой способ использования API, и я нашел это обходное решение. К сожалению, как вы правильно упоминали, это дорогостоящее обходное решение. Мне удалось выяснить, как сделать код и воспроизвести его ниже. Thanks, Nadim – Nadim

Смежные вопросы