智能算法-禁忌搜索算法

4,379 阅读3分钟

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

1. 禁忌搜索

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

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

2. 算法流程图

image.png

3. 示例详解

3.1 问题描述

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

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

image.png

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

image.png

3.2 求解过程

3.2.1 步骤一:产生初始解

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

初始解为:Xnow=X0=(ACBDE)Xnow=X0=(ACBDE)

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

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

3.2.2 步骤二:第一次迭代

Xnow=(ABCDE)Xnow=(ABCDE)f(Xnow)=45f(Xnow)=45

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

产生候选解集:CanN(xnow)Can_N(xnow)={(ACBDE;43),(ADCBE;45),(ABEDC;59),(ABCED;44)}。

选出的当前最优解为:Xnext=(ACBDE)Xnext=(ACBDE)

3.2.2 步骤三:第二次迭代

Xnow=(ACBDE)Xnow=(ACBDE)f(Xnow)=43f(Xnow)=43

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

产生新的候选解集:CanN(xnow)Can_N(xnow)={………………}。

选出的当前最优解为:Xnext=()Xnext=(……)

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

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

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

5. 候选集的确定方法

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

6. 算法终止规则

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