一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
1. 邻域概述
函数优化问题中在距离空间中,通常的邻域定义是以一点为中心的一个球体(邻居们)。
2. 局部邻域搜索
可以通俗理解成:目的是想找到一个问题的最优解。首先在解决中找到一个可行解(初始解,该解未必是最优解),然后在该初始解附近去探索,找到初始解邻域中比初始解还要好的最优解(设为解A)。然后在解A的附近再去探索,再找到解A邻域中比解A还要好的最优解(设为解B),一直这样探索下去,直到达到循环结束条件,输出最终的解。
3. 示例讲解
3.1 问题描述
使用局部搜索算法求解五个城市的对称旅行商路径问题,即从A点出发,经过所有的节点,最终返回A点,求所用距离最短的路径。其中A,B,C,D,E分别代表五个城市,A节点为起点城市。
距离权重矩阵 如下所示:
五个城市节点路径示意图:
3.2 求解过程
3.2.1 步骤一:产生初始解
此处使用随机的方式产生初始解(也可以使用别的方式产生初始解),
初始解为 ,当前最优(短)路径长度
定义邻域映射为对换两个城市位置的2-opt(两元素优化),选定A城市为起点。
3.2.2 步骤二:第一次搜索
此处使用全邻域搜索,即将当前解的邻居都找出来去比较大小。 第一次搜索找到的邻域集为:
= {(ABCDE),(ACBDE),(ADCBE),(AECDB),(ABDCE),(ABEDC),(ABCED)}
这些邻域都是由初始解以及初始解 两两城市依次调换得到的解
注:A城市没有被调换是因为A是固定起点,不能换顺序
对应目标函数为 ={45, 43, 45, 60, 60, 59, 44}
更新最优解:
3.2.3 步骤三:第二次搜索
第二次搜索找到的邻域集为:
={(ACBDE),(ABCDE),(ADBCE),(AEBDC),(ACDBE),(ACEDB),(ACBED)},
对应目标函数为 ={43, 45, 44, 59, 59, 58, 43}
更新最优解
接下来,继续重复上述方式搜索,直到满足结束条件。
我们可以发现最优解又变成上一步最优解了,这也是局部搜索的局限性之一。
4. 局部搜索特点
- 简单易行,但无法保证全局最优性(找到的可能是局部最优解,此算法不能跳出局部最优);
- 局部搜索主要依赖起点的选取和邻域的结构(起点选在局部最优附近,迭代几次找到的是局部最优解)
- 为了得到好的解,可以比较不同的邻域结构和不同的初始点;
- 如果初始点的选择足够多,总可以计算出全局最优解(多试一试)