考虑一棵深度树B
(即:所有路径都有长度B
),其节点代表系统状态,边代表动作。
每个动作a in ActionSet
都有一个增益,并使系统从一个状态转移到另一个状态。执行一系列动作A-B-C
或C-B-A
(或这些动作的任何其他排列)会带来相同的收益。而且:
- 之前执行的动作次数越多,询问
a
时总增益的增加越低a
- 每条路径获得的增益不能大于一个量
H
,即:某些路径可能获得低于 的增益,但是每当执行一个动作使H
总增益等于H
0
- 动作序列得到的
#b,h,j, ..., a#
是g(a)
(0 <= g(a) <= H
) - 一旦对从根到叶的路径执行了操作,就不能在同一路径上再次执行该操作
算法1的应用。我应用以下算法(A*-like):
- 从根开始。
- 展开树的第一层,它将包含
ActionSet
. 每个扩展操作a
都有增益f(a) = g(a) + h(a)
,其中g(a)
定义如前所述,是对执行其他操作h(a)
将获得的收益的估计。B-1
- 选择
a*
最大化的动作f(a)
- 展开子项
a*
B
迭代 2-3 直到从根到保证最高的叶子的整个动作路径f(n)
被访问。请注意,新选择的操作也可以从先前级别放弃的节点中选择。例如,如果扩展后a*
的节点最大化f(a)
是根的一个孩子,则选择它作为新的最佳节点
算法2的应用。现在,假设我有一个贪心算法,它只查看g(n)
知识加启发式函数的组成部分f(n)
,即该算法根据已经获得的收益选择动作:
- 在第一步,我选择
a
最大化增益的动作g(a)
- 在第二步,我选择
b
最大化增益的动作g(b)
宣称。实验证明告诉我,这两种算法带来了相同的结果,可能是混合的(例如,第一个建议序列A-B-C
,第二个建议B-C-A
)。但是,我没有成功理解为什么。
我的问题是:是否有一种正式的方法可以证明这两种算法返回相同的结果,尽管在某些情况下是混合的?
谢谢你。