三种典型启发式算法(禁忌搜索,模拟退火,遗传算法)

启发式算法

启发式算法:用来求解非常好的可行解,但不一定是最优解;该类算法可处理非常大的问题,可用来解决NP hard问题,是一种成熟的迭代算法,每次迭代结果可能导致比先前最佳解更好的新解,当算法经过适当时间终止时,提供的解就是迭代程序中发现的最优解。
优点:当陷入局部最优解时,有一定概率可以跳出局部最优,继续进行搜索全局最优解
缺陷:无法证明迭代结束后的最优解就是全局最优解,可能只是局部最优解。

三种典型启发式算法

1.禁忌搜索算法
2.模拟退火算法
3.遗传算法

禁忌搜索

  • 广泛使用的通用启发式算法,采用一些常识使搜索过程逃离局部最优解
  • 包含一个子程序,即局部搜索程序,其关键策略是允许在局部最优解邻域内存在向最优解进行非改进性移动,继续进行局部搜索;当到达某一个当前试解邻域内可找到更优解的点时,则可再次应用局部改进程序,找到新的局部最优解。
  • 在远离局部最优解后,局部搜索可能会循环到同一个局部最优解,为避免这一问题,禁忌搜索暂时禁止返回到近期访问过的解移动;禁忌表记录被禁移动,也称为禁忌移动(注: 若发现禁忌移动实际上优于目前得出的最优可行解,此类移动可以解禁)

禁忌搜索算法概述:

  • 初始值:从一个可行的初始试解开始
  • 迭代:
  • 使用适当的局部搜索程序确定向当前试解局部邻域内的可行移动数,这些可行移动数不包括当前禁忌表中的移动,除非禁忌表中的移动能得到优于当前所得最优试解的解;
  • 确定在这些移动中,哪一移动可得到这些移动中的最优解,将该解作为下一个试解,无论其是否优于当前试解
  • 更新禁忌表,禁止其循环至当前试解
  • 若禁忌表已满,删除禁忌表中最早的项,为后续移动提供更多的灵活性
  • 停止规则:
  • 使用一些停止准则,如固定迭代数量,固定cpu时间,或在不改进最优目标函数值的情况下固定连续迭代数量
  • 若在迭代中没有向当前试解局部邻域内的可行移动,则停止迭代,将迭代出的最优试解作为最终解

模拟退火

  • 与禁忌搜索类似,是一种启发式算法,可使搜索过程跳出局部最优解

模拟退火算法概要

  • 初始化:从一个可行初始试解开始
  • 迭代:
  • 根据移动选择规则选择下一个试解(若当前试解的近邻均不可接受,则算法终止)
  • 核查温度计划表:在当前T值条件下进行了所需次数的迭代后,将T值降低至温度计划表中的下一个T值,然后恢复迭代
  • 停止规则:在温度计划表中最低T值进行所需次数的迭代后(或当前试解的近邻均不可接受时),停止搜索,接受迭代中发现的最佳试解(包括T值较高时)作为最终解
    Ex:
    Zc = 当前试解的目标函数值
    Zn = 迭代中当前候选解的目标函数值
    T = 该候选解不能改进当前试解时,衡量当前候选解作为下一个试解可能性的参数
    若Zn >= Zc,接受该候选解
    若Zn < Zc,按照下列概率接受该候选解
  • P(接受) = e^x, 其中x = (Zc - Zn)/T
    假设温度计划表包含5个T值(T1,T2, T3, T4, T5),且分别依次进行5次迭代,则总共会有25次迭代,其中若温度的参数设为(0.2,0.5,0.5,0.5,0.5),那么
    T1 = 0.2Zc,其中Zc为初始试解的目标函数值
    T2 =0.5
    T1
    T3 = 0.5T2
    T4 = 0.5
    T3
    T5 = 0.5*T4。

若存在7个点,初始解Zc= 69,则T1=0.2*69 = 13.8,随机选择出7个点中的2,3,4,5,6作为候选替换点,按照总概率为1,则每个点依次分配到0.2的概率;
假设起始点随机数是0.37,则对应起始选中的是点3,再用剩余2,4,5,6个点依次分配总概率1,每个点将有0.25概率,若终止点随机数为0.8,则终止点落在了点6,进而将起始点3和终止点6进行对调并重新计算目标函数值Zn;
若Zn = 65<69,优于初始解,则选择该解为下一个试解;
若Zn = 71 >69,差于初始解,则计算概率阈值P(接受) = e^ [(69-71)/13.8]=0.865,之后再生成随机数;

  • 若该随机数<0.865,则接受该候选解为下一个试解
  • 该随机数>0.865,则不接受该候选解为下一个试解

