【问题标题】:What are the typical use cases of Genetic Programming?遗传编程的典型用例是什么?
【发布时间】:2010-09-26 05:00:54
【问题描述】:

今天我阅读了this blog entry by Roger Alsing,了解如何仅使用 50 个半透明多边形绘制 Mona Lisa 的复制品。

我对 the results 非常着迷,所以我想知道(这是我的问题):基因编程是如何工作的,还有哪些其他问题可以解决 通过基因编程?

【问题讨论】:

  • 一般来说,当你不知道如何解决问题时,所有的 AI 方法都是好的。

标签: genetic-programming


【解决方案1】:

关于罗杰的蒙娜丽莎计划是否是Genetic Programming 存在一些争论。它似乎更接近 (1 + 1) Evolution Strategy。这两种技术都是更广泛的进化计算领域的例子,其中还包括Genetic Algorithms

遗传编程 (GP) 是不断发展计算机程序的过程(通常以树的形式 - 通常是 Lisp 程序)。如果您专门询问全科医生,John Koza 被广泛认为是领先的专家。他的website 包含许多指向更多信息的链接。 GP 通常是计算密集型的(对于不平凡的问题,它通常涉及大量机器)。

如果您问得更笼统,进化算法 (EA) 通常用于为使用其他技术无法轻松解决的问题(例如 NP 难题)提供良好的近似解决方案。许多优化问题都属于这一类。找到精确的解决方案可能计算量太大,但有时接近最优的解决方案就足够了。在这些情况下,进化技术可能是有效的。由于它们的随机性,进化算法永远不能保证找到任何问题的最优解,但如果存在,它们通常会找到一个好的解。

进化算法也可用于解决人类不知道如何解决的问题。没有任何人类先入之见或偏见的 EA 可以生成令人惊讶的解决方案,这些解决方案可与人类产生的最佳努力相媲美或更好。即使我们不知道如何创建一个好的解决方案,我们也只需要能够识别出一个好的解决方案。换句话说,我们需要能够制定一个有效的fitness function

一些例子

编辑:可免费获得的书 A Field Guide to Genetic Programming 包含 GP 产生人类竞争力结果的示例。

【讨论】:

  • 这场辩论有点愚蠢。定义清晰,蒙娜丽莎代码缺乏重组。除了定义错误之外,有意义地使用重组还可以大大减少迭代次数(尽管以更昂贵的迭代为代价),从而有可能改善整体运行时间。
【解决方案2】:

有趣的是,在 Grand Theft Auto IV 和最新的星球大战游戏(The Force Unleashed)等游戏中使用的动态角色动画背后的公司使用基因编程来开发运动算法。该公司的网站在这里,视频令人印象深刻:

http://www.naturalmotion.com/euphoria.htm

我相信他们模拟了角色的神经系统,然后在一定程度上随机化了连接。然后,他们将走得最远的模型的“基因”结合起来,在后代中创造出越来越多能干的“孩子”。真正令人着迷的模拟工作。

我还看到了寻路自动机中使用的遗传算法,寻找食物的蚂蚁就是典型的例子。

【讨论】:

  • 你提到的蚂蚁例子不是遗传算法,而是所谓的蚁群算法,它们的目的相似,但算法完全不同
  • @罗伯特。他提到的蚂蚁例子其实是GP的经典玩具例子,和蚁群算法完全不同。
【解决方案3】:

遗传算法可用于解决大多数优化问题。但是,在很多情况下,有更好、更直接的方法来解决它们。它属于元编程算法类,这意味着它能够适应几乎任何你可以扔给它的东西,因为你可以生成一种编码潜在解决方案的方法,组合/变异解决方案,并决定哪个解决方案比其他解决方案更好。与其他元编程算法相比,遗传算法的优势在于它可以比模拟退火等纯爬山算法更好地处理局部最大值。

【讨论】:

    【解决方案4】:

    我在论文中使用遗传编程来模拟基于地形的物种进化,但这当然是遗传算法的 A-life 应用。

    GA擅长的问题是hill-climbing problems。问题是,通常手工解决大多数问题更容易,除非定义问题的因素是未知的,换句话说,你无法以其他方式获得这些知识,比如与社会和社区有关的事情,或者在以下情况下你有一个很好的算法,但你需要微调参数,这里 GA 非常有用。

    我做过一个微调的情况是,根据相同的算法微调几个奥赛罗 AI 玩家,赋予每个不同的游戏风格,从而使每个对手都独一无二,并有自己的怪癖,然后我让他们竞争淘汰我在游戏中使用的前 16 个 AI。优点是他们都是非常优秀的玩家,技术水平差不多,所以这对人类对手来说很有趣,因为他们无法轻易猜到 AI。

    【讨论】:

    • “我在我的论文中使用基因编程来模拟基于地形的物种进化” - 网上有人可以偷看吗? :P
    【解决方案5】:
    【解决方案6】:

    您应该问自己:“我可以(先验地)定义一个函数来确定特定解决方案相对于其他解决方案的优劣程度吗?”

    在蒙娜丽莎示例中,您可以轻松确定新绘画是否比之前的绘画更像源图像,因此可以“轻松”应用遗传编程。

    【讨论】:

      【解决方案7】:

      我有一些使用遗传算法的项目。 GA 是优化问题的理想选择,因为当您无法开发完全顺序的、精确的算法来解决问题时。例如:什么是汽车特性的最佳组合,以使其更快,同时更经济?

      目前我正在开发一个简单的 GA 来制作播放列表。我的 GA 必须找到相似的专辑/歌曲的更好组合(这种相似性将在 last.fm 的帮助下“计算”)并为我推荐播放列表。

      【讨论】:

      • 哇,播放列表软件听起来很有趣。我希望你能与公众分享你从中学到的东西:)
      【解决方案8】:

      机器人技术中有一个新兴领域称为Evolutionary Robotics (w:Evolutionary Robotics),它大量使用遗传算法 (GA)。

      w:Genetic Algorithm:

      简单的世代遗传算法伪代码

      1. 选择初始种群
      2. 评估群体中每个个体的适应度
      3. 重复直到终止:(达到时间限制或足够的适应度)
      4. 选择排名最佳的个体进行复制
      5. 通过交叉和/或突变(遗传 操作)并产生 后代
      6. 评估后代的个体适应度
      7. 用后代替换人口中排名最差的部分

      关键是生殖部分,可以有性或无性地发生,使用基因运算符CrossoverMutation

      【讨论】:

        猜你喜欢
        • 2011-04-18
        • 2021-11-12
        • 2010-11-21
        • 2011-02-22
        • 2019-06-20
        • 1970-01-01
        • 2012-06-02
        • 1970-01-01
        相关资源
        最近更新 更多