1.算法简介

禁忌搜索算法TS(Tabu Search)是由美国科罗拉多州大学的Fred Glover教授在1986年左右提出来的,是一个用来跳出局部最优的搜寻方法。

禁忌搜索是一种亚启发式随机搜索算法,它从一个初始可行解出发,选择一系列的特定搜索方向(移动)作为试探,选择实现让特定的目标函数值变化最多的移动。为了避免陷入局部最优解,TS搜索中采用了一种灵活的“记忆”技术,对已经进行的优化过程进行记录和选择,指导下一步的搜索方向。

TS是人工智能的一种体现,是局部领域搜索的一种扩展。禁忌搜索是在领域搜索的基础上,通过设置禁忌表来禁忌一些已经历的操作,并利用藐视准则来奖励一些优良状态,其中涉及邻域 、禁忌表、禁忌长度、候选解、藐视准则等影响禁忌搜索算法性能的关键因素。迄今为止,TS算法在组合优化等计算机领域取得了很大的成功,近年来又在函数全局优化方面得到较多的研究,并大有发展的趋势。

2.算法流程框架


注:
特赦(藐视)原则
(1)基于评价值的规则,若出现一个解的目标值好于前面任何一个最佳候选解,可特赦;
(2)基于最小错误的规则,若所有对象都被禁忌,特赦一个评价值最小的解;

3.算法示例

示例:

禁忌对象为分量的变化,也就是交换两个城市,禁忌长度初始设置为3:

第一步可以看出对换CD评价值最小,因此将其放到禁忌表中,将该解作为当前解:

第二步,可以看出此时对换BC评价值最小,因此将BC放入禁忌表,将该解作为当前解。注意此处禁忌对象及长度表示的理解如下:

对于第一行有3个正方形表示A可以和BCD进行对换,以此类推,对于CD(右下角)标注为3表示此时禁忌对象为CD,禁忌长度是3,后面在添加禁忌对象时就让其减一,进而可以表示进入禁忌表的顺序。

第三步,由于CD和BC以及被禁忌掉,所以此时BD作为禁忌对象,并以该解作为当前解。

此时由于禁忌表已经满了,此时满足藐视准则,将BD替换掉最早进入禁忌表的解CD,同时以该解作为当前解。

4.算法实际应用时的注意点

经过上面的示例,可以看出:
禁忌表的主要指标(两项指标)

  • 禁忌对象:禁忌表中被禁的那些变化元素
  • 禁忌长度:禁忌的步数

对于禁忌对象的选取有以下三种形式:

  1. 解的简单变化:对于上述TSP问题而言,例如:ABCD、BACD等
  2. 解的分量的变化:也就是上述示例的形式
  3. 目标值的变化:对于上述TSP问题,也就是总路径的长度

候选集合的确定
(1)从邻域中选择若干目标值最佳的邻居入选;
(2)随机选取。
评价函数
(1)直接评价函数,通过目标函数的运算得到评价函数;
(2)间接评价函数,构造其他评价函数替代目标函数,应反映目标函数的特性,减少计算复杂性。

记忆频率信息
根据记忆的频率信息(禁忌次数等)来控制禁忌参数(禁忌长度等)。
例如:
如果一个元素或序列重复出现或目标值变化很小,可增加禁忌长度以避开循环;
如果一个最佳目标值出现频率很高,则可以终止计算认为已达到最优值。
终止规则
(1)确定步数终止,优点是易于操作和控制时间,但无法保证解的效果,应记录当前最优解;
(2)频率控制原则,当某一个解、目标值或元素序列的频率超过一个给定值时,终止计算;
(3)目标控制原则,如果在一个给定步数内,当前最优值没有变化,同规则2,可终止计算。

其它较优文章(含代码示例)
https://blog.csdn.net/zuochao_2013/article/details/72292466
https://blog.csdn.net/tyhj_sf/article/details/54235550

