启发式和元启发式有啥区别?

Posted

技术标签:

【中文标题】启发式和元启发式有啥区别?【英文标题】:What is the difference between heuristics and metaheuristics?启发式和元启发式有什么区别? 【发布时间】:2012-05-13 19:31:18 【问题描述】:

在对算法进行一些研究后,我发现了两个让我感到困惑的术语。 我已经阅读了至少 20 篇论文,但两者都没有明确的定义。 我希望有人可以帮助我区分启发式算法和元启发式算法之间的区别。 如果可能,请添加它的来源。

ps:我已经知道这些词的含义,但我不知道它们在计算机科学中的确切区别。

提前致谢

【问题讨论】:

这真的取决于上下文。启发式是近似完美答案/行为的有用规则。没有上下文,在上面添加元并没有赋予它任何特殊含义,它只是意味着它是元,即关于启发式的启发式。 这是在算法的上下文中 它仍然取决于上下文,这意味着您永远不会得到直接的答案,因为它们没有直接定义。在 AI 圈子中,启发式是一种“很好的猜测”功能,用作更大(通常是搜索)算法的构建块。元启发式算法本身就是一种“好的猜测”系统,它会不断完善其猜测。但这只是我的看法——这些东西是如此不确定,以至于即使是对启发式与元启发式进行比较评估的论文也没有定义,或者只提供松散的定义。基本上,一见即知。 【参考方案1】:

您可以将启发式算法视为问题的近似(而非近似)解决方案。近似和近似之间的区别在于,第一个是关于对问题的解决方案进行很好的猜测,但您并不真正知道它有多好。第二个是关于获得一个解决方案,您可以证明它与最佳解决方案有多接近。

因此,启发式方法通常取决于问题,也就是说,您为给定问题定义启发式方法。元启发式是与问题无关的技术,可以应用于广泛的问题。例如,启发式方法是在快速排序中选择一个随机元素进行旋转。元启发式对将要应用的问题一无所知,它可以将函数视为黑匣子。

您可以说启发式利用与问题相关的信息来为特定问题找到“足够好”的解决方案,而元启发式与设计模式一样,是可以应用于广泛问题的通用算法思想。

【讨论】:

你也有这方面的消息来源吗? El-Ghazali Talbi 有一本很棒的元启发式入门书。它在引言中或多或少地陈述了相同的观点。看看吧。 所以,正如你所说,NSGAII 是一种元启发式算法,因为即使是我自己的复杂问题,它也可以适用于许多问题,但是如果我编写自己的算法来利用我自己的复杂问题的信息,这意味着这是一个启发式算法?我有什么意思和区别吗? (抱歉英语不好) @Aerox,NSGAII 是遗传算法的变体,因此通常与问题无关。正如 Touki 所说,元启发式的特定实现(与书中的抽象实现相反)也是元启发式,即使您必须做出与表示、成本函数等相关的决策,这些决策是往往依赖于问题。不过,在这种情况下,您是在自己的问题中“实例化”元启发式算法,例如填充模板。不同之处在于您没有利用特定于问题结构的信息来设计一次性解决方案。 @Aerox,不确定我是否理解你的说法。如果算法利用了关于问题结构的信息(隐含或显式),这些信息对于广泛的(优化)问题并不常见,那么它就是一种特定的启发式算法。正如我之前所说,差异是微妙的,边界相当模糊。【参考方案2】:

为了给出正确的报价,相对于亚历杭德罗的回答:

« 元启发式算法是一种高级别的独立于问题的算法框架,它提供了一组指导方针或策略来开发启发式优化算法 [...] 根据元启发式框架也称为元启发式»(Sörensen,格洛弗http://scholarpedia.org/article/Metaheuristics)

要完整。我们应该区分精确算法、近似算法和启发式算法。精确算法找到精确解。近似算法应在可接受的时间内找到近似解,并指出其与假设最优解的差异范围。启发式算法只是在可接受的时间内找到足够好的解决方案。

顺便说一下,由于两三个不同的原因,Alejandro 快速排序的示例似乎并不完全合适。

    事实上,启发式和元启发式是优化领域的一部分。因此,他们试图解决的问题是寻找最优方案,而不是排序。 当您要解决的问题在计算意义上过于复杂时,通常会使用启发式算法,而排序问题则不是这样。 如果我理解得很好,通过快速排序示例指出的是随机元素。原则上,您可以使用确定性启发式算法——我从未遇到过确定性元启发式算法,但可能有人可以对其进行编码。这可能有点“玩文字游戏”,但随机元素比(元)启发式更恰当地描述了“随机搜索”。

【讨论】:

哼,我认为 A 星是一种可能的确定性启发式算法? @Touki,+1 为您提供有见地的补充。只想指出,即使是一个便秘的例子,您也可以将排序公式化为找到最小化反转次数的排列。使用该公式,您可以应用任何组合元启发式(例如,GA 或 SA)来解决它。当然,快速排序会更好,因为它利用了问题结构。从这个意义上说,也许 Quicksort 本身可以被认为是排序问题的一种启发式方法。我知道,这在实践中不是一个有用的表述,但用于指出差异的目的。 作为一个侧面,请参阅Nelder-Mead 作为算法示例,恕我直言,可以将其视为元启发式算法(广泛适用于各种黑盒优化问题),并且其完全确定性。是启发式的,因为与 the Simple method 相反,它不能保证收敛到全局最优值。【参考方案3】:

详细解释见:

Sörensen, K. (2015). Metaheuristics—the metaphor exposed. International Transactions in Operational Research, 22(1), 3-18.

元启发式是一种高级的独立于问题的算法 提供一套指导方针或战略的框架 启发式优化算法。该术语还用于指代 启发式优化算法的特定问题实现 根据在这样一个框架中表达的指导方针(Sörensen, 2015)。

启发式是指导方针,元启发式是使用这些指导的框架。

【讨论】:

以上是关于启发式和元启发式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法和启发式算法有啥区别?

检测 pandas.DataFrame 中的列是不是是分类的有啥好的启发式方法?

爬山搜索和最佳优先搜索有啥区别?

启发式算法 元启发式算法 超启发式算法 区别 是什么

随机算法和启发式算法之间的区别

启发式算法(Heuristic Algorithm)