《关于多代理系统的研究》02

这一篇是学习关于Beliefs的使用。

1.Beliefs的简单说明

一个Agent的Belief集是表示这个Agent对这个世界环境的了解。跟人类一样,知识积累的越多,越会处理世界上发生事情,换句话来说,就是你的适应性很强。当然,Agent就是Intelligent的,这样研究的东西才会对人类有所贡献。
Beliefs不仅能够初始化goals或者Plans,从而使agent执行相应的action,而且能够控制正在执行的行为。
Beliefs的表示方法:
作为类的一个成员来使用。这是比较常见的一种方式,并且把这个成员作为这个agent的belief。这个成员可以使任意类型的
Getter/Setter的方法对。为了满足更多的逻辑要求,增加了这两个pair。
未实现的Getter和Setter方法对。
一句话点破Belief的功能:就是让Agent知道这些beliefs的改变。换句话来说,就是一个人肯定知道自己知道什么和不知道什么,当你学了点新东西的时候,肯定会提醒自己的大脑。当belief被重新赋值,那么Agent就能够发现这点变化然后做出相应的动作。

2. Belief触发Plan

和普通的Plan区别就是在@Plan之后增加了相应的信息。

package a1;

import java.util.HashMap;
import java.util.Map;

import jadex.bdiv3.BDIAgent;
import jadex.bdiv3.annotation.Belief;
import jadex.bdiv3.annotation.Plan;

import jadex.bdiv3.annotation.Trigger;
import jadex.micro.annotation.Agent;
import jadex.micro.annotation.AgentCreated;
import jadex.micro.annotation.Description;

@Agent
@Description("<h1>Translate English to Chinese</h1>")
// @Plans(@Plan(body=@Body(TranslatePlan.class)))
public class TranslateEngChBDI {
    @Agent
    protected BDIAgent translateAgent;
    protected int i = 1;
    @Belief
    protected Map<String, String> wordTable;

    @AgentCreated
    public void init() {
        this.wordTable = new HashMap<String, String>();
        // add some examples of word pairs
        wordTable.put("milk", "牛奶");
        wordTable.put("banana", "香蕉");
        wordTable.put("school", "学校");
        wordTable.put("teacher", "老师");
        wordTable.put("science", "科学");
    }

    @Plan(trigger = @Trigger(factaddeds = "wordTable"))
    public void checkMacPlan() {
        // directly show the automatically triggered.
        System.out.println("Beliefs have been added " + i++ + " elements");
    }

}

这个例子是关于静态的Belief的使用,而有些时候,一个Belief依赖于其他的Beliefs,并且任何时候其他Beliefs的其中一个改变时,都会自动被重新评估。下面就是关于动态Belief的例子。

3. 动态的Beliefs

开启动态Beliefs的方法比较简单,相当于一个开关,把Dynamic设置成true即可。

4. Getter and Setter Belief

为了能够进一步动态获取和设定Beliefs,那么需要使用Getter和Setter的方法。当然,这个也不是很确切的说法。用一个简单的例子来说明一下。

package a1;

import java.text.SimpleDateFormat;

import jadex.bdiv3.BDIAgent;
import jadex.bdiv3.annotation.Belief;
import jadex.bdiv3.annotation.Plan;
import jadex.bdiv3.annotation.Trigger;
import jadex.micro.annotation.Agent;
import jadex.micro.annotation.AgentBody;
import jadex.micro.annotation.Description;

@Agent
@Description("Print the time")
public class ClockBDI {
    @Agent
    public BDIAgent clockAgent;
    protected long time;

    @AgentBody
    public void body() {
        setTime();
    }

    protected SimpleDateFormat formatData = new SimpleDateFormat(
            "yyyy.MM.dd HH:mm:ss");

    @Belief
    public long getTime() {
        return System.currentTimeMillis();
    }

    @Belief
    public void setTime() {
        // TODO Auto-generated method stub
    }

    @Plan(trigger = @Trigger(factchangeds = "time"))
    public void printTime() {
        System.out.println("Now, the time is: " + formatData.format(getTime()));
    }

}

5. 动态更新的Belief

动态更新就是说,Belief能够每个一定的时间间隔进行更新。
例子是关于打印时间的程序:

package a1;

import java.text.SimpleDateFormat;

import jadex.bdiv3.BDIAgent;
import jadex.bdiv3.annotation.Belief;
import jadex.bdiv3.annotation.Plan;
import jadex.bdiv3.annotation.Trigger;
import jadex.micro.annotation.Agent;
import jadex.micro.annotation.AgentBody;
import jadex.micro.annotation.Description;

@Agent
@Description("Print the time")
public class ClockBDI {
    @Agent
    public BDIAgent clockAgent;
    protected long time;

    @AgentBody
    public void body() {
        setTime();
    }

    protected SimpleDateFormat formatData = new SimpleDateFormat(
            "yyyy.MM.dd HH:mm:ss");

    @Belief
    public long getTime() {
        return System.currentTimeMillis();
    }

    @Belief(updaterate=1000)
    public void setTime() {
        // TODO Auto-generated method stub
    }

    @Plan(trigger = @Trigger(factchangeds = "time"))
    public void printTime() {
        System.out.println("Now, the time is: " + formatData.format(getTime()));
    }

}

在setTime的函数上,添加updaterate就可以实现动态的更新。

总结:对于Belief的使用,方法有两种1,使用类的成员;2,使用getter和setter方法。但是在实际的应用中,第一种方法用的还是会比较多一些。
另外关于Belief的使用,就是动态更新检测。但是这种定时的更新检测,还是会消耗一定的资源。具体的应用还是根据自己的使用情况来定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值