我一直在查看一些关于 STRIPS 格式的 AI 计划表示的材料,并发现不同的人似乎以不同的方式制定相同的问题。
例如,维基百科有一个关于实验室中的猴子问题的例子。问题指出:
有一个盒子可以让猴子爬上去够到悬挂在天花板上的香蕉。最初,猴子在A,香蕉在B,盒子在C。猴子和盒子的高度是Low,但是如果猴子爬到盒子上,他的高度就和香蕉一样高。猴子可用的动作包括从一个地方到另一个地方,将一个对象从一个地方推到另一个地方,从一个对象上爬上或爬下,以及抓住或松开一个对象。如果猴子和物体在相同高度的相同位置,则抓住物体会导致握住物体。
这是维基百科的计划(请注意,它与此问题描述不完全匹配,但它是同一个问题。它似乎没有实现 Ungrasp,这对于本次讨论并不重要):
现在在这个计划中我看不到香蕉位于 Level(high),所以从计划中真正泄露这一点的唯一方法是通读整个动作集并从那里推断出猴子必须是在 Level(high) 与香蕉交互,因此它们必须在 Level(high)。
将此信息置于初始状态是否是一个好主意,并具有以下内容:
Monkey(m) & Bananas(ba) & Box(bx) & Level(low) & Level(high) & Position(A) & Position(B) & Position(C) & At(m, A, low) & At (ba, B, 高) & At(bx, C, 低)
这样看起来很冗长,但同时也让读者可以通过阅读初始状态来理解场景。我还被告知我们不应该在 STRIPS 中的任何地方使用常量,所以我认为将 A、B 和 C 声明为 Positions 是个好主意。
是有些人的做法不同(我觉得这会破坏使用标准化语言来表示事物的想法),还是我提出的一种方式格式不正确?我是 STRIPS 的新手,所以我完全有可能(并且很可能)遗漏了一些关键点。