JADE - 两个代理之间的并行行为不起作用

时间:2017-10-01 13:59:09

标签: java agents-jade

我试图通过遵循here提供的程序在两个代理之间实现并行性 我得到的输出(如下所示)与预期完全不同。

程序在执行操作期间打印代理的名称和当前系统时间。我尝试在两个代理中执行并行操作,其中每个代理程序应该打印自己的名称和当前时间,但只有后两个代理程序正在执行其操作。

  

javac test.java
     java jade.Boot -agents aaa:test ccc:test
     ....
     代理容器Main-Container@192.168.122.1准备就绪。

     

100:ccc
     200:ccc
     300:ccc
     400:ccc
     500:ccc
  

这是我实施的代码

import jade.core.Agent;
import jade.core.behaviours.*;

public class test extends Agent{

protected void setup(){
addBehaviour(new Looper(this,100));
}

}

class Looper extends SimpleBehaviour
{
    static String offset = "";
    static long   t0     = System.currentTimeMillis();

    String tab = "" ;
    int    n   = 1;
    long   dt;

    public Looper( Agent a, long dt) {
            super(a);
            this.dt = dt;
            offset += "    " ;
            tab = new String(offset) ;
    }

    public void action()
    {
            System.out.println( tab +
               (System.currentTimeMillis()-t0)/10*10 + ": " +
                    myAgent.getLocalName() );
            block( dt );
            n++;
    }

    public  boolean done() {  return n>6;  }

}

预期产量:

  

java jade.Boot aa:Agent1 zzzzz:Agent1

     

0:zzzzz
                 0:aa
             10:zzzzz
                     10:aa
         300:zzzzz
                 310:aa
             510:zzzzz
                     510:aa
         610:zzzzz
                 610:aa
         910:zzzzz
                 920:aa
             1020:zzzzz
                     1020:aa
         1220:zzzzz
                 1220:aa
         1520:zzzzz
                 1520:aa
             1520:zzzzz
                     1530:aa
             2030:zzzzz
                     2030:aa
             2530:zzzzz
                     2530:aa

1 个答案:

答案 0 :(得分:1)

关于" -agents"选项,它是以分号分隔的代理程序说明符列表。您可以替换为:

java -cp jade.Boot -agents "aaa:test;ccc:test"

或指定classpath:

java -cp /home/myusername/jadelibpath/libjade-4.3.jar:. jade.Boot -agents "aaa:test;ccc:test"