本文将介绍禁忌搜索算法的一些基本概念、算法流程以及算法的ython实现。(注:本文由有何不可原创,如若转载,请注明文章出处!)
1. 基本思想
禁忌搜索算法的思想最早由美国工程院院士Glover教授于1986年提出,并在1989年和1990年对该方法做出了进一步的定义和发展。
为了克服局部邻域搜索算法容易陷入局部最优的不足,在禁忌搜搜算法中引入了“禁忌表”,该表用于记录已经搜索过的最优点。在下一次的搜索中,则不再或有选择的搜索该点。
禁忌搜索算法是对局部邻域搜索算法的一种扩展,是一种全局邻域搜索算法。在局部邻域搜索算法的基础上,禁忌搜索算法引入“禁忌表”来禁止重复 搜索,并通过藐视准则来释放一些被禁止的对象,从而保证了多样化的搜索,最终实现全局优化。
禁忌搜索算法,由于引入“禁忌表“,则具有了同人类一样的”记忆“的功能,用”记忆“来指导算法的搜索过程。对已经搜索过的地方,不再立即去搜索,转而去搜索其它地方,若在其它最终没有找到,则再去搜索过的地方进行搜索。
2. 算法中涉及的一些概念
- 初始解
- 候选解
- 领域结构
- 禁忌表(禁忌准则)
- 禁忌对象
- 禁忌长度
- 藐视准则
- 搜索策略
- 终止准则
3. 算法流程
- 初始化参数,并随机产生初始解和给定一种邻域结构;
默认初始解为当前解和最优解,并更新禁忌表。 - 根据给定的邻域结构,由当前解随机产生指定数量的候选解;
- 判断候选解是否在禁忌表中;
1). 候选解全都在禁忌表中,选择候选解中最优的解作为当前解和最优解。然后,将当前解与最优解进行比较,以决定是否更新最优解。最后,跳转到步骤 4)。
2). 候选解部分在禁忌表中,判断候选解中是否存在最优解;
a). 存在最优解,判断最优解是否在禁忌表中(禁忌表的操作不同同而已);直接令最优的候选解作为当前解,并更新最优解。然后,跳转到步骤 4)。
b). 不存在最优解,选取不在禁忌表中的最优的候选解,将其与当前解进行比较,以决定是否更新当前解。若更新当前解,则将当前解与最优解进行比较,以决定是否更新最优解。然后,跳转到步骤4)。
3). 候选解全不在禁忌表中
将候选解与当前解进行比较,以决定是否更新当前解。若更新当前解,则将当前解与最优解进行比较,以决定是否更新最优解。然后,跳转到步骤4)。 - 更新禁忌表;
- 判断是否达到迭代次数,若没有达到,则跳转到步骤 2)。否则,直接输出结果。
4. 代码示例 – Python
本文以两个自变量为例,通过计算一个指定函数的最小值,实现TS算法。
1 | # Import the libs |
1 | MIN_VAL = [-5.0, -5.0] # The minmum limit of variable |
1 | # TS |
1 | # main |