禁忌搜索算法

Posted hellobigorange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了禁忌搜索算法相关的知识,希望对你有一定的参考价值。

禁忌搜索

适用于离散化变量求解。

一、局部领域搜索

又称爬山启发式算法,从当前的节点开始,和周围的邻居节点的值进行比较。如果当前节点是最大的,那么返回当前节点,作为最大值(即山峰最高点);反之就用最高的邻居节点替换当前节点,从而实现向山峰的高处攀爬的目的。它是禁忌搜索的基础,TS算法是在其上改进而来。

优点:

  • 容易理解,容易实现,具有较强的通用性;

  • 局部开发能力强,收敛速度很快。

缺点:

  • 全局开发能力弱,只能搜索到局部最优解;

  • 搜索结果完全依赖于初始解和邻域的映射关系。

    二、TS算法

    2.1 通过针对爬山法的分析,提出了TS搜索算法:

    算法的基本思想:采用邻域选优的搜索方法,为了逃离局部最优解,算法必须能够接受劣解,也就是每一次得到的解不一定优于原来的解。但是,一旦接受了劣解,算法迭代即可能陷入循环。为了避免循环,算法将最近接受的一些移动放在禁忌表中,在以后的迭代中加以禁止。即只有不在禁忌表中的较好解(可能比当前解差)才能接受作为下一代迭代的初始解。随着迭代的进行,禁忌表不断更新,经过一定的迭代次数后,最早进入禁忌表的移动就从禁忌表中解禁退出。

    • 改进1:接受劣解。

    • 改进2:引入禁忌表。

    • 改进3:引入长期表和中期表。

    2.2 TS算法的特点:

    • 1、基本思想——避免在搜索过程中的循环
    • 2、只进不退的原则,通过禁忌表实现
    • 3、不以局部最优作为停止准则
    • 4、邻域选优的规则模拟了人类的记忆功能

    2.3 TS算法构成要素:

    (1)编码方式

    将不相同的n件物品分为m组,可以用的编码:

    a、带分隔符的顺序编码
    以自然数1~n分别代表n件物品,n个数加上

    m-1个分割符号混编在一起,随机排列。
    
    如:1-3-4-0-2-6-7-5-0-8-9
    

    b、自然数编码
    编码的每一位分别代表一件物品,而每一位的值代表该物品所在的分组。

    如:1-2-1-1-2-2-2-3-3
    

    (2)初始解的获取

    可以随机给出初始解,也可以事先使用其他启发式等算法给出一个较好的初始解。

    (3)移动邻域

    移动是从当前解产生新解的途径,例如上述问题中用移动s产生新解s(x)。
    从当前解可以进行的所有移动构成邻域,也可以理解为从当前解经过“一步”可以到达的区域。

    (4)禁忌表
    禁忌表的作用:防止搜索出现死循环

    • 记录前若干步走过的点、方向或目标值,禁止返回

    • 表是动态更新的

    • 表的长度称为Tabu-Size

      禁忌表的主要指标(两项指标)

    • **禁忌对象:**禁忌表中被禁的那些变化元素

    • **禁忌长度:**对象的禁忌在多少次迭代后失效。

      • 禁忌长度:可以是一个固定的常数(T=c),也可以是动态变化的,可按照某种规则或公式在区间内变化

        • 禁忌长度过短,一旦陷入局部最优点,出现循环无法跳出;
        • 禁忌长度过长,候选解全部被禁忌,造成计算时间较大,也可能造成计算无法继续下去。
      • 禁忌对象(三种变化)

        • 以状态本身或者状态的变化作为禁忌对象
        • 以状态分量以及分量的变化作为禁忌对象
        • 采用类似的等高线做法,以目标值变化作为禁忌对象

    (5)渴望水平函数

    A(x,s)一般为历史上曾经达到的最好目标值,若有C(s(x))<A(x,s)则S(x)是不受T表限制。即使s(x)∈T,仍可取x=s(x)。A(x,s)称为渴望水平函数。

    (6)停止准则
    (1)给定最大迭代步数(最常用 )
    (2)设定某个对象的最大禁忌频率。
    (3)设定适配值的偏离阈值。

    TS算法流程图:

    2.3 禁忌搜索特点

    • 禁忌搜索适用于离散优化,不适合实优化
    • 局部邻域搜索:贪婪、持续在当前的邻域中搜索,直至领域中没有更好的解

    三、TS算法举例

    由7层不同的绝缘材料构成的一种绝缘体,应如何排列顺序,可获得最好的绝缘性能。

    • 编码方式:顺序编码

    • 初始编码:2-5-7-3-4-6-1

    • 目标值:极大化目标值。

    • 邻域移动:两两交换

    • 禁忌表长度(TabuSize):3

    • 迭代次数(NG):5

    注意:左边的表为候选表,右边的表为禁忌表,若任意两两交换的次数过多可能计算缓慢,因此可以规定候选表的长度,每次随机选择两个交换,直到候选表被填满。

    参考:【1】禁忌搜索

以上是关于禁忌搜索算法的主要内容,如果未能解决你的问题,请参考以下文章

优化规划基于matlab禁忌搜索算法求解配电网无功补偿优化规划问题含Matlab源码 1842期

TWVRP基于matlab禁忌搜索和节约算法求解带时间窗的车辆路径规划问题含Matlab源码 1229期

MATLAB禁忌算法(TS)求解TSP问题

VRP问题基于禁忌搜索求解带时间窗的TWVRP问题

VRP问题基于禁忌搜索求解带软时间窗的车辆路径规划TWVRP问题

禁忌搜索算法(Tabu Search)