智能算法-局部邻域搜索算法

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

1. 邻域概述

函数优化问题中在距离空间中,通常的邻域定义是以一点为中心的一个球体(邻居们)。

2. 局部邻域搜索

可以通俗理解成:目的是想找到一个问题的最优解。首先在解决中找到一个可行解(初始解,该解未必是最优解),然后在该初始解附近去探索,找到初始解邻域中比初始解还要好的最优解(设为解A)。然后在解A的附近再去探索,再找到解A邻域中比解A还要好的最优解(设为解B),一直这样探索下去,直到达到循环结束条件,输出最终的解。

3. 示例讲解

3.1 问题描述

使用局部搜索算法求解五个城市的对称旅行商路径问题,即从A点出发,经过所有的节点,最终返回A点,求所用距离最短的路径。其中A,B,C,D,E分别代表五个城市,A节点为起点城市。

距离权重矩阵 D D 如下所示:

image.png

五个城市节点路径示意图:

image.png

3.2 求解过程

3.2.1 步骤一:产生初始解

此处使用随机的方式产生初始解(也可以使用别的方式产生初始解),

初始解为 x b e s t = ( A B C D E ) xbest=(ABCDE) ,当前最优(短)路径长度 f ( x b e s t ) = 45 f(xbest)=45

定义邻域映射为对换两个城市位置的2-opt(两元素优化),选定A城市为起点。

3.2.2 步骤二:第一次搜索

此处使用全邻域搜索,即将当前解的邻居都找出来去比较大小。 第一次搜索找到的邻域集为:

N ( x b e s t ) N(xbest) = {(ABCDE),(ACBDE),(ADCBE),(AECDB),(ABDCE),(ABEDC),(ABCED)}

这些邻域都是由初始解以及初始解 ( A B C D E ) (ABCDE) 两两城市依次调换得到的解

注:A城市没有被调换是因为A是固定起点,不能换顺序

对应目标函数为 f ( x ) f(x) ={45, 43, 45, 60, 60, 59, 44}

更新最优解: x b e s t = x n o w = ( A C B D E ) xbest=xnow=(ACBDE)

3.2.3 步骤三:第二次搜索

第二次搜索找到的邻域集为:

N ( x b e s t ) N(xbest) ={(ACBDE),(ABCDE),(ADBCE),(AEBDC),(ACDBE),(ACEDB),(ACBED)},

对应目标函数为 f ( x ) f(x) ={43, 45, 44, 59, 59, 58, 43}

更新最优解 x b e s t = x n o w = ( A C B D E ) xbest=xnow=(ACBDE)

接下来,继续重复上述方式搜索,直到满足结束条件。

我们可以发现最优解又变成上一步最优解了,这也是局部搜索的局限性之一。

4. 局部搜索特点

  • 简单易行,但无法保证全局最优性(找到的可能是局部最优解,此算法不能跳出局部最优);
  • 局部搜索主要依赖起点的选取邻域的结构(起点选在局部最优附近,迭代几次找到的是局部最优解)
  • 为了得到好的解,可以比较不同的邻域结构和不同的初始点;
  • 如果初始点的选择足够多,总可以计算出全局最优解(多试一试)

猜你喜欢

转载自juejin.im/post/7086105169397547015