1 Local Search 局部搜索算法介绍
局部搜索是解决最优化问题的一种启发式算法。因为对于很多复杂的问题,求解最优解的时间可能是极其长的。因此诞生了各种启发式算法来退而求其次寻找次优解或近似最优解,局部搜索就是其中一种。它是一种近似算法(Approximate algorithms)。
局部搜索算法是从爬山法改进而来的。简单来说,局部搜索算法是一种简单的贪心搜索算法,该算法每次从当前解的邻域解空间中选择一个最好邻居作为下次迭代的当前解,直到达到一个局部最优解(local optimal solution)。局部搜索从一个初始解出发,然后搜索解的邻域,如有更优的解则移动至该解并继续执行搜索,否则就停止算法获得局部最优解。
爬山算法是一种简单的贪心搜索算法,也可以被称为局部搜索算法(local search algorithm),该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。这种算法思想很单纯,但是也存在一个很大的缺陷。在搜索选择的过程中有可能会陷入局部最优解,而这个局部最优解不一定是全局最优解。比如下面这个问题:
假设A是当前解,爬山算法往前继续搜索,当搜索到B这个局部最优解时就会停止搜索了。因为此时在B点无论是往哪边走都不会得到更优的解了。但是,聪明的同学已经发现了,全局最优解在C点。
2 Local Search 思想
局部搜索会先从一个初始解开始,通过邻域动作。产生初始解的邻居解,然后根据某种策略选择邻居解。一直重复以上过程,直到达到终止条件。
不同局部搜索算法的区别就在于:邻域动作的定义以及选择邻居解的策略。这也是决定算法好坏的关键之处。
2.1 邻域动作
其实邻域动作就是一个函数。那么,通过这个函数,针对当前解s,产生s对应的邻居解的一个集合。比如:对于一个bool型问题,其当前解为:s = 1001,当将邻域动作定义为翻转其中一个bit时,得到的邻居解的集合N(s)={0001,1101,1011,1000},其中N(s) ∈ S。同理,当将邻域动作定义为互换相邻bit时,得到的邻居解的集合N(s)={0101,1001,1010}.
Local Search中邻域的选择包括:
1. Best improvement (steepest descent)
2. First improvement
3. Random selection
2.2 Local Search 伪代码
2.1 Local Search 中邻域的选择
3 Local Search 优缺点
3.1 Local Search 的缺点
1、对初始值十分敏感。(The LS is very sensitive to the initial solution.)
2、需要执行的迭代次数可能未知。(The number of iterations performed may not be known in advance.)
3、即使LS运行得非常快,其最坏情况下的复杂度也是指数级的。(Even if the LS runs very quickly, its worst case complexity is exponential.)
3.2 Local Search 的优点
1、若没有很多局部最优解的时候,Local Search会运行的很好。