禁忌搜索算法(Tabu Search,TS))

干货 | 到底是什么算法,能让人们如此绝望?

禁忌搜索
  • TS是Local Search(LS)的扩展,是一种全局逐步寻优的全局性邻域搜索算法。
  • TS模仿人类的记忆功能,在搜索过程中标记已经找到的局部最优解及求解过程,并于之后的搜索中避开它们
  • 算法通过禁忌策略实现记忆功能,通过破禁准则继承LS的强局部搜索能力。使得TS一方面具备高局部搜索能力,同时又能防止算法在优化中陷入局部最优。
TS主要构成要素
  1. 评价函数(Evaluation Function):用来评价邻域中的邻居、判断其优劣的衡量指标。
  2. 邻域移动(Move Operator):进行解转移的关键,又称“算子”,影响整个算法的搜索速度。
  3. 禁忌表(Tabu Table):记录被禁止的变化,以防出现搜索循环、陷入局部最优。
    对其设计中最关键的因素是禁忌对象(禁忌表限定的对象)和禁忌步长(对象的禁忌在多少次迭代后失效)。
    禁忌表是禁忌搜索算法的核心,禁忌表的对象、步长及更新策略在很大程度上影响着搜索速度和解的质量。若禁忌对象不准确或者步长过小,算法避免陷入局部最优的能力会大打折扣;若禁忌表步长过大,搜索区域将会限制,好的解就可能被跳过。
  4. 邻居选择策略(Neighbor Selection Strategy):选择最佳邻域移动的规则。目前最广泛采用的是“最优解优先策略”及“第一个改进解优先策略”。
  5. 破禁准则(Aspiration Criterion):对于禁忌表的适度放松。当某个被禁忌的移动可得到优于未被禁忌的移动得到的最优邻域解和历史所得到的最优解时,算法应接受该移动,不受禁忌表的限制。
  6. 停止规则(Stop Criterion):禁忌搜索中停止规则的设计多种多样,如最大迭代数、算法运行时间、给定数目的迭代内不能改进解或组合策略等等。
TS算法性能

通过一系列关于TSP的实验得到以下结论:

  1. 禁忌策略大大加强了算法的搜索能力
  2. 问题规模较小时,禁忌搜索能得到最优解;
    问题规模较大时,禁忌搜索能在规定时间内输出满意解。
  3. 禁忌对象的选择对算法效果存在较大影响

干货 | 十分钟掌握禁忌搜索算法求解带时间窗的车辆路径问题(附C++代码和详细代码注释)

TS基本步骤
  1. 初始化
    利用贪婪算法等局部搜索算法生成一个初始解,清空禁忌表,设置禁忌长度
  2. 邻域搜索产生候选解
    根据步骤1产生初始解,通过搜索算子(search operators),如relocation、exchange、2-opt等,产生候选解(candidate solution),并计算各个候选解的适应值(即解对应的目标函数值)
  3. 选择最好的候选解
    从步骤2产生的所有候选解中选出适应值最好的候选解,将其与当前最好解(即搜索算法开始到现在找到的最好解)进行比较
    如果优于当前最好解,那么就不考虑其是否被禁忌,用这个最好的候选解来更新当前最好解,并且作为下一个迭代的当前解,然后将对应的操作加入禁忌表;
    如果不优于当前最好解,就从所有候选解中选出不在禁忌状态下的最好解作为新的当前解,然后将对应操作加入禁忌表。
  4. 判断终止条件
    若满足终止条件,则立即停止并输出当前最好解;否则继续搜索。
    一般终止条件为是否到达一定的迭代次数或者达到了一个时间限制

TS流程图

禁忌搜索算法流程图

禁忌搜索算法涉及编码解码(Encoding and decoding)、搜索算子(search operators)、邻域 (Neighborhood)、禁忌表(Tabu list)、禁忌长度(Tabu tenure)、候选解(Candidate solution)、藐视准则(Aspiration criterion)等关键组成部分。

TS求解TSP

算例

5个城市的TSP算例

  1. 编码和解码


    初始解

    初始解对应的适应度F=37

  2. 搜索算子
    (1)Relocation算子:在当前解中选择并移除一个节点(node),然后再选择一个位置将选中的节点插入


    relocation算子

    适应度变化量△F=6
    (2)Swap算子:在当前解中同时选择两个不同的节点,然后对这两个节点的位置交换


    swap算子

    适应度变化量△F=4
  3. 邻域
    从当前解对一系列的搜索方向进行一次试探(通过算子搜索一次)能得到的所有解的集合,即仅经过一次操作能得到的所有解


    邻域(候选解集合)
  4. 禁忌表
    记录当前所选择操作的状态变化,一般包括禁忌对象和禁忌长度


    候选解10改进最大,禁忌对象如图所示
  5. 禁忌长度
    禁止在之后的l次迭代中对禁忌表中所记录的状态进行改变,这里的l即称为禁忌长度
  6. 候选解
    当前邻域中的解
  7. 藐视准则
    从候选解集合中挑选出最好的候选解,将其与当前最好解进行比较,若其是被禁止的解但是优于当前最好解,那么就将其解禁,用来作为下一迭代的当前解并及替代当前最好解。
    藐视准则(Aspiration criterion)防止了因为禁忌表的存在,而错过优异解的情况出现。
TS求解VRPTW

VRPTW:带时间窗的车辆路径问题
问题描述
假设一个配送中心为周围若干个位于不同地理位置、且对货物送达时间有不相同要求的客户点提供配送服务。其中,配送中心全部用于运行的车辆都是同一型号的(即拥有相同的容量);配送中心对车辆出入的时间有限制;车辆在所有客户点有相同的停留服务时间
操作设置

  • 编码方式采取自然数编码,利用将车辆所需服务客户点的集合(解集)作为集合内元素数目大小的自然数数组。数组中各个元素的值代表各个客户点的编号,元素的顺序代表服务客户点的顺序。
  • 搜索算子采用插入算子:删除原路径中的客户节点,遍历插入到任意车辆路径的任意位置,选取邻域最好解或者非禁忌最好解作为下一迭代的当前解。邻域为插入算子完全遍历能得到的解的集合。

你可能感兴趣的:(禁忌搜索算法(Tabu Search,TS)))