我在JaCaMo 0.8平台上运行的Jason代理中有两个计划。由于某种原因,第一个计划被认为不适用,因此选择了第二个计划。
我的问题是:我怎么知道表达式的哪一部分将上下文弄虚了?
// get cached Fundamentals if earlier data are younger than 30 minutes
+!opinion(T)[source(Q)]
: .term2string(T,S) & fundamentals::preco(S,_)[seconds_of_day(SSS)] & .time(HH,MM,SS) & (SS+MM*60+HH*60*60 - SSS < 30*60)
& .date(YY,OO,DD) & lastDate(YYY,OOO,DDD) & YY == YYY & OO == OOO & DD == DDD
& fundamentals::lpa(S,_) & fundamentals::vpa(S,_)
<-
.print("Getting cached fundamentals from ",S);
!reply(S,Q);
.
// get Fundamentals again
+!opinion(T)[source(Q)] : .term2string(T,S) & .date(YY,OO,DD) <-
.print("Getting fundamentals from ",S);
getFundamentals(S);
-+lastDate(YY,OO,DD);
!reply(S,Q);
.
我已经为FINE调试设置了looging.properties文件,所引用代理的部分输出为:
> [greenblatt] Start new reasoning cycle [greenblatt] Selected event > +!opinion(ALUP11)[source(myPA)] [greenblatt] Selected intention intention 118: > +!opinion(ALUP11)[source(myPA)] <- ... .print("Getting fundamentals from ",S); getFundamentals(S); -+lastDate(YY,OO,DD); > !reply(S,Q) / {YY=2019, OO=2, DD=23, Q=myPA, S="ALUP11", T=ALUP11} > [greenblatt] Getting fundamentals from ALUP11 [greenblatt] Start new > reasoning cycle
我在此日志上缺少一些信息,例如“ .term2string(T,S)和基本原理:: preco(S,_)[seconds_of_day(SSS)]&.time(HH,MM,SS)&( SS + MM * 60 + HH * 60 * 60-SSS <30 * 60)“是否正确?如何查找此类信息?
答案 0 :(得分:3)
您可以将每个周期的代理状态信息存储在文件中,然后检查这些文件以提示失败原因。
在JaCaMo中,您可以在代理条目中配置该日志:
agent bob {
mindinspector="file(cycle,xml,log)"
}
最后一个参数是文件存储目录的名称。每个文件对应一个心智样本。它们是带有合适样式表的XML文件,可以在浏览器中查看。
当然,此日志需要大量空间/时间才能生成,并且会影响应用程序的性能。