jade中的agent behaviour

来源:互联网 发布:三拼域名成交案例 编辑:程序博客网 时间:2024/06/04 18:26

[JADE]agent任务behaviours

 

JADE中,一个活动的agent相当于一个完成任务的主体,而真正的任务的载体是 behaviour实例。每个Behaviourjade.core.behaviours.Behaviours子类,agent实例通过引用其addBehaviour(behaviour)方法将behaviour加入agent中执行,在agent生命周期中的任何时刻都可以加入behavioursbehaviour中也可以嵌套behaviour

 

每个behaviour必需实现jade.core.behaviours.Behaviours的两个抽象方法:action()done()

Action()方法中为需要实现任务的代码,done()方法返回一个布尔值来判断这个Behaviour是否完成其任务,是否应将其移出其所在的Agent所管理的behaviours(每个agent可同时执行多个beheaviour,这些behaviour之间是相互合作关系)

 

如下所示的OverbearingBehaviour 将永远阻止其它behaviour的执行,因为OverbearingBehaviourdone()返回在永远为真,如图一示;

 

  public class OverbearingBehaviour extends Behaviour{

   public void action(){

     while(true){

      //do something here..

}

}

   public boolean done(){

     return true;

}

}

                              图一

Agent生命周期及任务执行方式图二,需要注意的是,当一个agent没有可以执行的behaviour时,agent对应线程进入休眠状态,以节省CPU资源。

                               图二

 

JADE中三种主要的Behaviour

 

JADE中三种主要的Behaviour: One-shot BehavioursCyclic behavioursGeneric behaviours.

 

One-shot BehavioursOneShotBehaviour类,是jade.core.behaviours.Behaviour的子类,其action()方法只执行一次,done()返回真, 如图三

  Public class MyOneShotBehaviour extends OneShotBehaviour{

Public void  action(){

// perform operation X

}

}

 X只会执行一次;

                              图三

Cyclic behaviours: CyclicBehaviour类,是jade.core.behaviours.Behaviour的子类,其action()方法会不停的执行,直到agent执行behaviour结束,done()方法返回假。

 

Generic behaviours: 即普通的Behaviour, 其执行次数依赖于对象的状态,如图四:

 

 

 

 

 

 

 public ThreeStepBehaviour extends Behaviour{

   private int step=0;

 

   public void action(){

    switch(step){

      case 0:

          System.out.println("step 0");

          step ++;

          break;

      case 1:

          System.out.println("step 1");

          step ++;

          break;

     case 2:

          System.out.println("step 2");

          step ++;

          break;

    }

   }

 

  public boolean done(){

    return step==3;

  }

}

                                 图四

 

ThreeStepBehaviour中的action()方法会执行三次,因为在三次step++后,done()方法才会返回true;

 

每个behaviour都继承了jade.core.behaviours.BehavioursonStart()onEnd()方法,onStart()方法在第一次执行action()前调用,以初始化环境。onEnd方法将在done()方法返回真后调用,以做善后处理。

在任务时候,一个agent都可以调用其removeBehaviour()方法来移除一个任务,一个任务在被移除后,会自动调用其onEnd()方法。

 

一个Agent任务池中的每一个behavior,都会有一个宿主agent的引用,以调用宿主agent的资源。

另外,当任务池中的一个behaviour成功执行后需要重复执行,必先调用behaviourreset()方法,否则会导致错误。

原创粉丝点击