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 行。
感谢您提供的任何帮助。
E
是 s
中适用操作的集合。也就是说,E
是O
中所有前提条件都成立的一组操作 s
.
如果没有这样的操作,计划算法的这个"分支"会导致失败(第 6 行和第 7 行( - 无法从s
中找到达到目标状态的计划g
。
第9行很可能意味着"不确定的选择";从非常轻松和抽象的意义上说,这是"并行尝试所有这些"。然而,在实践中,深度优先规划器的实现很可能会确定性地逐个尝试E
*
的成员。
第 10 行指出,下一个状态是通过消除负面影响和添加所选运算符a
的积极影响来给出的。
*
这应该需要调整代码以检查循环以保证完整性。参见Nau,Ghallab和Traverso的"自动规划 - 理论与实践"的第4.2.2节。