1、禁忌搜索的基本原理
算法的基本思想:采用邻域选优的搜索方法,为了逃离局部最优解,算法必须能够接受劣解,也就是每一次得到的解不一定优于原来的解。但是,一旦接受了劣解,算法迭代即可能陷入循环。为了避免循环,算法将最近接受的一些移动放在禁忌表中,在以后的迭代中加以禁止。即只有不再禁忌表中的较好解(可能比当前解差)才能接受作为下一代迭代的初始解。随着迭代的进行,禁忌表不断更新,经过一定的迭代次数后,最早进入禁忌表的移动就从禁忌表中解禁退出。
1、TS的要素构成
- 禁忌表(Tabu List)
- 渴望水平函数
- 移动准则——邻域选优
- 选优准则——保持历史上的最优解
- 停止准则——与GA类似
2、禁忌搜索的特点
- 禁忌搜索适用于离散优化,不适合实优化
- 局部邻域搜索:贪婪、持续在当前的邻域中搜索,直至领域中没有更好的解
3、关键步骤
- 邻域搜索:就是从一个解移动到另外一个解
-
邻域的概念:x的邻域移动为
s=
x
+
u
d
s=x+ud
s
=
x
+
u
d
其中,u为单位步长,d为方向,则:
S(
x
)
=
{
s
∣
s
=
x
+
u
d
,
s
∈
X
}
S(x)=\lbrace s|s=x+ud,s \in X \rbrace
S
(
x
)
=
{
s
∣
s
=
x
+
u
d
,
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
(
s
k
(
x
)
)
=
O
p
t
{
C
(
s
(
x
)
)
∣
s
(
x
)
∈
S
(
x
)
−
T
}
C(s_k(x))=Opt\lbrace C(s(x))|s(x)\in S(x)-T\rbrace
C
(
s
k
(
x
)
)
=
O
p
t
{
C
(
s
(
x
)
)
∣
s
(
x
)
∈
S
(
x
)
−
T
}
则令
x
=
s
k
(
x
)
x=s_k(x)
x
=
s
k
(
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
)
∈
T
s(x)\in T
s
(
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(
s
k
(
x
)
)
=
O
p
t
{
C
(
s
(
x
)
)
∣
s
(
x
∈
S
(
x
)
−
T
)
}
C(s_k(x))=Opt\{ C(s(x))|s(x\in S(x)-T)\}
C
(
s
k
(
x
)
)
=
O
p
t
{
C
(
s
(
x
)
)
∣
s
(
x
∈
S
(
x
)
−
T
)
}
令
x=
s
k
(
x
)
x=s_k(x)
x
=
s
k
(
x
)
更新C(x)(C(x)是当前邻域最优目标函数值); -
4、若
C(
s
L
(
x
)
)
<
A
(
s
,
x
)
,
s
L
(
x
)
∈
T
C(s_L(x))<A(s,x),s_L(x)\in T
C
(
s
L
(
x
)
)
<
A
(
s
,
x
)
,
s
L
(
x
)
∈
T
且
C(
S
L
(
x
)
)
<
C
(
x
)
C(S_L(x))<C(x)
C
(
S
L
(
x
)
)
<
C
(
x
)
令
x=
S
L
(
x
)
x=S_L(x)
x
=
S
L
(
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、设定某对象的最大紧急频率