分类: Java
2007-05-15 11:01:11
Goal在Agent程序语言中是很重要的概念,Agent的主动性,反应性,自治性和社会能力都与goal有关联。在很多Agent系统中,goal都是一个核心的概念,比如3APL,KAOS,Tropos。goal已经成为活动(actions)和推理(reasoning)之间的纽带。活动是为了获取特定的goal而执行的,goal发生改变的时候活动也会相应发生改变。
Jadex中提供了4种goal作为触发机制(根据goal的当前行为分类).
Perform goal:只是指明某些活动需要执行,输出结果只依赖与活动是否被执行。执行了就是succeeded,如果在系统上下文中没有适用的规划需要执行,则为failed。一个perform goal有一预先定义好的状态,由这一状态来触发规划选择和执行机制,当规划执行完毕后,这一状态就无用了。
Achive goal :最常用的,用来达到某些特定的状态。比Perform goal多了target 和Failure条件。给定target条件,此goal被激活执行,某些plans被选入,在执行阶段,只要target条件变为成功或者说到达了目标状态,则所有活动被终止。Failure条件帮助结束绝对不会到达的目标。去掉了target和failure条件的achive goal与perform goal不同的是,achive执行第一个plan后便成功,而perform则会继续执行下面的plan,直到指定的plans都执行完毕才成功。
Query goal:信息检索,向Agent查询特定的信息。比如cleaner要找到哪些地方有垃圾。如果Agent没有足够知识回答,则立即回答,这个goal便成功了。否则,实用的plan便会试图搜集需要的信息。Query goal是一类特定的achive goal,两者不同的是query goal必须要有一个返回结果。
Maintain goal:条件不满足时调用某个plan执行,比如要保持核反应堆的温度。Maintanance goals初始化便是true,如果他变为false,则系统会采取某些活动使之变为true,于是此类goals便成为了一个触发器,也就是说当他变为false时,才会有活动发生。如图,maintain goal一般处于空闲状态(实际上在监控),当maintain条件不满足了,才会激活相应的plan去执行,成功后依然返回到空闲状态。如果处理过程失败,没有合适的plan,则系统到达unmaintainable 状态,如果不能Agent不能确定当前处理过程是否会成功,则到达unknown状态。
附录:常用的goal属性(BDI flags):
Name |
Default |
Possible Value |
retry |
true |
{ true, false} |
retrydelay |
0 |
positive long value |
recur |
false |
{ true, false} (for maintain goals only) |
recurdelay |
0 |
positive long value (for maintain goals only) |
exclude |
"when_tried" |
{"when_tried","when_succeeded",when_failed", "never"} |
posttoall |
false |
{ true, false} |
randomselection |
false |
{ true, false} |
metalevelreasoning |
true |
{ true, false} |