【问题标题】:What are the differences between simulated annealing and genetic algorithms?模拟退火和遗传算法有什么区别?
【发布时间】:2011-05-04 19:32:35
【问题描述】:

模拟退火(使用 bean 搜索)和遗传算法在性能和用例方面有哪些相关差异?

我知道 SA 可以被认为是人口规模只有一个的 GA,但我不知道两者之间的关键区别。

另外,我正在尝试考虑一种情况,即 SA 将优于 GA 或 GA 将优于 SA。一个能帮助我理解的简单例子就足够了。

【问题讨论】:

  • “SA 可以被认为是人口规模只有一个的 GA”- 不完全是。尽管模拟退火从一次试验到下一次试验只维持一种解决方案,但它对表现较差的候选者的接受对其功能来说更为不可或缺,就像在遗传算法中一样。事实上,一些 GA 只接受改进的候选人。此外,请意识到 SA 的“一代”通常比 GA 的“一代”实时快得多,因此可以在同一时间尝试更多代 - 这是一个重要的实际考虑因素。

标签: artificial-intelligence genetic-algorithm simulated-annealing constraint-satisfaction


【解决方案1】:

我远不是这些算法方面的专家,但我会尽力提供帮助。

我认为两者之间最大的区别是 GA 中的交叉概念,因此任何比 SA 更适合 GA 的学习任务示例都将取决于交叉在这种情况下意味着什么以及它是如何实现的.

交叉的想法是您可以有意义地结合两种解决方案来产生更好的解决方案。我认为这只有在问题的解决方案以某种方式结构化时才有意义。例如,我可以想象,在多类分类中,采用两个(或多个)擅长对特定类进行分类的分类器,并通过投票将它们组合起来,形成一个更好的分类器。另一个例子可能是Genetic Programming,其中的解决方案可以表示为一棵树,但我发现很难想出一个很好的例子,你可以结合两个程序来创建一个更好的程序。

我认为很难提出一个令人信服的案例,因为它们确实是非常相似的算法,可能是从非常不同的起点开发的。

【讨论】:

  • 谢谢 Stomp,是不是在 SA 中我们只会有突变,而在 GA 中,我们会有突变和组合?
  • 是的,SA 很像 GA,只是没有交叉。
  • 您可能对此stack-exchange proposal 感兴趣。它几乎可以开始 Beta 测试了,还需要更多。
  • 你实际上可以有一个没有交叉元素的功能遗传算法(只有突变)。与 SA 的唯一区别是您有多种解决方案。此外,GA 通常会在达到更好的解决方案时逐渐降低突变机会时提高 ifs 效率,就像在 SA 中一样。这样的 GA 可以看作是一种“多”-SA。
【解决方案2】:

真的很难比较这两者,因为它们的灵感来自不同的领域..

遗传算法维护一组可能的解决方案,并在每一步选择可能的解决方案对,将它们组合(交叉),并应用一些随机变化(突变)。该算法基于“适者生存”的思想,其中选择过程是根据适应度标准完成的(通常在优化问题中,它只是使用当前解决方案评估的目标函数的值)。交叉是希望两个好的解决方案结合起来可能会提供更好的解决方案。

另一方面,模拟退火仅在可能的解空间中跟踪一个解,并且在每次迭代时根据一些概率(随时间衰减)考虑是移动到相邻的解还是停留在当前的解中。这与启发式搜索(例如贪婪搜索)不同,因为它不会受到局部最优问题的困扰,因为它可以在所有相邻解决方案都比当前最差的情况下摆脱困境。

