1134 words
6 minutes
禁忌搜索
禁忌搜索是对人类大脑的记忆功能进行模仿的
概述
禁忌搜索算法的一个主要特点是算法具有记忆性,能够对已经搜索到的解进行维护和选择性回避。算法会维护一个禁忌表,通过不断地加入新的禁忌对象和解禁旧的禁忌对象,实现避免重复在一个局部最优解附近进行的过多的无意义操作,从而扩大搜索空间,找到全局最优解。
局部搜索
邻域
- 在函数型优化问题中,邻域被定义为以某点为中心的距离不超过一定阈值的球体。
- 在组合优化问题中,定义邻域映射为 ,其中 表示集合 的全部子集做并集运算形成的集合,显然有 。这里称 为 的邻域,若 ,则 为 的一个邻居。
例如,TSP 问题中,定义邻域映射为一个排列 的两个元素交换 (2-opt) 后的结果。比如,若 ,则 共 个元素。此外,这个定义也可以推广,比如定义排列中的 个元素进行重新排列 (k-opt) 后的结果形成的集合为排列 的邻域 .
局部搜索算法
Algorithm Local Search
| Input: | 问题的解空间 ,初始解 ,目标函数 |
| Output: | 局部最优解 |
| 1: | 选定一个可行解 , 记录当前的最优解为 |
| 2: | 当终止条件未满足时: |
| 3: | 从 中选择一个使目标函数值最好的解 |
| 4: | 如果在去心邻域中找不到比当前解更好的解(即对于最大化问题,),则终止算法 |
| 5: | 否则,令 ,,继续下一次迭代 |
| 6: | 返回局部最优解 |
一次的局部搜索算法无法保证全局最优性,特别依赖于初始点的选取和邻域的结构设置。当初始点选取的足够多时,倒也可以计算出全局最优解。
禁忌搜索
禁忌搜索的核心机制在于记忆,体现在以下几个方面
- 禁忌对象(Tabu Object,TO):禁忌表中记录的元素,可以是完整的解、解的特定属性或导致解变化的移动操作。在实际应用中,通常不会存储完整的解(因为存储开销大),而是记录解的某些关键属性或变换操作。
- 禁忌表(Tabu List,TL):用来存放(记忆)禁忌对象的表,是禁忌搜索算法的基本前提。禁忌表有容量限制,其大小会影响存放禁忌对象的个数,从而影响算法性能。
- 特赦准则(Aspiration Criteria):即使某个移动在禁忌表中,如果它能够带来比当前已知最优解更好的结果,也可以被接受。用于在所有对象都被禁忌时解禁性能最好的对象,或者当解禁某个对象会带来显著改进时使用。
- 禁忌长度:每个禁忌对象在禁忌表中停留的时间长度,表示该对象在多少次迭代内不能被重复选择。禁忌长度可以是固定的,也可以是动态调整的。禁忌长度短难以跳出局部最优,紧急长度过长会增加计算时间。
Algorithm Tabu Search
| Input: | 问题的解空间 ,初始解 ,目标函数 ,禁忌表大小 ,最大迭代次数 |
| Output: | 全局最优解 |
| 1: | 初始化当前解 ,全局最优解 ,禁忌表 |
| 2: | 设置迭代计数器 |
| 3: | 当 时执行以下操作: |
| 4: | 从 中找出所有候选移动,构成候选集合 |
| 5: | 从 中选择一个解 ,满足: 不在禁忌表中,或者 满足特赦准则() |
| 6: | 更新当前解 |
| 7: | 如果 ,则更新全局最优解 |
| 8: | 将导致 的移动或属性加入禁忌表,如果禁忌表长度超过 ,则移除最早加入的元素 |
| 9: | |
| 10: | 返回全局最优解 |
Tabu Search 求解 TSP 问题可视化结果 
Contents
Collection

