第四章 JADE学习 - AGENT的通信

AGENT COMMUNICATION

JADE代理提供的最重要功能之一就是通信能力。所采用的通信模式是异步消息传递。每个代理都有一种邮箱(代理消息队列),JADE运行时在其中发布其他代理发送的消息。每当在消息队列中发布消息时,都会通知接收代理。但是,当代理实际从消息队列中提取消息进行处理时,完全取决于程序员。

The JADE asynchronous message passing paradigm

JADE代理交换的消息具有由ACL语言定义的格式,该语言由
FIPA(http://www.fipa.org)代理互操作性国际标准。 此格式包括
字段数,包括以下几个内容:

  • sender : 消息的发送者,通过Agent标记AID来表示
  • receivers : 接受Agent消息的Agent,可以指定多个接收者
  • communicative intention (or “performative”): 指示发送者通过发送消息要实现的目标。 如果发送者希望接收者执行一个操作,则执行器可以是REQUEST;如果发送者希望接收者知道一个事实,QUERY_IF,则发送者希望接收者执行一个动作INFORM。
    发送者想知道给定条件是否成立,CFP(Call For Proposals),PROPOSE,ACCEPT_PROPOSAL,REJECT_PROPOSAL,发送者和接收者是否正在进行协商等。
  • content : 消息中包含的实际信息(比如,在REQUEST中要执行的操作,发送者要公开在INFORM中的消息……)。
  • language: 用于表示内容的语法(发送方和接收方都必须能够编码/解码以符合此语法的表达式,以使通信有效)。
  • ontology: 内容中使用的符号的词汇及其含义(发送方和接收方都必须将符号的含义赋予相同的含义才能使通信有效)。
  • 其他一些常量用于控制多个并发会话并指定用于接收答复的超时,例如conversation-id, reply-with, in-reply-to, reply-by。

ACLMessage 接收/发送信息


// SenderAgent.java

package cn.bcrab.agent;

import jade.core.AID;
import jade.core.Agent;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;

public class SenderAgent extends  Agent{
    @Override
    protected void setup() {

        Behaviour b = new CyclicBehaviour() {

            @Override
            public void action() {
                doWait(1000);
                ACLMessage msg = receive();
                if (msg!=null){
                    System.out.println("SenderAgent receive content from : "+ msg.getSender().getName());
                    System.out.println("SenderAgent receive content is   : "+ msg.getContent());

                }
                block();
            }


        };

        this.addBehaviour(b);

        ACLMessage aclMessage = new ACLMessage(ACLMessage.INFORM); //实例化通知
        AID aid = new AID("Receiver", AID.ISLOCALNAME);
        aclMessage.addReceiver(aid); //将接收者添加到ACL消息中
        aclMessage.setContent("Hi Receiver, I am going to send you something."); //设置发送内容
        send(aclMessage); // 发送操作

    }
}


// ReceiverAgent.java

package cn.bcrab.agent;

import jade.core.Agent;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;

public class ReceiverAgent extends  Agent{

    @Override
    protected void setup() {
        Behaviour b = new CyclicBehaviour() {
            @Override
            public void action() {
                ACLMessage aclMessage = receive();
                if(aclMessage!=null){


                    System.out.println("--------------ReceiverAgent print info---------------" );
                    System.out.println("ReceiverAgent local name is:" + getLocalName());
                    System.out.println("ReceiverAgent received content is:" + aclMessage.getContent());
                    System.out.println("ReceiverAgent received content from:" + aclMessage.getSender().getLocalName());
                    System.out.println("---------------------------------------------------" );

                    ACLMessage reply = aclMessage.createReply();
                    reply.setPerformative(ACLMessage.INFORM);
                    reply.setContent("OK, I got it.");
                    send(reply);

                }
                block();
            }
        };

        this.addBehaviour(b);
    }
}

Program arguments:

-gui
-name
Platform
-agents
Receiver:cn.bcrab.agent.ReceiverAgent
Sender.bcrab.agent.SenderAgent

没办法启动两个Agent, 不知道为什么,只能先只启动 ReceiverAgent, SenderAgent通过GUI 界面去启动。

Program arguments 修改为:

-gui
-name
Platform
-agents
Receiver:cn.bcrab.agent.ReceiverAgent
GUI 启动SenderAgent

运行效果

--------------ReceiverAgent print info---------------
ReceiverAgent local name is:receiver
ReceiverAgent received content is:Hi Receiver, I am going to send you something.
ReceiverAgent received content from:sender
---------------------------------------------------
SenderAgent receive content from : receiver@Platform
SenderAgent receive content is   : OK, I got it.

相关代码

https://gitee.com/2010jing/JADE-tutorial/tree/tutorial04/


Reference

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269