【讨论】:

    【解决方案3】:

    严格来说,这两件事——模拟退火(SA)和遗传算法既不是算法,也不是它们的目的“数据挖掘”。

    两者都是元启发式——在抽象尺度上比“算法”高出几个层次。换句话说,这两个术语都指的是高级隐喻——一个来自冶金学,另一个来自进化生物学。在元启发式分类法中,SA 是一种单态方法,GA 是一种种群方法(在与 PSO、ACO 等一起的子类中,通常称为受生物学启发的元启发式算法)。

    这两种元启发式算法用于解决优化问题,特别是(但不限于)组合优化(又名约束满足编程)。组合优化是指通过从一组离散项中进行选择来进行优化——换句话说,没有可以最小化的连续函数。背包问题、旅行商问题、库存问题——都是组合优化问题。

    与数据挖掘的联系在于,许多(大多数?)监督机器学习 (ML) 算法的核心是优化问题的解决方案——(例如多层感知器和支持向量机)。

    解决上限问题的任何解决方案技术,无论采用何种算法,都基本上由以下步骤组成(通常在递归循环中编码为单个块):

    1. 对特定于域的详细信息进行编码 在成本函数中(它是 逐步最小化值 从这个函数返回 构成对 c/o 的“解决方案” 问题);

    2. 评估成本函数传递 在最初的“猜测”中(开始 迭代);

    3. 基于从 成本函数,生成后续 候选解决方案(或超过 一,取决于 元启发式)到成本 功能;

    4. 通过以下方式评估每个候选解决方案 将它传递到参数集中,以 成本函数;

    5. 重复步骤 (iii) 和 (iv) 直到 要么一些收敛标准是 满意或最大数量 达到迭代次数。

    元启发式针对上述步骤 (iii);因此,SA 和 GA 的不同之处在于它们如何生成用于通过成本函数进行评估的候选解决方案。换句话说,这是了解这两种元启发式方法有何不同的地方。

    非正式地,针对组合优化解决方案的算法的本质是它如何处理从成本函数返回的值比当前最佳解决方案的候选解决方案候选解决方案(从成本函数返回最小值的解决方案)。优化算法处理这种候选解决方案的最简单方法是彻底拒绝它——这就是爬山算法所做的。但是这样做,简单的爬山总是会错过一个更好的解决方案,与当前的解决方案相隔一个山丘。换句话说,一个复杂的优化算法必须包含一种技术,用于(暂时)接受比当前最佳解决方案更差的候选解决方案(即,上坡),因为比当前解决方案更好的解决方案可能位于更差的路径上解决方案。


    那么 SA 和 GA 是如何生成候选解的呢?

    SA 的本质通常用成本更高的候选解决方案被接受的概率来表示(双括号内的整个表达式是一个指数:

    p = e((-highCost - lowCost)/temperature)
    

    或者在python中:

    p = pow(math.e, (-hiCost - loCost) / T)
    

    “温度”项是一个变量,其值在优化过程中会衰减 - 因此,SA 接受较差解决方案的概率会随着迭代次数的增加而降低。

    换句话说,当算法开始迭代时,T 非常大,如您所见,这会导致算法移动到每个新创建的候选解决方案,无论是比当前最佳解决方案更好还是更差——即,它正在解决方案空间中进行随机游走。随着迭代次数的增加(即,随着温度的降低),算法对解空间的搜索变得不那么允许,直到 T = 0,行为与简单的爬山算法相同(即,只有比当前最佳的解更好解决方案被接受)。

    遗传算法非常不同。一方面——这是一件大事——它产生的不是单一的候选解决方案,而是整个“他们的群体”。它的工作原理是这样的:GA 调用总体中每个成员(候选解决方案)的成本函数。然后,它按照从成本函数返回的值(“最佳”具有最低值)对它们进行排序,从最好到最差。从这些排名值(及其相应的候选解决方案)创建下一个总体。人口的新成员基本上是通过以下三种方式之一产生的。第一种通常被称为“精英主义”,在实践中通常是指仅采用排名最高的候选解决方案并将它们直接传递——未经修改——传递给下一代。人口中新成员的另外两种方式通常被称为“突变”和“交叉”。突变通常涉及从当前总体中更改候选解向量中的一个元素以在新总体中创建解向量,例如 [4, 5, 1, 0, 2] => [4, 5, 2, 0 , 2]。交叉操作的结果就像如果向量可以有性会发生什么 - 即,一个新的子向量,其元素由来自两个父母中的每一个的一些组成。

    所以这些是 GA 和 SA 之间的算法差异。性能上的差异如何?

    在实践中:(我的观察仅限于组合优化问题)GA 几乎总是优于 SA(从成本函数返回较低的“最佳”返回值——即接近解空间全局最小值的值),但是以更高的计算成本。据我所知,教科书和技术出版物在分辨率上都引用了相同的结论。

    但事情是这样的:GA 本质上是可并行化的;更重要的是,这样做是微不足道的,因为组成每个群体的各个“搜索代理”不需要交换消息——即,它们彼此独立工作。显然这意味着GA 计算可以分布式,这意味着在实践中,您可以获得更好的结果(接近全局最小值)和更好的性能(执行速度)。

    在什么情况下 SA 可能优于 GA?我认为一般情况是那些解决方案空间很小的优化问题,因此 SA 和 GA 的结果实际上是相同的,但执行上下文(例如,数百个类似问题以批处理模式运行)有利于更快的算法(应始终为 SA)。

    【讨论】:

    • 干得好。SA 和光束搜索怎么样,有什么不同吗?
    • 好吧,SA w/ local beam search 与 GA 与普通 SA 与 GA 具有相同的差异集除了 SA w/ local beam 与 GA 类似,因为它认为同时是一组候选解决方案(“状态”),而不仅仅是一个。
    • 为什么说“递归函数”?我认为不需要递归。
    • " 交叉操作的结果就像如果向量可以发生性关系会发生什么"
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2011-02-22
    • 2015-09-21
    • 2011-12-08
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多