局部搜索
局部搜索是一种用于解决计算上难以优化的问题(NP Problem)的启发式方法.
局部搜索从当前结点出发,通常只移动到他的邻近状态,不保留路径,根据目标函数寻找最优的状态。局部搜索的优点有:
- 只用很少的内存
- 对于状态空间很大,连续的问题也适用(系统(全局)算法就不太适合这类问题)
局部搜索的优化思路
- 局部最优问题即考虑到算法在搜索过程中陷入到局部极值点而结束的情况。设想我们去攀登一座山群的最高峰,而此山群有很多的小山峰,且我们对此山群一无所知,那么当我们按照算法的步骤来到一座小山峰(局部极值点)时,我们会错误的判断这就是最高峰,事实上这有可能是一个很糟糕的解(即与最高峰还差很远)。
- 步长问题为便于理解,我们考虑用此局部搜索算法寻找一开口向下的抛物线的顶点:设此顶点的x坐标为10,求领域的映射N定义为N: x ∈ R , N ( x ) = x ± 3 x∈R,N(x)=x±3 x∈R,N(x)=x±3(即给定点x的领域仅有在其两边相距为3的两个点),指标函数 f ( x ) = − y ( x ) f(x)=-y(x) f(x)=−y(x)(为使指标函数值小的解为较优解,我们让其取相反数);那么当我们所选取的初始解为3时,无论如何算法都将不能在顶点(最优解)处结束。根本原因就是我们的步长固定,所以能够搜索到的也仅为一些固定的点。解决此问题可以在搜索的过程中改变步长(本质为改变映射函数N)。
- 起始点问题在上面步长问题的讨论中,我们发现起始点的选择也对问题的求解有很大的影响,选择不好可能会导致得不出最优解的情况。一种很自然的解决方案就是随机的选择一些可能解,分别以这些可能解为初始解进行搜索,最后将这些搜索得到的解进行比较从而选出最优解。
爬山法
探索和利用
- 探索:可理解为随机找点或初始化状态,保障在局部最优中能够找到全局最优
- 利用:保障能通过一个初始状态, 够找到他的局部最优
最陡爬山法
思路其实很简单, 不断在向值增加的方向移动. 而且移动时只会考虑与相邻的位置(纯利用, 类似与贪心的思想).
n’ <- argmax{
f(m)