搜索算法与决策问题详解
1. 搜索算法概述
1.1 分支限界法与正向搜索
分支限界法并不一定能比正向搜索减少计算量,二者在最坏情况下的时间复杂度相同。算法的效率在很大程度上依赖于启发式函数。
1.2 动态规划
正向搜索和分支限界法都不会记录某个状态是否曾被访问过,这会导致多次评估相同状态,浪费计算资源。而动态规划(算法 E.4)通过记录特定子问题是否已被解决,避免了重复工作。
动态规划适用于那些最优解可以由其子问题的最优解构建而成的问题,这种性质被称为最优子结构。例如,若从 $s_1$ 到 $s_3$ 的最优动作序列经过 $s_2$,那么从 $s_1$ 到 $s_2$ 以及从 $s_2$ 到 $s_3$ 的子路径也是最优的。
在图搜索中,评估状态时,首先检查置换表,看该状态是否曾被访问过。若已访问过,则返回其存储的值;否则,正常评估该状态并将结果存储在置换表中。以下是动态规划应用于正向搜索的代码:
function dynamic_programming(𝒫::Search, s, d, U, M=Dict())
if haskey(M, (d,s))
return M[(d,s)]
end
𝒜, T, R = 𝒫.𝒜(s), 𝒫.T, 𝒫.R
if isempty(𝒜) || d ≤ 0
best = (a=nothing, u=U(s))
else
best = (a=first(𝒜), u=-Inf)
for
超级会员免费看
订阅专栏 解锁全文
2265

被折叠的 条评论
为什么被折叠?



