Python代码链接放文末。

本文参考了很多张军老师《计算智能》的第十章知识。

本文来源:https://blog.csdn.net/qq_44186838/article/details/109181453

禁忌搜索算法

1.1 算法思想

禁忌搜索(Tabu Search, TS)也是属于模拟人类智能的一种优化算法。

上图涉及到了禁忌搜索中的一些基本概念,现在来对这些概念作解释。

禁忌表(Tabu List,TL)
是用来存放(记忆)禁忌对象的表。它是禁忌搜索得以进行的基本前提。禁忌表本身是有容量限制的,它的大小对存放禁忌对象的个数有影响,会影响算法的性能。

禁忌对象(Tabu Object,TO)
是指禁忌表中被禁的那些变化元素。禁忌对象的选择可以根据具体问题而制定。例如在旅行商问题(Traveling Salesman Problem,TSP)中可以将交换的城市对作为禁忌对象,也可以将总路径长度作为禁忌对象。

禁忌期限(Tabu Tenure,TT)
也叫禁忌长度,指的是禁忌对象不能被选取的周期。禁忌期限过短容易出现循环,跳不出局部最优,长度过长会造成计算时间过长。

渴望准则(Aspiration Criteria,AC)
也称为特赦规则。当所有的对象都被禁忌之后,可以让其中性能最好的被禁忌对象解禁,或者当某个对象解禁会带来目标值的很大改进时,也可以使用特赦规则。

1.2 基本流程

禁忌搜索算法在初始化的时候,在搜索空间随机生成一个初始解 i,禁忌表H置空,当前解i记为历史最优解 s,然后进入迭代的搜索过程。在每一次迭代中,都从当前的解i出发,在当前禁忌表H的限制下,构造出解i的邻域A,然后从A中选出适应值最好的解 j 来替换解 i,同时更新禁忌表H。在解 j 替换解 i 之后,如果解 i 的质量得到改善,那么历史最优的解 s 将被解 i 替换;否则,s 保持不变,即使解 i 虽然暂时变差了,但是由于扩大了搜索空间,仍有利于跳出局部最优。得到了新的当前解 i 之后,算法返回迭代的开始继续进行,直到找到最优解或者运行了一定的迭代次数等终止条件的时候结束算法。

基本流程图和伪代码如下:


1.3 应用举例

啥?上面听不懂?那麻烦给我点个赞,然后看一看下面的内容哈哈。

问题:已知一个旅行商问题为四城市(a,b,c,d)问题,城市间的距离如矩阵D所示,为方便起见,假设邻域映射定义为两个城市位置对换,而始点和终点城市都是a。请分析使用禁忌搜索算法求解该问题的前面三代的过程与主要步骤。

在开始求解之前我们先分析一下问题。

分析:这是一个简单的问题,利用枚举的方法也可以找到最优的答案,但是,找到答案不是我们的目的,我们主要是想通过一一个简单的例子来理解禁忌搜索是如何进行工作的。从距离矩阵D可以看到,这是一个非对称的TSP问题,但是这并不影响算法的执行。由于题目假设了邻域构造的方式,而且规定了始点和终点都是城市a,因此,在以下的求解过程中,我们不使用城市a和其他城市进行交换,这样的操作并不会影响全局寻优的能力。

求解:

注:在实际应用中,通过选择更高的禁忌对象,设置合理的禁忌期限,或者采用其他更好的的参数,都可以避免循环(反复出现同种情况的邻域值)的出现,提高算法的性能。

代码下载链接,有需要的请自行提取,不想hua前的朋友,可评论同我说,我会回复你,但可能会比较慢。祝好!

https://download.csdn.net/download/qq_44186838/62601760
智能优化算法大礼包

一文搞懂什么是禁忌搜索算法Tabu Search【附应用举例】相关推荐

  1. 一文搞懂什么是遗传算法Genetic Algorithm【附应用举例】

    代码链接放文末. 本文参考了很多张军老师<计算智能>的第四章内容. 本文来源:https://blog.csdn.net/qq_44186838/article/details/10918 ...

  2. 【算法】禁忌搜索算法(Tabu Search,TS)超详细通俗解析附C++代码实例

    01 什么是禁忌搜索算法? 1.1 先从爬山算法说起 爬山算法从当前的节点开始,和周围的邻居节点的值进行比较. 如果当前节点是最大的,那么返回当前节点,作为最大值 (既山峰最高点):反之就用最高的邻居 ...

  3. 禁忌搜索算法(tabu search)解决TSP及其Matlab代码

    1.算法简介 禁忌搜索算法TS(Tabu search),顾名思义核心在于"禁忌",简单来说就是在某一个过程中把一些不太好的操作给禁止了,直到搜索到一个"最优秀" ...

  4. 禁忌搜索算法例题 c语言,禁忌搜索算法(Tabu Search)

    由7层不同的绝缘材料构成的一种绝缘体,应如何排列顺序,可获得最好的绝缘性能. 编码方式:顺序编码 初始编码:2-5-7-3-4-6-1 目标值:极大化目标值. 邻域移动:两两交换 TabuSize:3 ...

  5. 入门科普:一文看懂NLP和中文分词算法(附代码举例)

    导读:在人类社会中,语言扮演着重要的角色,语言是人类区别于其他动物的根本标志,没有语言,人类的思维无从谈起,沟通交流更是无源之水. 所谓"自然"乃是寓意自然进化形成,是为了区分一些 ...

  6. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  7. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  8. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  9. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  10. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

最新文章

  1. 【组队学习】【34期】Scratch(二级)
  2. ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门
  3. RunTime技术总结
  4. psm倾向得分匹配法举例_互助问答第110期:分组回归样本及倾向得分匹配相关问题...
  5. linux tcp参数调优,Linux TCP 性能调优笔记
  6. Jquery 常用总结
  7. 机器学习(七)支持向量机svm中级篇
  8. R语言switch语句报错Error: duplicate ‘switch‘ defaults
  9. linux网络编程之socket:使用fork并发处理多个client的请求
  10. android系统广播 定向广播,Android之定向广播
  11. thymeleaf 使用页面报错_SpringBoot 使用thymeleaf 跳转页面时,总是提示404找不到页面...
  12. python GIL 全局锁
  13. 微软ad域管理工具_比较好的第三方微软AD域管理工具有哪些?
  14. FOI对象中显示labels --Oracle Map
  15. 深入理解之border属性(第一期)
  16. html文件关联异常怎么修复,在Win7系统中,如何修复exe文件关联错误?
  17. 文本自动生成研究进展与趋势之文本到文本的生成
  18. JAVA常用类之日期处理
  19. qrcode获取图片链接在安卓/ios上的问题
  20. 收藏几个百度网盘搜索资源引擎

热门文章

  1. 硬件升级win8.1重新安装系统
  2. addEventListener与attachEvent
  3. java商城系统设计——秒杀
  4. 人工智能--遗传算法求解TSP问题
  5. 为什么大家越来越重视大数据的发展?
  6. 先测试再开发?TDD测试驱动开发了解一下?
  7. Xshell5和Xftp传输工具的安装和配置
  8. java图书馆_java入门第三季--图书馆借书系统
  9. Hough变换圆检测定位
  10. QuartusII下载程序报错,无法正常下载