• 禁忌搜索算法


    引言

    对于优化问题相关算法有如下分类:
    这里写图片描述
    禁忌搜索是由局部搜索算法发展而来,爬山法是从通用局部搜索算法改进而来。在介绍禁忌搜索之前先来熟悉下爬山法和局部搜索算法。

    局部搜索算法

    算法的基本思想

    在搜索过程中,始终选择当前点的邻居中与离目标最近者的方向搜索。

    算法过程

    1)随机选择一个初始的可能解x0 ∈D,xb=x0,P=N(xb);
         //D是问题的定义域, xb用于记录到目标位置的最优解,P为xb的邻域。2)如果不满足结束条件,则: 
        //结束条件为循环次数或P为空等3)Begin;
    (4)选择P的一个子集P',xn为P’的最优解 ;      
        //P’可根据问题特点,选择适当大小的子集。可按概率选择5)如果f(xn)<f(xb),则xb=xn,P=N(xb),转(2);    
        //重新计算P,f(x)为指标函数6)否则P=P-P',转(2);7)End;
    (8)输出计算结果;
    (9)结束 ;
    View Code

    爬山法

    算法的基本思想

    将搜索过程比作爬山过程,在没有任何有关山顶的其他信息的情况下,沿着高度增加的方向爬。如果相邻状态没有比当前值更高,则算法停止,认为当前值即为顶峰。

    算法过程

    1) 设置初始状态n=s0为当前状态;
    (2) 如果当前状态已达标,算法结束,搜索成功;
    (3)获取当前状态n的若干个临近状态m,计算这些h(m), nextn=min{h(m)};
    (4) IF h(n) < h(nextn) 
        THEN  n:=nextn;
        ELSE 取当前状态为最佳状态并退出;
    (5) GOTO (2)步;
    View Code

    该算法在单峰的条件下,必能达到山顶。
    显而易见爬山法对于复杂情况的求解会遇到以下问题:
    (1)局部极值
    (2)山脊:造成一系列的局部极值
    (3)高原:平坦的局部极值区域——解决办法:继续侧向移动
    目前有些改进的爬山法,比如随机爬山法、首选爬山法等等不再细说。

    禁忌搜索算法

    算法思想

    标记已经解得的局部最优解或求解过程,并在进一步的迭代中避开这些局部最优解或求解过程。局部搜索的缺点在于,太过于对某一局部区域以及其邻域的搜索,导致一叶障目。为了找到全局最优解,禁忌搜索就是对于找到的一部分局部最优解,有意识地避开它,从而或得更多的搜索区域

    算法过程

    1)给定一个禁忌表(Tabu List)H=null,并选定一个初始解X_now.
    (2)如果满足停止规则,则停止计算,输出结果;否则,在X_now的领域中选出满足不受禁忌的候选集N(X_now).在N(X_now)中选择一个评价值最贱的解X_next,X_next:=X_now;更新历史记录H, 重复步骤(2).

    对搜索性能有影响的因素

    禁忌长度

    控制其他变量,单就禁忌长度的选择而言,禁忌长度越短,机器内存占用越少,解禁范围更大(搜索范围上限越大),但很容易造成搜索循环(实际去搜索的范围却很小),过早陷入局部最优。禁忌长度过长又会导致计算时间过长

    特赦规则

    通俗定义:对于在禁忌的对象,如果出现以下情况,不论现在对象的禁忌长度如何,均设为0
    (1)基于评价值的规则,若出现一个解的目标值好于前面任何一个最佳候选解,可特赦;
    (2)基于最小错误的规则,若所有对象都被禁忌,特赦一个评价值最小的解;
    (3)基于影响力的规则,可以特赦对目标值影响大的对象。

    候选集

    候选集的大小,过大增加计算内存和计算时间,过小过早陷入局部最优。候选集的选择一般由邻域中的邻居组成,可以选择所有邻居,也可以选择表现较好的邻居,还可以随机选择几个邻居。

    评价函数

    评价函数分为直接评价函数和间接评价函数
    直接评价函数:上述例子,均直接使用目标值作为评价函数。
    间接评价函数:反映目标函数特性的函数(会比目标函数的计算更为简便,用以减少计算时间等)。

    终止规则

    禁忌算法是一个启发式算法,我们不可能让搜索过程无穷进行,所以一些直观的终止规则就出现了
    (1)确定步数终止,无法保证解的效果,应记录当前最优解;
    (2)频率控制原则,当某一个解、目标值或元素序列的频率超过一个给定值时,终止计算;
    (3)目标控制原则,如果在一个给定步数内,当前最优值没有变化,可终止计算。

    总结

    启发式搜索算法蕴含着许多人生哲学,它虽不是数学方法,其思想更类似于人类解决问题的思想和一些人生中总结的道理,值得好好体会。最后用网上一段描述各种搜索算法的例子来作为总结:

    为了找出地球上最高的山,一群有志气的兔子们开始想办法。
    (1)兔子朝着比现在高的地方跳去。他们找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山法,它不能保证局部最优值就是全局最优值。
    (2)兔子喝醉了。他随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,他渐渐清醒了并朝他踏过的最高方向跳去。这就是模拟退火。
    (3)兔子们知道一个兔的力量是渺小的。他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。他们制定了下一步去哪里寻找的策略。这就是禁忌搜索。
    (4)兔子们吃了失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。他们不知道自己的使命是什么。但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。这就是遗传算法。

    参考资料

    1.爬山法 。

    2.局部搜索案例与求解方法

    3.《群体智能优化算法及其应用》雷秀娟 著。

    4.https://blog.csdn.net/tyhj_sf/article/details/54235550

  • 相关阅读:
    Redis学习之(一)
    SpringMVC之学习(0)
    Node.js之Express三
    Node.js之Express二
    Node.js之Express一
    Node.js进程管理之进程集群
    Node.js进程管理之子进程
    Node.js其他模块
    Node.js进程管理之Process模块
    Node.js HTTP Server对象及GET、POST请求
  • 原文地址:https://www.cnblogs.com/cy0628/p/14211144.html
Copyright © 2020-2023  润新知