一.局部领域搜索
Local Search(LS),又称爬山启发式算法,从当前的节点开始,和周围的邻居节点的值进行比较。如果当前节点是最大的,那么返回当前节点,作为最大值(即山峰最高点);反之就用最高的邻居节点替换当前节点,从而实现向山峰的高处攀爬的目的。它是禁忌搜索的基础,TS算法是在其上改进而来。
优点:
1、容易理解,容易实现,具有较强的通用性;
2、局部开发能力强,收敛速度很快。
缺点:
1、全局开发能力弱,只能搜索到局部最优解;
2、搜索结果完全依赖于初始解和邻域的映射关系。
通过针对爬山法的分析,提出了TS搜索算法:
改进1:接受劣解。
改进2:引入禁忌表。
改进3:引入长期表和中期表。
二.禁忌搜索
TS是Local Search(LS)的扩展,是一种全局逐步寻优的全局性邻域搜索算法。
传统的LS通过迭代,不断搜寻邻域中更优的解来替换当前解,实现优化,该方式容易陷入局部最优。
TS模仿人类的记忆功能,在搜索过程中标记已经找到的局部最优解及求解过程,并于之后的搜索中避开它们。
算法通过禁忌策略实现记忆功能,通过破禁准则继承LS的强局部搜索能力。种种机制的配合,使得TS一方面具备高局部搜索能力,同时又能防止算法在优化中陷入局部最优。
为了找到“全局最优解”,就不应该执着于某一个特定的区域。局部搜索的缺点就是太贪婪地对某一个局部区域以及其邻域搜索,导致一叶障目,不见泰山。禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它(但不是完全隔绝),从而获得更多的搜索区间。兔子们找到了泰山,它们之中的一只就会留守在这里,其他的再去别的地方寻找。就这样,一大圈后,把找到的几个山峰一比较,珠穆拉玛峰脱颖而出。
当兔子们再寻找的时候,一般地会有意识地避开泰山,因为他们知道,这里已经找过,并且有一只兔子在那里看着了。这就是禁忌搜索中“禁忌表(tabu list)”的含义。那只留在泰山的兔子一般不会就安家在那里了,它会在一定时间后重新回到找最高峰的大军,因为这个时候已经有了许多新的消息,泰山毕竟也有一个不错的高度,需要重新考虑,这个归队时间,在禁忌搜索里面叫做“禁忌长度(tabu length)”;如果在搜索的过程中,留守泰山的兔子还没有归队,但是找到的地方全是华北平原等比较低的地方,兔子们就不得不再次考虑选中泰山,也就是说,当一个有兔子留守的地方优越性太突出,超过了“best so far”的状态,就可以不顾及有没有兔子留守,都把这个地方考虑进来,这就叫“特赦准则(aspiration criterion)”。这三个概念是禁忌搜索和一般搜索准则最不同的地方,算法的优化也关键在这里。
1.Tabu Search 主要构成要素
(1)评价函数(Evaluation Function):评价函数是用来评价邻域中的邻居、判断其优劣的衡量指标。大多数情况下,评价函数为目标函数。但自定义的形式也可存在,算法也可使用多个评价函数,以提高解的分散性(区分度)。
(2)邻域移动(Move Operator):邻域移动是进行解转移的关键,又称“算子”,影响整个算法的搜索速度。邻域移动需要根据不同的问题特点来自定义,而整个邻近解空间是由当前解通过定义的移动操作构筑的所有邻域解构成的集合。
(3)禁忌表(Tabu Table, Tabu List):禁忌表记录被禁止的变化,以防出现搜索循环、陷入局部最优。对其的设计中最关键的因素是禁忌对象(禁忌表限定的对象)和禁忌步长(对象的禁忌在多少次迭代后失效)。
- 禁忌长度:则是禁忌表所能接受的最多禁忌对象的数量。
- 禁忌步长:对象的禁忌在多少次迭代后失效。
禁忌表是禁忌搜索算法的核心,禁忌表的对象、步长及更新策略在很大程度上影响着搜索速度和解的质量。若禁忌对象不准确或者步长过小,算法避免陷入局部最优的能力会大打折扣;若禁忌表步长过大,搜索区域将会限制,好的解就可能被跳过。
(4)邻居选择策略(Neighbor Selection Strategy):选择最佳邻域移动的规则。目前最广泛采用的是“最好解优先策略”及“第一个改进解优先策略”。前者需比较所有邻域,耗时较久,但解的收敛更有效;后者在发现第一个改进解就进行转移,耗时较少,但收敛效率弱于前者,对于邻域解空间较大的问题往往比较适合。
- 侯选集合:由邻域中的邻居组成。常规的方法是从邻域中选择若干个目标值或评价 值最佳的邻居入选。
(5)破禁准则(Aspiration Criterion):破禁准则是对于禁忌表的适度放松。当某个被禁忌的移动可得到优于未被禁忌的移动得到的最优邻域解和历史所得到的最优解时,算法应接受该移动,不受禁忌表的限制。
(6)停止规则(Stop Criterion):禁忌搜索中停止规则的设计多种多样,如最大迭代数、算法运行时间、给定数目的迭代内不能改进解或组合策略等等。
2.Tabu Search 流程
3.举例详述TS算法过程
现有一架飞机,从A点出发,需要经过C,D,E,F之后返回A点,且每个点只能经过一次,最后返回A点,求最短路径。
该问题是一个Hamilton回路问题,其中起点和终点已经固定,因此我们可以将解形式记为,例如【A,D,C,F,E,A】,每次只需变换中间两个元素即可,现在我们将禁忌长度设置为2,候选集合长度定义为4,迭代次数为100,通过以下步骤能使读者更清洗的了解TS算法的步骤。
- 初始解:x1 = 【A,D,C,F,E,A】,f(x1)=10
- 评价函数:路径长度f
- 禁忌长度:设置为2
- 候选集合长度:定义为4,交换中间两个元素的位置,可以有6种可能,选则其中4种作为候选集合。
- 迭代次数:100
- 历史最优解
第一次迭代:
给定任意初始解 x1=【A,D,C,F,E,A】f(x1)=10,历史最优为10
候选集合 | 禁忌表 |
---|---|
【A,C,D,F,E,A】 f=15 | |
【A,D,C,E,F,A】 f=20 | |
【A,D,F,C,E,A】 f=8 | |
【A,E,C,F,D,A】 f=6 |
我们发现对x1交换D和E时,f最优,此时x2=【A,E,C,F,D,A】 f(x2)=6,历史最优为6,将D-E放入禁忌表中。
第二次迭代:
候选集合 | 禁忌表 |
---|---|
【A,E,F,C,D,A】 f=9 | D-E |
【A,F,C,E,D,A】 f=15 | |
【A,C,E,F,D,A】 f=6 | |
【A,E,D,F,C,A】 f=5 |
我们发现对x2交换C和D时,f最优,此时x3=【A,E,D,F,C,A】 f(x3)=5,历史最优为5,将D-C放入禁忌表中
第三次迭代:
候选集合 | 禁忌表 |
---|---|
【A,E,C,F,D,A】 f=8 | D-E |
【A,E,F,D,C,A】 f=10 | D-C |
【A,E,D,C,F,A】 f=14 | |
【A,C,D,F,E,A】 f=16 |
此时我们发现对x3交换D和C时最优,但是由于D-C已经在禁忌表中,因此我们退而求其次,对x3交换F和D,此时x4=【A,E,F,D,C,A】 f(x4)=10,历史最优为5,将F-D放入禁忌表中,由于禁忌长度为2,因此将最先放入禁忌表中的D-E移除禁忌表。
第四次迭代:
候选集合 | 禁忌表 |
---|---|
【A,E,F,C,D,A】 f=4 | D-C |
【A,E,C,D,F,A】 f=5 | F-D |
【A,F,E,D,C,A】 f=7 | |
【A,C,F,D,C,A】 f=10 |
此时我们发现对x4交换D和C时最优,虽然D-C已经在禁忌表中,但是f(D-C)<历史最优5,因此满足特赦规则,现在将D-C移除禁忌表,此时x5=【A,E,F,C,D,A】 f(x5)=4,历史最优为4,然后再将D-C放入禁忌表。
第五次迭代:
候选集合 | 禁忌表 |
---|---|
【A,C,F,E,D,A】 f=5 | D-F |
【A,E,C,F,D,A】 f=7 | C-D |
【A,D,F,C,E,A】 f=9 | |
【A,F,E,C,D,A】 f=29 |
依次迭代下去,当迭代次数超过100时停止迭代,历史最优值即为输出解。