禁忌搜索算法(Tabu Search)的基本原理与算法流程总结
1、禁忌搜索的基本原理
算法的基本思想:采用邻域选优的搜索方法,为了逃离局部最优解,算法必须能够接受劣解,也就是每一次得到的解不一定优于原来的解。但是,一旦接受了劣解,算法迭代即可能陷入循环。为了避免循环,算法将最近接受的一些移动放在禁忌表中,在以后的迭代中加以禁止。即只有不再禁忌表中的较好解(可能比当前解差)才能接受作为下一代迭代的初始解。随着迭代的进行,禁忌表不断更新,经过一定的迭代次数后,最早进入禁忌表的移动就从禁忌表中解禁退出。
1、TS的要素构成
- 禁忌表(Tabu List)
- 渴望水平函数
- 移动准则——邻域选优
- 选优准则——保持历史上的最优解
- 停止准则——与GA类似
2、禁忌搜索的特点
- 禁忌搜索适用于离散优化,不适合实优化
- 局部邻域搜索:贪婪、持续在当前的邻域中搜索,直至领域中没有更好的解
3、关键步骤
- 邻域搜索:就是从一个解移动到另外一个解
- 邻域的概念:x的邻域移动为s=x+uds=x+uds=x+ud其中,u为单位步长,d为方向,则:S(x)={s∣s=x+ud,s∈X}S(x)=\lbrace s|s=x+ud,s \in X \rbraceS(x)={s∣s=x+ud,s∈X}S(x)是邻域移动可达到的集合
4、邻域搜索的步骤:
- 第一步,选择初始解x
- 第二步,在当前解的邻域中选择一个能得到最好解的移动s,即c(s(x))<c(x),s(x)∈S(x)c(s(x))<c(x),s(x)\in S(x)c(s(x))<c(x),s(x)∈S(x)若这样的s不存在,则x就是局部最优解,算法终止;否则s(x)是当前邻域的最好解
- 第三步,令x=s(x)为当前解,转第二步,继续搜索
- 要注意的是,这里指的移动比较灵活,例如:排序问题中一次换位可称为一次移动,还可以定义为选一个切点,两部分作交叉运算
5、禁忌表(短期表)
禁忌表的作用:防止搜索出现死循环
- 1、记录前若干步走过的点、方向或目标值,禁止返回
- 2、表是动态更新的——把最新的解记入,最老的解从表中释放
- 3、表的长度称为Tabu-Size一般取5、7、11,表长越大分散性越好
6、中期表:
也称为频数表或者频率表,对从一个解到另一个解的移动被禁忌的次数进行记录,对被禁忌次数较多的移动实行一定的惩罚策略。
7、长期表:
引入长期表以后,禁忌搜索算法就成为了多阶段禁忌搜索算法。如果经过多次迭代仍然不能更新历史最优解,可以重新给出初始解,在一个新的区域开始搜索,这种记录多个初始解的表称为长期表.
8、邻域搜索规则
每一步移动到不在T表中的邻域中的最优解,即若C(sk(x))=Opt{C(s(x))∣s(x)∈S(x)−T}C(s_k(x))=Opt\lbrace C(s(x))|s(x)\in S(x)-T\rbraceC(sk(x))=Opt{C(s(x))∣s(x)∈S(x)−T} 则令x=sk(x)x=s_k(x)x=sk(x)邻域搜索规则的作用:保证TS的优良局部搜索功能
9、渴望水平函数
A(s,x)是一个取决于s和x的值,若有C(s(x))<A(s,x)C(s(x))<A(s,x)C(s(x))<A(s,x)则S(x)是不受T表限制。即使s(x)∈Ts(x)\in Ts(x)∈T仍可取x=s(x),A(s,x)渴望水平,一般为历史上曾经达到的最好目标值
2、禁忌算法的一般步骤
- 1、选一个初始点x,令x∗=x,T=空集x^*=x,T=空集x∗=x,T=空集迭代指标k=0;
- 2、若S(x)-T=空集停止,否则,令k=k+1,若k>NG停止;
- 要注意:S(x)-T=空,表示非正常终止,造成的原因:邻域小,T表长。正常设置为(T表长度<邻域大小)。步骤2的作用是设置循环体出口
- 3、若C(sk(x))=Opt{C(s(x))∣s(x∈S(x)−T)}C(s_k(x))=Opt\{ C(s(x))|s(x\in S(x)-T)\}C(sk(x))=Opt{C(s(x))∣s(x∈S(x)−T)}令x=sk(x)x=s_k(x)x=sk(x)更新C(x)(C(x)是当前邻域最优目标函数值);
- 4、若C(sL(x))<A(s,x),sL(x)∈TC(s_L(x))<A(s,x),s_L(x)\in TC(sL(x))<A(s,x),sL(x)∈T且C(SL(x))<C(x)C(S_L(x))<C(x)C(SL(x))<C(x)令x=SL(x)x=S_L(x)x=SL(x)更新C(x);
- 步骤4的作用是破禁检查
- 5、若C(x)<C(x∗)C(x)<C(x^*)C(x)<C(x∗)令x∗=x,C(x∗)=C(x),A(s,x)=C(x∗)x^*=x,C(x^*)=C(x),A(s,x)=C(x^*)x∗=x,C(x∗)=C(x),A(s,x)=C(x∗)
- 步骤5的作用是选优并记录历史最优值,更新渴望水平
- 6、更新T表,转步骤2(x存入T表中的第一个位置)
3、算法的构成要素
1、编码
例如:各不相同的n件物品分为m组,满足特定约束条件,要达到特定的目标函数
a)带分隔符号的顺序编码(n=9,m=3)
1-3-4-0-2-6-7-5-0-8-9
b)自然编码
1-2-1-1-2-2-2-3-3
**要注意:**希望编码空间的大小和解空间一样大
2、实值函数
目标函数的任何变形都可,但是大小顺序不能变
3、初始解
随机获得初始解;如果随机获得的初始解不可行,可以针对特定的约束启用启发式方法或者其他方法找出一个可行解作为初始解
4、移动与邻域移动
邻域移动的方法很多,根据不同问题设计不同的移动规则。类似于遗传算法中的交叉与变异
5、禁忌表
作用:防止搜索过程出现循环避免陷入局部最优;是仅计算法的核心,其功能和人类的短期记忆相似
禁忌对象:a)以状态本身或者状态的变化作为禁忌对象
b)以状态分量或者状态分量的变化作为禁忌对象
c)将目标值作为禁忌对象
注意:禁忌范围较大容易陷入局部最优,反之,容易陷入循环
禁忌长度:禁忌表的大小,长度大小不但影响搜索时间,还直接影响局域搜索策略和广域搜索策略。长:更适合广域搜索;短:局域性好
策略:根据问题的规模、邻域大小来确定
禁忌长度可以固定不变,也可以随着迭代的进行而改变
6、选择策略
- 1、候选解集为整个邻域
缺点是:只适合解决小规模问题 - 2、候选解集为邻域的真子集
缺点是:本策略选择第一个找到的改进解,马上停止。如果整个领域中都没有改进解,只能选择一个最好的劣解。 - 注意:本策略没有考虑禁忌表。事实上,其中的邻域应该指除了禁忌解之外的区域
7、渴望水平
在某些特定的条件下,是否在禁忌表中,都接受这个移动,并更新当前解和历史最优解。这个移动满足的这个特定条件,称为渴望水平。
a)基于适应值的选择
b)基于搜索方向的准则
c)基于影响力的准则
d)其他准则
8、停止准则
- 1、给出最大迭代步数
- 2、得到满意解
- 3、设定某对象的最大紧急频率
禁忌搜索算法(Tabu Search)的基本原理与算法流程总结相关推荐
- 【算法】禁忌搜索算法(Tabu Search,TS)超详细通俗解析附C++代码实例
01 什么是禁忌搜索算法? 1.1 先从爬山算法说起 爬山算法从当前的节点开始,和周围的邻居节点的值进行比较. 如果当前节点是最大的,那么返回当前节点,作为最大值 (既山峰最高点):反之就用最高的邻居 ...
- 禁忌搜索算法(tabu search)解决TSP及其Matlab代码
1.算法简介 禁忌搜索算法TS(Tabu search),顾名思义核心在于"禁忌",简单来说就是在某一个过程中把一些不太好的操作给禁止了,直到搜索到一个"最优秀" ...
- 禁忌搜索算法例题 c语言,禁忌搜索算法(Tabu Search)
由7层不同的绝缘材料构成的一种绝缘体,应如何排列顺序,可获得最好的绝缘性能. 编码方式:顺序编码 初始编码:2-5-7-3-4-6-1 目标值:极大化目标值. 邻域移动:两两交换 TabuSize:3 ...
- 禁忌搜索(Tabu Search)算法及python实现
禁忌搜索(Tabu Search)算法及python实现 版权声明:本文为博主原创文章,博客地址:https://blog.csdn.net/adkjb,未经博主允许不得转载. 禁忌搜索(Tabu S ...
- 元启发式算法 | 禁忌搜索(Tabu Search)解决TSP问题(Python)
[元启发式算法]禁忌搜索(Tabu Search)解决TSP问题(Python) 文章目录 [元启发式算法]禁忌搜索(Tabu Search)解决TSP问题(Python) 1.Tabu Search ...
- 局部搜索:禁忌搜索(Tabu Search)解决TSP问题的python案例
禁忌搜索解决TSP问题的python案例 Tabu Search 禁忌(Tabu Search)算法是一种亚启发式(meta-heuristic)随机搜索算法,它从一个初始可行解出发,选择一系列的特定 ...
- 禁忌搜索(Tabu Search)原理梳理和应用细节-附求解VRPTW问题C++代码
文章目录 1.禁忌搜索(TS)的相关概念 1.1 搜索空间(search space) 1.2 邻域结构(neighborhood structure) 1.3 禁忌表(tabu) 1.4 解禁标准( ...
- java 路径规划_转 | 禁忌搜索算法(Tabu Search)求解带时间窗的车辆路径规划问题详解(附Java代码)...
以下文章来源于数据魔术师 ,作者周航 欲下载本文相关的代码及算例,请关注公众号[程序猿声],后台回复[TSVRPJAVA]不包括[]即可 前言 大家好呀! 眼看这9102年都快要过去了,小编也是越来越 ...
- Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码
本文来源于公众号[程序猿声],作者舟寒丶 作业车间调度问题 问题模型 举个栗子 有关禁忌搜索算法的内容,公众号内有详细教程: 干货 |[算法]禁忌搜索算法(Tabu Search,TS)超详细通俗解析 ...
- 干货 | Tabu Search求解作业车间调度问题(Job Shop Scheduling)-附Java代码
本文来源于公众号[程序猿声],作者舟寒丶 作业车间调度问题 问题模型 举个栗子 有关禁忌搜索算法的内容,公众号内有详细教程: 干货 |[算法]禁忌搜索算法(Tabu Search,TS)超详细通俗解析 ...
最新文章
- 李开复开发的国际象棋软件
- TCP连接之报文首部
- TypeScript 函数类型参数的用法举例
- swift5的SnipKit框架使用
- 页面中用到iframe不能完全显示的解决方案
- 文件下载至storage_如何防止Storage Sense在Windows 10上删除下载的文件
- 抓包软件:Charles
- 创业失败常见的8大原因
- openoffice转化太慢且不能多线程_职场新人众多工作要处理,手足无措咋办?“多线程工作法”来救急...
- 浅谈一下session问题
- c#二次开发明华URF-R330读写器读写问题解决方案
- m 序列性质的简单证明
- 中铁二局全面推行建筑工地务工人员实名制管理
- python爬虫爬取合肥工业大学校园新闻
- cas和saml_结合使用SAML安全令牌和Microsoft Web Services增强功能
- CDOJ1323柱爷的下凡
- 关于height:100%的简单理解
- win server服务器 关闭危险端口 135,137,138,139,445的方法
- Echarts动态生成图表,图表类型进行切换,长数据区域展示
- 这十个Python语法,让你的代码更为精炼高效!