超越经典搜索 Beyond Classical Search
写在前面:超越经典搜索算法更接近现实世界,不再强求环境的确定性和可观察性。
一、爬山法
爬山法顾名思义,该算法求解就像人爬山一样,从低处(不太好的结果)一点点向高处(更好的结果)爬。
详细的解释:
- 在解空间随机初始化一个节点 current,其结果记为 VALUE[current]
- 比较 VALUE[current] 和其临近节点neighbor的结果 VALUE[neighbor]
- 如果VALUE[neighbor] > VALUE[current],那么就将current的值替换为neighbor,否则就不换
这个算法的缺点就是,容易卡在局部最优。
二、模拟退火法 Simulated Annealing
这里不说太多长篇大论了,就简单说下原理:
为了解决爬山法容易卡在局部最优的问题,有什么解决办法呢?
模拟退火法的想法是当遇到VALUE[neighbor] < VALUE[current]时,以一定的概率接受交换(对于爬山法来说,他是不会交换这个点的),其概率公式为:
p
(
x
)
=
α
e
E
(
x
)
k
T
p(x)= \alpha e^{\frac{E(x)}{kT}}
p(x)=αekTE(x)
VALUE[neighbor] > VALUE[current]时,就按正常的爬山法,反之,按一定概率接受后如果VALUE较之前降低了,那么概率就会呈指数级下降(T下降引起的)。
三、局部束搜索 Local Beam Search
内存总是有限的,只存一个节点又有些极端。局部束搜索是同时记录k个随机生成的状态,然后生成这k个状态的所有后继,若其中有目标状态则算法停止,否则从这些后继中选k个最佳后续,重复上述过程。
四、遗传算法 Genetic Algorithms
由于这部分有图,所以新开一个博客,请点击此处查看