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

时间:2015-11-10 16:34:23

标签: pseudocode planning

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行。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

Es中适用的操作集。也就是说,EO中的所有先决条件都在s中保存的操作集。

如果没有此类操作,此分支'计划算法导致失败(第6和第7行) - 无法从s找到计划以达到目标状态g

第9行很可能意味着不确定地选择&#39 ;;也就是说,在非常轻松和抽象的意义上,并行地尝试所有这些'。但实际上,深度优先策划者的实现很可能会确定性地尝试E成员{1}}。

第10行指出下一个状态是通过消除负面影响和添加所选运算符*的正效应来给出的。

a应该要求修改代码以检查循环以确保完整性。参见Nau,Ghallab和Traverso'自动规划 - 理论与实践的第4.2.2节。实践'