浅析超启发式算法(hyper heuristic)

在介绍超启发式算法前,先来简单聊一聊启发式算法。为解决NP难问题(精确求解非常困难,但验证结果十分简单,例如旅行商问题就是一个典型的NP难问题),启发式算法应运而生。据我所知,启发式算法中有基于种群的遗传算法GA、生物地理学算法BBO;有基于个体的粒子群算法PSO、蚁群算法ACO;还有很多名字奇形怪状,但都跟前面几种算法万变不离其宗的诸如花粉算法FPA、蝙蝠算法、猫群算法、鸡群算法、肾算法,巴拉巴拉算法(这个算法我瞎说的~)。

启发式算法大致可以分为三部分,即编码、运算、解码。其中编码部分是将问题转化为算法表达式(例如遗传算法中的基因表示)。运算是启发式算法的主体部分,是根据算法的规则对编码后的部分进行操作(例如遗传算法中的杂交和变异操作),一般在运算部分,启发式算法需要权衡算法的收敛性和多样性。解码是将算法的表达式重新转换为问题的解决方案。可以说启发式算法是在问题层面上的算法,不同的问题模型对启发式算法的编码和解码操作不同。另一方面,启发式算法的效果受所选参数的影响,例如同样的编码、运算、解码操作,但是不同的杂交率和变异率会使得遗传算法在解决问题时具有截然不同的效果。如何合理地设置参数一直是研究启发式算法的一个方向。

现在来聊一聊我理解的超启发式算法。网上对于超启发式的资料较少,搜索scdn的超启发式算法也仅看到了两篇博文,而且这两篇博似乎都是百度百科中的部分截取(绝非有冒犯之意,如有不当之处请联系我)。因此,萌生了写一篇关于超启发式算法的博文,也为我后续的研究提供基础。

超启发式算法是相对于启发式算法而言的,它的操作对象是底层的启发式算法或简单的操作。因此,它是独立于具体的问题的。就我目前对超启发式算法的了解,它大致可以分为基于随机选择、基于禁忌搜索、基于某个启发式算法等分类。超启发式算法可以简单的理解为多种启发式算法或者多种策略和操作的组合优化,有点类似于机器学习中的集成学习。举个简单的例子,超启发式算法通过优先队列为它的底层操作排序,每次从队列中选择一个底层操作对问题进行求解,最后根据得到的解决方案反馈一个值,超启发式算法就根据这个值对对应的底层操作进行队列的更新,直至遇到终止条件。

目前我对超启发式算法的研究也才刚开始,还有很多不理解的地方。例如超启发式算法种群规模的设定(每次选择一个底层操作时是把对应种群都执行该操作还是把某一解决方案执行该操作),超启发式算法的参数设定,超启发式算法和普通的改进型启发式算法相比的优势,超启发式算法和简单的执行完一个启发式后再执行另一个启发式的方法有什么区别等。希望在我后续的研究中,能够对超启发式算法有更深入的了解。因此,本博文的实际情况是未完待续。。。望各位大佬不吝赐教!

===================优雅的分割线===================

通过阅读多篇与超启发式算法相关的sci论文,我发现基本的超启发式算法由两部分构成。分别是反馈机制和选择机制。首先超启发式算法控制的是多种底层启发式算法或者操作,初始时每个底层算法具有相同的优先级,然后超启发式算法通过他的选择机制,每次迭代时选择一种底层算法,并计算迭代前后适应度的增量,为启发式算法进行打分,这就是反馈机制。通过多次迭代,各底层算法的优先级就会不一样,优先级大的算法被选中的概率越大。

你可能感兴趣的:(优化算法)