禁忌搜索算法详解(含算法示例)相关推荐

  1. 1-Wire搜索算法详解(1)

    最近一直在proteus上仿真单总线搜索算法,虽然参考了美信公司的应用笔记以及其他的一些资源,仍然没有成功,估计应该是protues问题.这里先转载一篇不错的博文,以供参考. 原文连接 http:// ...

  2. 1-Wire搜索算法详解(2)

    原文连接:http://blog.sina.com.cn/s/blog_57ad1bd20102uxxv.html 1-Wire搜索算法详解(2) 4 实例及算法分析 要理解算法,或制定算法,我们需要 ...

  3. DS18B20 1-WIRE ROM搜索算法详解

    转自:http://blog.sina.com.cn/s/blog_57ad1bd20102uxxw.html 1-WIRE搜索算法详解(1) 0前言 美信公司(http://www.maximint ...

  4. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)

    首先,谢谢原作者:(此文为转载的文章,现将原地址贴出如下:以下文章来源于yMatrix,作者MatrixDB团队Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)) 更多精彩Zab ...

  5. Unicode双向算法详解(bidi算法)(二)

    作者:黄邦勇帅(原名:黄勇)2019-10-17 Unicode双向算法详解(bidi算法)(二) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C+ ...

  6. Unicode双向算法详解(bidi算法)(一)

    Unicode双向算法详解(bidi算法)(一) 注:本文已独家授权给脚本之家(ID:jb51net)公众号发布 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是 ...

  7. Unicode双向算法详解(bidi算法)(三)

    Unicode双向算法详解(bidi算法)(三) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C++语法详解>一书相关章节的增补,以增强读者对 ...

  8. 详解线性回归算法的纯Python实现

    ↑↑↑关注后"星标"简说Python人人都可以简单入门Python.爬虫.数据分析 简说Python推荐 来源|天池大数据科研平台作者|黄佳 零基础学机器学习--一文详解线性回归算 ...

  9. A*启发式搜索算法详解 人工智能

    A*启发式搜索算法详解 人工智能 我们尝试解决的问题是把一个游戏对象(game object)从出发点移动到目的地.路径搜索(Pathfinding)的目标是找到一条好的路径--避免障碍物.敌人,并把 ...

  10. jQuery数组处理详解(含实例演示)

    jQuery的数组处理,便捷,功能齐全. 最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生js数组不能企及的功能. 最近时间紧迫,今天抽了些时间回过头来看 jQuery中文文档 中对数组的 ...

最新文章

  1. 【引用】在Eclipse中将java Project转换成Dynamic Web Project
  2. if...else 小练习
  3. ABAP表生成Java实体Bean
  4. ubuntu静态IP设置
  5. PAT1046. 划拳
  6. 如何提高微信公众号流量主收入
  7. Eclipse运行异常:Could not find the main class. Program will exit.
  8. [matlab数字图像处理3]打开一副低对比度图像,拉伸其图像对比度
  9. excel公式不执行。原因是设置问题:公式->计算选项->手动
  10. 数据库SQL实战 --44.将titles_test表名修改为titles_2017
  11. 转载:做正确的事情,等着被开除(Do the right thing, Wait to get fired)
  12. 推特开发者账号 V2【推特开发者文档V2系列1】——获取推特视频播放量
  13. 播放器android版最新官方版下载安装,万能播放器安卓版下载
  14. ||、、!的使用与区别
  15. 廖雪峰Python教程 实战day05
  16. px4驱动linux,S.Bus Driver for Linux
  17. LUNA 黑天鹅事件:Terra CEO关于项目应急方案的社区AMA
  18. Fabric1.0.0单机环境部署
  19. 用word 2003制作毕业论文从正文开始加页码的页眉页脚,去掉页眉横线
  20. 一步一步学区块链(2)工具和技术的介绍

热门文章

  1. 大数据开发之CDH篇----cloudera-scm-agent启动不了后的一堆事
  2. 设置ctfmon.exe自动启动
  3. python 拟合线,拟合函数
  4. JAVA 随机数学习
  5. python导出代码_python导出源代码 python编程
  6. 家庭局域网_KODI超强的局域网视频播放软件
  7. 五边形镶嵌计算机程序,如何看待美国数学家发现可无缝密铺平面的五边形?.doc...
  8. 【AI视野·今日CV 计算机视觉论文速览 第155期】Fri, 6 Sep 2019
  9. Tor 正在开发匿名即时聊天工具
  10. word三线格模版绘制