启发式算法
启发式算法(heuristic algorithm)是相对于最优化算法提出的。
一个问题的最优算法求得该问题每个实例的最优解。
启发式算法可以这样定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。
现阶段,启发式算法以仿自然体算法为主,主要有蚁群算法、模拟退火法、神经网络等。
现代启发式算法的各种具体实现方法是相对独立提出的,相互之间有一定的区别。从历史上看,现代启发式算法主要有:
模拟退火算法(SA)、遗传算法(GA)、列表搜索算法(ST)、进化规划(EP)、进化策略(ES)、蚁群算法(ACA)、人工神经网络(ANN)。
人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的 步骤去寻求答案。启发式解决问题的方法是与算法相对立的。算法是把各种可能性都一一进行尝试,最终能找到问题的答案,但它是在很大的问题空间内,花费大量 的时间和精力才能求得答案。启发式方法则是在有限的搜索空间内,大大减少尝试的数量,能迅速地达到问题的解决。但由于这种方法具有尝试错误的特点,所以也 有失败的可能性。科学家的许多重大发现,常常是利用极为简单的启发式规则。
超启发式算法
现有超启发式算法可以大致分为4类:
基于随机选择、基于贪心算法、基于元启发式算法和基于学习的超启发式算法。
基于随机选择的超启发式算法
该类超启发式算法是从给定的集合中随机选择LLH,组合形成新的启发式算法。这类超启发式算法的特点是结构简单、容易实现。同时,这类超启发式算法也经常被用作基准(bench mark),以评价其他类型的超启发式算法性能。该类超启发式算法可以进一步细分为纯随机(pure random)、带延迟接受条件的随机(random with late acceptance)等。
基于贪心策略的超启发式算法
该类超启发式算法在构造新启发式算法时,每次都挑选那些能够最大化改进当前(问题实例)解的LLH。由于每次挑选LLH时需要评估所有LLH,故此该类方法的执行效率低于基于随机选择的超启发式算法。
基于元启发式算法的超启发式算法
该类超启发式算法采用现有的元启发式算法(作为高层策略)来选择LLH。由于元启发式算法研究相对充分,因此这类超启发式算法的研究成果相对较多。根据所采用的元启发式算法,该类超启发式算法可以细分为基于禁忌搜索、基于遗传算法、基于遗传编程、基于蚁群算法和基于GRASP with path-relinking等。[5]
基于学习的超启发式算法
该类超启发式算法在构造新启发式算法时,采用一定学习机制,根据现有各种LLH的历史信息来决定采纳哪一个LLH。根据LLH历史信息来源的不同,该类超启发式算法可以进一步分为在线学习(on-line learning)和离线学习(off-line learning)两种:前者是指LLH的历史信息是在求解当前实例过程中积累下来的;后者通常将实例集合分为训练实例和待求解实例两部分,训练实例主要用于积累LLH的历史信息,而待求解实例则可以根据这些历史信息来决定LLH的取舍