模拟退火与禁忌搜索对比

  • 禁忌搜索采用的方法是朝最陡的方向爬上当前高峰,直到登上山顶(局部最优解),之后开始缓慢下山,同时寻找另一座山峰攀登(将局部最优的移动放入禁忌表,尝试将其他不在禁忌表中的移动进行相互替换);该方法的不足是花费大量时间攀爬(迭代)上遇得到的每一座山,而不是搜寻最高峰。
  • 模拟退火采用的是将注意力主要放在最高山峰的寻找上,由于最高峰可能位于可行域任何地方,故前期重点是随机朝不同方向移动,以便尽可能探索更多可行域;由于大部分接受的移动都是向上的,所以搜索会逐渐朝可行域内最高山峰所在的部分倾斜,因此,搜索过程逐步否定越来越多向下的移动,从而逐渐将主要注意力放在向上攀爬上,只要时间足够,搜索过程通常会达到最高峰
  • 简言之,模拟退火搜索每次迭代都会从当前试解向该解邻域内的一个近邻移动,这点和禁忌搜索相似,不同在于如何选择近邻作为下一个试解;禁忌搜索会利用禁忌表确认哪些移动在迭代中不会被替换,而模拟退火则在迭代过程中利用随机数生成随机概率来确认从哪个邻域内开始搜索最优解

遗传算法

  • 遗传算法利用达尔文的进化论,将父类优秀的基因以较大的概率保留下来,而较次的基因则以较小的概率被保留到子代,另外,还考虑到了基因突变的影响,以极低的概率对子类部分基因做0/1变换,最后生成新的子类进行迭代
  • 由于群体中适应度最强的成员比其他成员更有可能成为父亲,遗传算法会随着过程的不断推进得到试解的改进群体;偶尔发生突变,所以某些子代可能获得其父代任何一方不具备的特征(有时是更好的特征),这有助于遗传算法探索一个新的可行域或优于此前考虑的可行域的其他部分;最终,由于适者生存,遗传算法会得到一个试解(所研究的最佳解),这个试解至少会近似与最佳解。

遗传算法概述

  • 初始化:从可行试解的初始群体开始,可随机生成,评估当前群体每个成员的适应度(目标函数值)
  • 迭代:
  • 采用一个随机过程,该过程偏向于当前群体适应度较强的成员,选择其中的部分成员(偶数)作为父代
  • 对父代进行随机配对,让每对父代都分娩两个子代(新的可行试解),子代的特征(基因)是其父代特征的随机混合,偶然发生突变的情况除外(任何时候特征的随机混合和突变产生不可行解时,即为一次流产,因此重复进行分娩子代的过程,直到产生一个对应于可行解的子代)
  • 保留这些子代并保留足够的当前群体最佳成员,以便形成一个同样规模的新群体进行下一次的迭代(丢弃当前群体的其他成员)
  • 评估新群体中各新成员的适应度
  • 停止规则:采用某种停止规则,如固定迭代次数,固定cpu时间或固定最佳试解中未发现任何改进的连续迭代次数,并将迭代中发现的最佳试解作为最终解。

Ex:
1.假设群体规模:10
2.父代选择:从群体中适应度最强的5个成员中(根据目标函数值确定),随机选择4个作为父代;从适应度最差的5个成员中随机选择2个作为父代;随机配对6位父代,形成3对配偶
3.父代特征(基因)遗传给子代:这一个过程很大程度上需看具体问题而定;通常父代和子代会将数值转换为二进制,之后将配对的父代进行二进制(0/1)匹配,相同的位数值会传到下一代,不同位数值的部分,会对每个位数值生成随机概率,若大于0.5,则为1,反之,则为0;
4.突变率:提前设定好突变概率阈值(如0.1),之后将新生成的子代对每个位数值都再进行随机概率生成,若小于0.1,则将该位数值进行0/1反转;若大于0.1,则不进行反转
5.停止规则:进行多次(如5次)连续迭代后仍未在最佳试解中发现任何改进,则停止迭代

总结

一些最优化问题(包括各种组合优化问题)十分复杂,很多精确算法都无法得出最优解,此时通常可采用启发式算法搜索好的可行解(不一定是最优解),这些启发式算法的一个关键特征是它们都能跳出局部最优解并在可行域内实施强大的搜索能力。
禁忌搜索每次迭代从当前试解向最佳近邻试解移动,除没有改进性移动时允许进行非改进性移动外,其他与局部改进程序非常相似;另外,该算法具有对过去搜索的短期记忆,以便向可行域的新区域移动,而不是回到前面的已知解;最后,该算法还可基于长期记忆,采用集中搜索和分散搜索策略,重点搜索可能性更高的延续部分。
模拟退火也在每次迭代时从当前试解向邻近试解移动,但偶尔允许非改进性移动;该算法随机选择邻近试解,然后仿照物理退火过程,确定如果该近邻并不优于当前试解,是否拒绝将其作为下一个试解。
遗传算法则是每次迭代都将整个试解群体作为对象,然后该算法采用类似于生物进化论的演进方式(包括适者生存概念)舍弃部分试解(尤其是那些适应度差的试解),用新的试解替代,这一替代过程使群体中多对续存的成员将其部分特征传递给新的成员,就像是父代繁衍子代一样。

你可能感兴趣的:(启发式算法,算法)