禁忌搜索算法(Tabu Search)
1、禁忌搜索的基本原理
1、TS的要素构成
- 禁忌表(Tabu List)
- 渴望水平函数
- 移动准则——邻域选优
- 选优准则——保持历史上的最优解
- 停止准则——与GA类似
2、禁忌搜索的特点
- 禁忌搜索适用于离散优化,不适合实优化
- 局部邻域搜索:贪婪、持续在当前的邻域中搜索,直至领域中没有更好的解
3、关键步骤
- 邻域搜索:就是从一个解移动到另外一个解
- 邻域的概念:x的邻域移动为其中,u为单位步长,d为方向,则:S(x)是邻域移动可达到的集合
4、邻域搜索的步骤:
- 第一步,选择初始解x
- 第二步,在当前解的邻域中选择一个能得到最好解的移动s,即若这样的s不存在,则x就是局部最优解,算法终止;否则s(x)是当前邻域的最好解
- 第三步,令x=s(x)为当前解,转第二步,继续搜索
-
要注意的是,这里指的移动比较灵活,例如:排序问题中一次换位可称为一次移动,还可以定义为选一个切点,两部分作交叉运算
5、禁忌表
禁忌表的作用:防止搜索出现死循环
- 1、记录前若干步走过的点、方向或目标值,禁止返回
- 2、表是动态更新的——把最新的解记入,最老的解从表中释放
- 3、表的长度称为Tabu-Size一般取5、7、11,表长越大分散性越好
6、邻域搜索规则
每一步移动到不在T表中的邻域中的最优解,即若 则令邻域搜索规则的作用:保证TS的优良局部搜索功能
7、渴望水平函数
A(s,x)是一个取决于s和x的值,若有则S(x)是不受T表限制。即使仍可取x=s(x),A(s,x)渴望水平,一般为历史上曾经达到的最好目标值
2、禁忌算法的一般步骤
- 1、选一个初始点x,令迭代指标k=0;
- 2、若S(x)-T=空集停止,否则,令k=k+1,若k>NG停止;
- 要注意:S(x)-T=空,表示非正常终止,造成的原因:邻域小,T表长。正常设置为(T表长度<邻域大小)。步骤2的作用是设置循环体出口
- 3、若令更新C(x)(C(x)是当前邻域最优目标函数值);
- 4、若且令更新C(x);
- 步骤4的作用是破禁检查
- 5、若令
- 步骤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、设定某对象的最大紧急频率