一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
1. 禁忌搜索
禁忌搜索(Tabu search)是局部邻域搜索算法的推广,其中”禁忌“是指:禁止重复前面的工作,从而为了跳出局部最优点。局部邻域搜索算法详情讲解请见此链接(智能算法-局部邻域搜索算法 )
禁忌搜索算法可以通俗理解为:一群兔子向要到达最高的山峰,他们从出发点(初始解)开始探索,每找一步,他们相互告知,在目前所到的最高处座上记号(禁忌),然后再商量下一步往哪里找,短时间内他们不会重复再去探索已经做了记号的地方,就这样他们重复刚才的方式继续探索。
2. 算法流程图
3. 示例详解
3.1 问题描述
请使用禁忌搜索算法求解五个城市的对称旅行商路径问题,即从A点出发,经过所有的节点,最终返回A点,求所用距离最短的路径。其中A,B,C,D,E分别代表五个城市,A节点为起点城市。
距离权重矩阵 如下所示:
五个城市的图示关系如下所示:
3.2 求解过程
3.2.1 步骤一:产生初始解
首先进行设定:禁忌长度为4,禁忌对象为简单的解的变化(同一个解不能连续出现),规定每一次搜索当前解邻域内的4个邻域解作为候选解集。
初始解为:
初始解对应的距离大小为:
初始化禁忌表 ={(ABCDE;45)}
3.2.2 步骤二:第一次迭代
,
禁忌表(最后一项为禁忌长度): ={(ABCDE;45;4)}
产生候选解集: ={(ACBDE;43),(ADCBE;45),(ABEDC;59),(ABCED;44)}。
选出的当前最优解为:
3.2.2 步骤三:第二次迭代
,
更新后的禁忌表为: ={(ABCDE;45;3),(ACBDE;43;4)}
产生新的候选解集: ={………………}。
选出的当前最优解为:
重复以上操作直到达到循环结束条件
4. 特赦(藐视)原则(Aspiration criteria)
- 基于评价值的规则,若出现一个解的目标值好于前面任何一个最佳候选解,可特赦;
- 基于最小错误的规则,若所有对象都被禁忌,特赦一个评价值最小的解;
- 基于影响力的规则,可以特赦对目标值影响大的对象。
5. 候选集的确定方法
- 从邻域中选择若干目标值最佳的邻居入选;
- 在邻域中的一部分邻居中选择若干目标值最佳的状态入选;
- 随机选取;
6. 算法终止规则
- 确定步数终止,无法保证解的效果,应记录当前最优解;
- 频率控制原则,当某一个解、目标值或元素序列的频率超过一个给定值时,终止计算;(出现次数太多)
- 目标控制原则,如果在一个给定步数内,当前最优值没有变化,可终止计算。