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行。
感谢您提供任何帮助。
答案 0 :(得分:1)
E
是s
中适用的操作集。也就是说,E
是O
中的所有先决条件都在s
中保存的操作集。
如果没有此类操作,此分支'计划算法导致失败(第6和第7行) - 无法从s
找到计划以达到目标状态g
。
第9行很可能意味着不确定地选择&#39 ;;也就是说,在非常轻松和抽象的意义上,并行地尝试所有这些'。但实际上,深度优先策划者的实现很可能会确定性地尝试E
成员{1}}。
第10行指出下一个状态是通过消除负面影响和添加所选运算符*
的正效应来给出的。
a
应该要求修改代码以检查循环以确保完整性。参见Nau,Ghallab和Traverso'自动规划 - 理论与实践的第4.2.2节。实践'