无法将操作发送给另一个 Jason 代理
Unable to send an action to another Jason agent
我正在使用 Jason 语言在两个代理之间进行通信。但是我无法使用发送动作,它给出了一个错误。
这是我的两个代理人,
代理 1 :-
// 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").*/
代理 2:-
// 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 中的发送操作时出现错误,而 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 的情况下,当你说“+!query_factorial(X)...”)它应该是一个实现消息。取消注释 "plan" "+fact(X,Y) : true <- .print("factorial ", X, " is ", Y, " 谢谢专家")."你应该使用运算符“!”一开始就制定计划。所以,如果我理解了你的测试项目的大致思路,可以重写如下:
代理 1 代码:
!start.
+!start : true
<- .print("starting..");
!query_factorial(2).
+!query_factorial(X) : true <-
.send(agent2,achieve,giveme(X)).
代理2代码:
+!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.
您可以看到,我没有使用您原始代码的 "begin plan",因为 Agent1 正在执行这项工作,让 Agent2 在被询问时工作。
我正在使用 Jason 语言在两个代理之间进行通信。但是我无法使用发送动作,它给出了一个错误。
这是我的两个代理人,
代理 1 :-
// 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").*/
代理 2:-
// 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 中的发送操作时出现错误,而 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 的情况下,当你说“+!query_factorial(X)...”)它应该是一个实现消息。取消注释 "plan" "+fact(X,Y) : true <- .print("factorial ", X, " is ", Y, " 谢谢专家")."你应该使用运算符“!”一开始就制定计划。所以,如果我理解了你的测试项目的大致思路,可以重写如下:
代理 1 代码:
!start.
+!start : true
<- .print("starting..");
!query_factorial(2).
+!query_factorial(X) : true <-
.send(agent2,achieve,giveme(X)).
代理2代码:
+!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.
您可以看到,我没有使用您原始代码的 "begin plan",因为 Agent1 正在执行这项工作,让 Agent2 在被询问时工作。