禁忌搜索算法
Posted hellobigorange
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了禁忌搜索算法相关的知识,希望对你有一定的参考价值。
禁忌搜索
适用于离散化变量求解。
一、局部领域搜索
又称爬山启发式算法,从当前的节点开始,和周围的邻居节点的值进行比较。如果当前节点是最大的,那么返回当前节点,作为最大值(即山峰最高点);反之就用最高的邻居节点替换当前节点,从而实现向山峰的高处攀爬的目的。它是禁忌搜索的基础,TS算法是在其上改进而来。
优点:
-
容易理解,容易实现,具有较强的通用性;
-
局部开发能力强,收敛速度很快。
缺点:
-
全局开发能力弱,只能搜索到局部最优解;
-
搜索结果完全依赖于初始解和邻域的映射关系。
二、TS算法
2.1 通过针对爬山法的分析,提出了TS搜索算法:
算法的基本思想:采用邻域选优的搜索方法,为了逃离局部最优解,算法必须能够接受劣解,也就是每一次得到的解不一定优于原来的解。但是,一旦接受了劣解,算法迭代即可能陷入循环。为了避免循环,算法将最近接受的一些移动放在禁忌表中,在以后的迭代中加以禁止。即只有不在禁忌表中的较好解(可能比当前解差)才能接受作为下一代迭代的初始解。随着迭代的进行,禁忌表不断更新,经过一定的迭代次数后,最早进入禁忌表的移动就从禁忌表中解禁退出。
-
改进1:接受劣解。
-
改进2:引入禁忌表。
-
改进3:引入长期表和中期表。
2.2 TS算法的特点:
- 1、基本思想——避免在搜索过程中的循环
- 2、只进不退的原则,通过禁忌表实现
- 3、不以局部最优作为停止准则
- 4、邻域选优的规则模拟了人类的记忆功能
2.3 TS算法构成要素:
(1)编码方式
将不相同的n件物品分为m组,可以用的编码:
a、带分隔符的顺序编码
以自然数1~n分别代表n件物品,n个数加上m-1个分割符号混编在一起,随机排列。 如:1-3-4-0-2-6-7-5-0-8-9
b、自然数编码
编码的每一位分别代表一件物品,而每一位的值代表该物品所在的分组。如:1-2-1-1-2-2-2-3-3
(2)初始解的获取
可以随机给出初始解,也可以事先使用其他启发式等算法给出一个较好的初始解。
(3)移动邻域
移动是从当前解产生新解的途径,例如上述问题中用移动s产生新解s(x)。
从当前解可以进行的所有移动构成邻域,也可以理解为从当前解经过“一步”可以到达的区域。(4)禁忌表
禁忌表的作用:防止搜索出现死循环-
记录前若干步走过的点、方向或目标值,禁止返回
-
表是动态更新的
-
表的长度称为Tabu-Size
禁忌表的主要指标(两项指标)
-
**禁忌对象:**禁忌表中被禁的那些变化元素
-
**禁忌长度:**对象的禁忌在多少次迭代后失效。
-
禁忌长度:可以是一个固定的常数(T=c),也可以是动态变化的,可按照某种规则或公式在区间内变化
- 禁忌长度过短,一旦陷入局部最优点,出现循环无法跳出;
- 禁忌长度过长,候选解全部被禁忌,造成计算时间较大,也可能造成计算无法继续下去。
-
禁忌对象(三种变化)
- 以状态本身或者状态的变化作为禁忌对象
- 以状态分量以及分量的变化作为禁忌对象
- 采用类似的等高线做法,以目标值变化作为禁忌对象
-
(5)渴望水平函数
A(x,s)一般为历史上曾经达到的最好目标值,若有C(s(x))<A(x,s)则S(x)是不受T表限制。即使s(x)∈T,仍可取x=s(x)。A(x,s)称为渴望水平函数。
(6)停止准则
(1)给定最大迭代步数(最常用 )
(2)设定某个对象的最大禁忌频率。
(3)设定适配值的偏离阈值。TS算法流程图:
2.3 禁忌搜索特点
- 禁忌搜索适用于离散优化,不适合实优化
- 局部邻域搜索:贪婪、持续在当前的邻域中搜索,直至领域中没有更好的解
三、TS算法举例
由7层不同的绝缘材料构成的一种绝缘体,应如何排列顺序,可获得最好的绝缘性能。
-
编码方式:顺序编码
-
初始编码:2-5-7-3-4-6-1
-
目标值:极大化目标值。
-
邻域移动:两两交换
-
禁忌表长度(TabuSize):3
-
迭代次数(NG):5
注意:左边的表为候选表,右边的表为禁忌表,若任意两两交换的次数过多可能计算缓慢,因此可以规定候选表的长度,每次随机选择两个交换,直到候选表被填满。
参考:【1】禁忌搜索
-
以上是关于禁忌搜索算法的主要内容,如果未能解决你的问题,请参考以下文章
优化规划基于matlab禁忌搜索算法求解配电网无功补偿优化规划问题含Matlab源码 1842期
TWVRP基于matlab禁忌搜索和节约算法求解带时间窗的车辆路径规划问题含Matlab源码 1229期