嗨,我正在尝试使用 Golog 建立一个搜索计划,我已经写出了必要的原始操作,但我坚持弥合在 golog 中编写复杂操作的差距。
例如,我希望能够写出代理人必须做出的一系列动作。
目前我正在对这些动作进行硬编码,如下所示:
proc(goToLoc(dest),
go(start,next1) :
go(next1,next2) :
go(next2,dest)
).
作为设计师,我知道这些动作是有效的,因此do(goToLoc(dest),s0,S)
会通过。我想要做的是重写这个复杂的动作以能够接受任何变量,我已经尝试过,我认为它需要以某种方式递归,但我坚持如何从递归调用中分配值?
proc(goToLoc(L),
if(some(a, location(a) & -(a=L)),
pi(a, ?(location(a) & -(a=L) : go(a, L)) : goToLoc(a)),
?(true)
)
).
我可能会走得很远,但是当我递归调用proc时状态似乎没有改变,而且我什至不确定我是否提供了足够的信息......因为我有一堆公理用于建立start
next1
...之间的关系,dest
但本质上我只是在寻找一些关于如何在 Golog 中表示一系列动作的概念。