一、局部搜索算法
局部搜索算法:在搜索过程中我们并不关心路径,也即过程(关心路径的搜索算法如BFS,DFS,GBFS,A*搜索等),所以并不存储之前的搜索过程,而只关心问题的目标解,也即最终结果。之所以叫局部搜索是因为,在搜索过程中只存储当前结点,并通过转移到邻居结点来进行探索。
优点:(1)只用很少的内存——通常是常数;(2)经常能在系统化算法不适用的很大或无限的(连续的)状态空间中找到合理的解。

一、爬山法(Hill Climbing)
爬山法(也称最陡爬山法),是选择当前结点的邻居结点中最好的一个进行转移。
伪代码:
普通版本的爬山算法(也称为贪婪局部搜索)容易陷入局部最优,以下是爬山法的一些变体。
变体 | 定义 |
最陡爬山法(steepest-ascent) | 选择当前邻居中最优的 |
随机爬山法(stochastic) | 在比当前结点优的邻居中随机选择 |
首选爬山法(first-choice) | 选择第一个找到的比当前结点优的邻居 |
随机重启爬山法(random-restart) | 通过随机生成初始状态多次执行爬山法 |
这些爬山法的共同点是:不会选择比当前结点差的邻居。
前三个爬山法是不完备的,随机重启爬山法完备的概率接近于1,理由是它最终会生成一个目标状态作为初始状态。
二、模拟退火法(Simulated Annealing)
模拟退火法的主要思想&