有人可以为我解释这个 STRIPS 前瞻性计划伪代码吗?


Input  : Set of operators 0, Start state s, Goal state g
Output : Plan P
1. begin
2.  | let P = [];
3.  | while g (is not a subset of) s do
4.  |  |  let E = {a|a is ground instance of an operator in O,
5.  |  |  and Preconditions(a) hold in s}
6.  |  |  if E = {} then
7.  |  |   |  return failure
8.  |  |  end
9.  |  |  choose a (which is a member of) E;
10. |  |  let s = s DeleteList(a) (union) AddList(a)
11. |  |  P = P @ [a]
12. | end
13. | return P
14.end

我正在努力理解第 4,5 行(E 是用来做什么的?(,第 9 行(它如何选择?(和第 10 行。

感谢您提供的任何帮助。

Es 中适用操作的集合。也就是说,EO中所有前提条件都成立的一组操作 s .

如果没有这样的操作,计划算法的这个"分支"会导致失败(第 6 行和第 7 行( - 无法从s中找到达到目标状态的计划g

第9行很可能意味着"不确定的选择";从非常轻松和抽象的意义上说,这是"并行尝试所有这些"。然而,在实践中,深度优先规划器的实现很可能会确定性地逐个尝试E *的成员。

第 10 行指出,下一个状态是通过消除负面影响和添加所选运算符a的积极影响来给出的。


*这应该需要调整代码以检查循环以保证完整性。参见Nau,Ghallab和Traverso的"自动规划 - 理论与实践"的第4.2.2节。

最新更新