在 JADEX 2.4 上交换消息

我需要使用 BDI 代理来完成一项工作,为此我将使用 JADEX 2.4,但遇到了一个大问题。文档有些贫乏,我无法在代理之间交换消息。

我阅读了这篇文章 http://www.activecomponents.org/bin/view/AC+Tutorial/05+Provided+Services

我试图在我的代码中做同样的事情,但没有成功。我需要知道如何做两件事来完成我的工作:从一个代理向另一个代理发送消息,以及从一个代理向所有代理发送消息。有人知道如何做吗?

我目前的代码如下:

ChatSystem.java

package agents;import java.text.DateFormat;import java.text.SimpleDateFormat;import ....@Servicepublic class ChatSystem implements IChatService{    @ServiceComponent    protected IInternalAccess agent;    protected IClockService clock;    protected DateFormat format;    @ServiceStart    public IFuture<IClockService> startService(){        format = new SimpleDateFormat("hh:mm:ss");        final Future<IClockService> ret = new Future<IClockService>();        IFuture<IClockService> fut = agent.getServiceContainer().getRequiredService("clockservice");        fut.addResultListener(new DelegationResultListener<IClockService>(ret)        {          public void customResultAvailable(IClockService result)          {            clock = result;            super.customResultAvailable(null);          }        });        return ret;    }    @Override    public IFuture<Void> message(String nick, String text,            boolean privatemessage) {        // TODO Auto-generated method stub        //System.out.println(" received at" + text);        System.out.println(agent.getComponentIdentifier().getLocalName()+" received at "                +" from: "+nick+" message: "+text);        return null;    }}

HelperAgent.java

package agents;import java.util.Collection;import java.util.Date;import java.util.Iterator;import .....@Agent@Service@RequiredServices({@RequiredService(name="clockservice", type=IClockService.class,binding=@Binding(scope=RequiredServiceInfo.SCOPE_PLATFORM)),@RequiredService(name="chatservices", type=IClockService.class,binding=@Binding(scope=RequiredServiceInfo.SCOPE_PLATFORM,dynamic=true),multiple=true)})@ProvidedServices(@ProvidedService(type=IChatService.class, implementation=@Implementation(ChatSystem.class)))public class HelperAgent {    @Agent    protected MicroAgent agent;    @AgentBody    public void AgentBody()    {        IFuture<IClockService> fut = agent.getServiceContainer().getRequiredService("clockservice");        fut.addResultListener(new DefaultResultListener<IClockService>()        {          public void resultAvailable(IClockService cs)          {            System.out.println("Time for a chat, buddy: "+new Date(cs.getTime()));          }        });        IFuture<Collection<IChatService>> chatservices = agent.getServiceContainer().getRequiredServices("chatservices");        chatservices.addResultListener(new DefaultResultListener<Collection<IChatService>>()        {          public void resultAvailable(Collection<IChatService> result)          {            for(Iterator<IChatService> it=result.iterator(); it.hasNext(); )            {              IChatService cs = it.next();              cs.message(agent.getComponentIdentifier().getName(), "test",false);            }          }        });    }}

有人能帮我吗?

此致


回答:

在 Jadex 中,你可以使用表示增强代理的主动组件工作,即除了发送和接收消息外,你还可以使用服务。代理可以使用 Java 接口暴露服务,其他代理可以通过它们的类型简单地获取这些服务。使用服务进行通信时,无需知道代理的身份。这有助于构建更面向 SOA 的动态服务提供解决方案。

如果你想通过消息进行通信,API 取决于你使用的组件类型。在微代理的情况下(如你的代码片段所示),你可以准备一个 FIPA 消息,并在代理 API 上调用 sendMessage,如下所示:

Map msg = new HashMap();msg.put(SFipa.CONTENT, content);msg.put(SFipa.PERFORMATIVE, SFipa.QUERY_IF);msg.put(SFipa.CONVERSATION_ID, "someuniqueid");msg.put(SFipa.RECEIVERS, new IComponentIdentifier[]{receiver});msg.put(SFipa.SENDER, getComponentIdentifier());agent.sendMessage(msg, SFipa.FIPA_MESSAGE_TYPE);

其中 ‘agent’ 是注入的 MicroAgent。

此致
Lars

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注