遗传编程的典型用例是什么?

时间:2008-12-10 08:58:21

标签: genetic-programming

今天我读了this blog entry by Roger Alsing关于如何仅使用50个半透明多边形来绘制Mona Lisa的副本。

对于那个特殊情况,我对the results很着迷,所以我想知道(这是我的问题):基因编程如何工作以及其他问题可能是什么通过遗传编程解决

8 个答案:

答案 0 :(得分:28)

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

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

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

进化算法也可用于解决人类实际上不知道如何解决的问题。没有任何人类偏见或偏见的EA可以产生令人惊讶的解决方案,这些解决方案与人类最好的努力相当或更好。即使我们不知道如何创建一个好的解决方案,如果它被呈现给我们,我们只需要认识到一个好的解决方案。换句话说,我们需要能够制定有效的fitness function

一些例子

编辑:免费提供的图书A Field Guide to Genetic Programming包含GP制作人力竞争结果的示例。

答案 1 :(得分:9)

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

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

我相信他们模拟了角色的神经系统,然后在某种程度上随机化了连接。然后,他们将最远行走的模型的“基因”结合起来,在后代中创造出越来越多的“儿童”。非常迷人的模拟工作。

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

答案 2 :(得分:8)

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

答案 3 :(得分:6)

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

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

我所做的微调情况是基于相同的算法微调几个奥赛罗AI玩家,给出每种不同的游戏风格,从而使每个对手都独一无二,并且有自己的怪癖,然后我让他们竞争剔除我在游戏中使用的前16个AI。优点是他们都是技术水平相当高的优秀球员,所以人类对手很有意思,因为他们无法轻易猜到AI。

答案 4 :(得分:5)

答案 5 :(得分:5)

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

在mona lisa示例中,您可以轻松确定新绘画看起来是否比上一幅绘画更像源图像,因此可以“轻松”应用遗传编程。

答案 6 :(得分:4)

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

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

答案 7 :(得分:2)

机器人领域有一个名为Evolutionary Roboticsw:Evolutionary Robotics)的新兴领域,它大量使用遗传算法(GA)。

请参阅w:Genetic Algorithm

  

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

     
      
  1. 选择初始人口
  2.   
  3. 评估人口中每个人的健康状况
  4.   
  5. 重复直至终止:(达到时间限制或足够的适应性)
  6.   
  7. 选择排名最高的个人来重现
  8.   
  9. 通过交叉和/或突变(遗传学)培育新一代   操作)并生下   后代
  10.   
  11. 评估后代的个体适合度
  12.   
  13. 用后代替换人口中排名最差的部分
  14.   

关键是使用遗传算子CrossoverMutation进行的有性或无性繁殖部分。