禁忌搜索算法(Tabu Search)

禁忌搜索算法

目录

禁忌搜索算法

产生过程

核心思想及流程

关键名词

特点

在用禁忌搜索的时候需要注意的内容:


产生过程

禁忌搜索是在局部领域搜索(爬山启发式算法)的基础上产生的。

爬山启发式算法:从当前节点开始,和周围的邻居节点的值进行比较。如果当前节点值最大,那么返回当前节点,作为最大值;反之用相邻的最高节点替换当前节点,重复以上操作实现向山峰高处攀爬的目的。因为搜索范围是当前点的邻居节点,因此搜索不够全面,得到的结果可能不是最佳的。

禁忌搜索算法:为了找到全局最优解,在上面的爬山启发式方法的基础上进行改进,不再执着于当前节点的邻居节点进行搜索,具体搜索过程是什么样的呢?看接下来的内容

核心思想及流程

核心思想:首先求解局部最优解并进行标记,在进一步迭代的过程中避开局部最优解,扩大搜索范围。通过将多个局部最优解进行比较,得到全局最优解。

扫描二维码关注公众号,回复: 12714763 查看本文章

算法流程:

(1)产生初始可行解,设置空的禁忌表

(2)判断是否满足接入条件,不满足进入循环

(3)        生成当前解的邻域解,并从中选出候选解

(4)        判断候选解是否满足藐视规则

(5)               满足藐视准则

(6)                      将其作为当前解,替换最早进入禁忌表中的对象,更新最优解,去(2)

(7)               不满足藐视准则

(8)                      判断候选解禁忌属性,看他是否在禁忌表中

(9)                             将非禁忌的最佳候选解作为当前解,用该解对应对象替换最早进入禁忌表中的对象

(10)满足,输出最优解结束。

关键名词

禁忌对象:为了提升计算效率,减少没用的计算,对于一些我们之前选取过,已经计算过的元素,我们要避免一些操作重复计算,我们需要将这些元素放置到禁忌表中来禁止这些元素参与计算,这些元素就是我们所说的禁忌对象。

禁忌长度:指的是被禁对象不允许选取的迭代次数,设t,要求被禁对象在t步之内不允许出现。因此我们可以将所有元素分为两类,一类是被禁元素,另一类是自由元素。

特点

避免在搜索过程中循环

不以局部最优作为停止准则

采用禁忌表在邻域中选取最优解

在用禁忌搜索的时候需要注意的内容:

  1. 解的形式具体问题具体分析:
    • 例如:旅行商问题定义ABCD组成的串为解
  2. 邻域的产生:根据之前定义的解的形式自定义邻域的产生规则,使得产生的邻域尽可能全面
  3. 禁忌表的设置:重点是两个内容,禁忌对象和禁忌长度
    1. 禁忌对象:被禁的变化元素
    2. 禁忌长度:禁忌的步数
  4. 终止条件:
    1. 设置最大迭代次数、
    2. 采用频率控制(对产生的结果进行统计,如果某个目标值或元素出现的频率高于给定阈值,停止迭代输出结果)、
    3. 迭代次数内,历史最优值未发生变化,停止算法

猜你喜欢

转载自blog.csdn.net/CodeSavior/article/details/107756487
今日推荐