在玉器中创建代理数组

时间:2014-11-15 10:21:49

标签: java agent agents-jade

早上好,我想创建一个包含代理的多个实例的数组(许多具有相同行为的代理),所以我使用netbeans首先创建一个代理管理,创建其他代理并绘制一个圆圈代表框架中的每个代理。这是主代理的代码:

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编程,如果有人可以帮助我,我将非常高兴。

2 个答案:

答案 0 :(得分: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);

第一个字段是代理实例的名称 第二个字段是代理类

答案 1 :(得分:0)

您无法调用代理“代理”,因为是另一个类的名称,即您的代理继承的根类。

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

这应该可以正常工作。

另一个评论;代理不需要也没有'main()'方法,因为它们是以你刚才看到的另一种方式创建的。