智能算法-禁忌搜索算法

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

1. 禁忌搜索

禁忌搜索(Tabu search)是局部邻域搜索算法的推广,其中”禁忌“是指:禁止重复前面的工作,从而为了跳出局部最优点。局部邻域搜索算法详情讲解请见此链接(智能算法-局部邻域搜索算法 )

禁忌搜索算法可以通俗理解为:一群兔子向要到达最高的山峰,他们从出发点(初始解)开始探索,每找一步,他们相互告知,在目前所到的最高处座上记号(禁忌),然后再商量下一步往哪里找,短时间内他们不会重复再去探索已经做了记号的地方,就这样他们重复刚才的方式继续探索。

2. 算法流程图

image.png

3. 示例详解

3.1 问题描述

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

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

image.png

五个城市的图示关系如下所示:

image.png

3.2 求解过程

3.2.1 步骤一:产生初始解

首先进行设定:禁忌长度为4,禁忌对象为简单的解的变化(同一个解不能连续出现),规定每一次搜索当前解邻域内的4个邻域解作为候选解集。

初始解为: X n o w = X 0 = ( A C B D E ) Xnow=X0=(ACBDE)

初始解对应的距离大小为: f ( x 0 ) = 43 f(x0)=43

初始化禁忌表 H H ={(ABCDE;45)}

3.2.2 步骤二:第一次迭代

X n o w = ( A B C D E ) Xnow=(ABCDE) f ( X n o w ) = 45 f(Xnow)=45

禁忌表(最后一项为禁忌长度): H H ={(ABCDE;45;4)}

产生候选解集: C a n N ( x n o w ) Can_N(xnow) ={(ACBDE;43),(ADCBE;45),(ABEDC;59),(ABCED;44)}。

选出的当前最优解为: X n e x t = ( A C B D E ) Xnext=(ACBDE)

3.2.2 步骤三:第二次迭代

X n o w = ( A C B D E ) Xnow=(ACBDE) f ( X n o w ) = 43 f(Xnow)=43

更新后的禁忌表为: H H ={(ABCDE;45;3),(ACBDE;43;4)}

产生新的候选解集: C a n N ( x n o w ) Can_N(xnow) ={………………}。

选出的当前最优解为: X n e x t = ( ) Xnext=(……)

重复以上操作直到达到循环结束条件

4. 特赦(藐视)原则(Aspiration criteria)

  1. 基于评价值的规则,若出现一个解的目标值好于前面任何一个最佳候选解,可特赦;
  2. 基于最小错误的规则,若所有对象都被禁忌,特赦一个评价值最小的解;
  3. 基于影响力的规则,可以特赦对目标值影响大的对象。

5. 候选集的确定方法

  1. 从邻域中选择若干目标值最佳的邻居入选;
  2. 邻域中的一部分邻居中选择若干目标值最佳的状态入选;
  3. 随机选取;

6. 算法终止规则

  1. 确定步数终止,无法保证解的效果,应记录当前最优解;
  2. 频率控制原则,当某一个解、目标值或元素序列的频率超过一个给定值时,终止计算;(出现次数太多)
  3. 目标控制原则,如果在一个给定步数内,当前最优值没有变化,可终止计算。

猜你喜欢

转载自juejin.im/post/7086480964704026632