AgentSpeak:发送计划时的问题(Jason)

时间:2015-01-29 20:29:31

标签: artificial-intelligence agent

我试图通过以下方式将计划从Agent1发送到Agent2:

@c2[atomic] 
+giveRule[source(A)]: planGiven(B) <-
                -+planGiven(B+1);
                .send(A, tellHow, "@s1 +sum(num1(X, Y), num2(A, B))[source(S)] :logic(L) & attentiveness(T)<- if ((L + T) > 2){ -+res(num1(X, Y), num2(A, B), res(X*10 + A*10 + Y + B)); .send(S, tell, result(X*10 + A*10 + Y + B)); } else { -+res(num1(X, Y), num2(A, B), res(X + A + Y + B)); .send(S, tell, result(X + A + Y + B)); }.");
                -+stopGivingPlan.

然后,我试图通过从Agent1向Agent2发送消息来使该计划有效:

@c3[atomic]
+giveProbs[source(A)]: probsGiven(B) & stud(A,X)<-
                -+probsGiven(B+1);
                .send(A, tell, sum(num1(3,3), num2(4,9))).

它不起作用。 为什么呢?

重要补充: 如果我不发送计划,只是在Agent2中复制它,它可以正常工作。所以语法还可以。

另外,我在eclipse中使用jason插件,如果值得提及的话。

1 个答案:

答案 0 :(得分:1)

目前尚不清楚正在执行的内容,如果您可以显示整个代码,那就更好了。我简化了案例只是为了展示一个大致的想法,如下:

Agent1代码:

!start.

+!start: true <-
    .send(agent2, tellHow, "@s1 +!sum(num1(X, Y), num2(A, B))[source(S)] :true <-  -+res(num1(X, Y), num2(A, B), res(X + A + Y + B)); ?res(Z1,Z2,Z3); .print(Z1,\"+\",Z2,\"=\",Z3).");  
    .send(agent2, achieve, sum(num1(1,2), num2(3,4))).

Agent2代码:

/* No previous code - agent1 will send a plan*/

回应应该是:

[agent2] num1(1,2)+num2(3,4)=res(10)

在这种情况下,agent2无需做任何事情,直到agent1发送计划。 Agent1还发送触发计划以实现总和。