一、Behavior
所有的方法都在setup中添加,这对于一个简单的HelloWorld来说是适合的,但当Agent的有着复杂的行为时,setup就无法满足需求了,更重要的时,将所有的行为都放在setup中,会造成逻辑混乱。
一个更好的方法时将Agent所有的任务或动作定义为Behaviour类,将Agent应该执行的动作(action)作为Behaviour的方法。这里注意到,Behaviour是Agent的一个内部类,而action是内部类Behavior中的一个方法。接下来可以生成Behaviour的实例,并将之添加到Agent对象中。
JADE将基本的Behaviour分为3类:
1. "One-Shot" 行为,它的动作只执行一次;OneShotBehaviour()
2. "Cyclic" 行为, 它每次执行同样的动作;CyclicBehaviour()
3. "Generic" 行为,当外界状态满足条件时,动作执行。
下面的图给出Agent行为执行的路径。b.action()定义了行为的动作,b.done()定义行为是否执行完毕。这两者都是可以由用户进行扩展的。对于Cyclic行为,其done()方法返回值总是为false,所以总是能够循环执行,而One-Shot行为,其done()方法返回值为true,执行一次之后便不在执行。
另外,通过对上述三种行为的组合,可以完成更为复杂的任务。
二、ACL(agent communication language)
Jade的agent之间进行通信使用的acl语言遵循fipa acl规范。一个acl消息通常包含这些参数:
sender:消息的发送者,用agent标志AID表示;
receivers: 接受agent消息的agent可以是多个;
Reply-to: 应受到回应的接受者;
Performative:标志该消息的目的,即发送者想要通过发送消息获取什么,通常有这样一些常值:REQUEST, INFORM, ACCEPT_PROPOSAL, REJECT_PROPOSAL, PROPOSE;
Content: 消息的内容、语言,比如内容的编码格式;
ontology:双方都能够理解的消息内容的概念说明和语义描述。