无法将动作发送给另一个Jason座席

时间:2015-09-16 05:24:15

标签: artificial-intelligence agent artificial-life

我使用Jason语言在两个代理之间进行通信。但是我无法使用发送操作,它会出错。

这是我的两个代理人,

Agent1: -

// Agent Agent1 in project factorial3.mas2j

/* Initial goals */
!start.

/* Plans */

+!start : true
<- .print("starting..");
    !query_factorial(2).

+!query_factorial(X) : true <-
.send(agent2,tell,giveme(X)).

/*+fact(X,Y) : true <-
.print("factorial ", X, " is ", Y, " thank you expert").*/

Agent2: -

// Agent agent2 in project IdEx.mas2j

/* Initial beliefs and rules */

/* Initial goals */

!begin.

/* Plans */

+!begin : true
    <- .print("expert starting.......");
        !giveme(X).

+!giveme(X):true
    <- !fact(X,Y);
    .print("Factorial of ", X, " is ", Y).
    //.send(agent1,achive,fact(X,Y)).

+!fact(X,1) : X == 0.

+!fact(X,Y) : X > 0
<- !fact(X-1,Y1);
    Y = Y1 * X.

因此,当我尝试在agent1中调用send动作并且agent2发出接收错误时,我收到错误。

已更新

我收到此错误,

[agent2] *** Error adding var into renamed vars. var=X, value=(_229-1).
java.lang.ClassCastException: jason.asSyntax.ArithExpr cannot be cast to jason.asSyntax.VarTerm
    at jason.asSemantics.TransitionSystem.prepareBodyForEvent(TransitionSystem.java:877)
    at jason.asSemantics.TransitionSystem.applyExecInt(TransitionSystem.java:728)
    at jason.asSemantics.TransitionSystem.applySemanticRule(TransitionSystem.java:222)
    at jason.asSemantics.TransitionSystem.reasoningCycle(TransitionSystem.java:1429)
    at jason.infra.centralised.CentralisedAgArch.run(CentralisedAgArch.java:205)
    at java.lang.Thread.run(Thread.java:745)

1 个答案:

答案 0 :(得分:1)

如果你想要一个代理人来执行一个计划(当你说'#34; +!query_factorial(X)......&#34;时代理人为1),它应该是一个实现消息。取消注释&#34;计划&#34; &#34; + fact(X,Y):true&lt; - .print(&#34; factorial&#34;,X,&#34;是&#34;,Y,&#34;谢谢专家& #34;)&#34。你应该使用运营商&#34;!&#34;在开始使它成为一个计划。所以,如果我对你的测试项目有了一般的想法,可以重写如下:

Agent1代码:

!start.

+!start : true
<- .print("starting..");
    !query_factorial(2).

+!query_factorial(X) : true <-
    .send(agent2,achieve,giveme(X)).

Agent2代码:

+!giveme(X):true
    <- !fact(X,Y);
    .print("Factorial of ", X, " is ", Y).

+!fact(X,1) : X == 0.

+!fact(X,Y) : X > 0
    <- !fact(X-1,Y1);
    Y = Y1 * X.

你可以看到,我没有使用&#34;开始计划&#34;自Agent1正在执行此任务以来,您的原始代码是正确的,这使得Agent2在被问及时可以正常工作。