2014-11-15 3 views
1

Доброе утро, я хотел бы создать массив, содержащий несколько экземпляров агента (многие агенты, которые имеют одинаковое поведение), поэтому я использовал netbeans для создания во-первых управления агентами, которые создают других агентов и нарисуйте круг, представляющий каждый агент в кадре. это код для главного агента:создать массив агентов в jade

package jade; 

/** 
* 
* @author walid 
*/ 
import jade.core.Agent; 
import jade.core.Runtime; 
import jade.core.ProfileImpl; 
import jade.wrapper.*; 
import javax.swing.JFrame; 
import java.awt.Dimension; 
import java.awt.Toolkit; 

import java.util.logging.Level; 
import java.util.logging.Logger; 
import jade.Agent1; 
public class AgentEnvironement extends Agent{ 
    private JFrame jFrame = null; 
    private Agent1 []tab;  
    @Override 
      protected void setup() { 
     try { 
      getJFrame().setVisible(true); 
     } catch (StaleProxyException ex) { 
      Logger.getLogger(AgentEnvironement.class.getName()).log(Level.SEVERE, null, ex); 
     } 
}   

public JFrame getJFrame() throws StaleProxyException { 
     if (jFrame == null) { 
     jFrame = new JFrame(); 
     jFrame.setSize(new java.awt.Dimension(500,350)); 
     Dimension tailleEcran =Toolkit.getDefaultToolkit().getScreenSize(); 
     int largeurEcran = tailleEcran.width; 
     int hauteurEcran = tailleEcran.height; 
     jFrame.setLocation((largeurEcran-500)/2,(hauteurEcran-350)/2); 
     jFrame.setTitle("Environement des agents rumeurs."); 
     jFrame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);     
     //jFrame.setContentPane(getJContentPane()); 
       Runtime rt = Runtime.instance(); 
     // Création du profil par défault 
    ProfileImpl p = new ProfileImpl(false); 
    AgentContainer container =rt.createMainContainer(p); 
     // Agent controleur pour permettre la création des agents 
    AgentController Agent=null; 
     Agent = container.createNewAgent("Agent1", "jade.Agent1", null); 
    Agent.start();  
    } 
    return jFrame; 
} 
} 

и этот код для класса агента, который я хотел бы создать много экземпляра его пакет нефрита;

import jade.core.AID; 
import jade.core.Agent; 
import jade.core.behaviours.CyclicBehaviour; 
import jade.lang.acl.ACLMessage; 


/** 
* 
* @author walid 
*/ 
public class Agent1 extends Agent { 

    /** 
    */ 
    @Override 
    public void setup() { 
addBehaviour(new comportement()); 
} 
class comportement extends CyclicBehaviour { 
public void action() { 
System.out.println ("ready"); 
} 
} 


    public static void main(String[] args) { 

    } 

} 

честно, я не очень хорошо разбираюсь в программировании на Java, и если кто-то может мне помочь, я буду очень доволен.

ответ

1

Создать массив агентов ???? Я не уверен, что это значит, но если вы хотите создать несколько агентов, используйте цикл for и счетчик, чтобы увеличить имя.

for (agentcounter=1;agentcounter++;agentcounter<agentmax) 
{ 
     Agent = container.createNewAgent("Agent"+agentcounter, "jade.Agent1", null); 
} 

это должно создать несколько агентов типа jade.Agent1 например, для agentmax = 10

Agent1 (тип jade.Agent1)

agent2 (тип jade.Agent1)

Agent3 (Тип jade.Agent1)

....

Agent10 (тип jade.Agent1)

Обратите внимание, что в

Agent = container.createNewAgent("Agent"+agentcounter, "jade.AgentClass", null); 

Первое поле это имя экземпляра агента Второе поле является класс агент

0

Вы не можете позвонить агент «Агент», потому что это имя другого класса, корневой класс, на который наследуются ваши агенты.

AgentController anotherName=null; 
    anotherName = container.createNewAgent("Agent1", "jade.Agent1", null); 
    anotherName.start();  

Это должно работать нормально.

Другой комментарий; Агенты не нужны и не имеют метода «main()», потому что они создаются по-другому, как вы только что видели.