【问题标题】:Genetic Programming and Search Algorithms遗传编程和搜索算法
【发布时间】:2011-06-22 08:26:39
【问题描述】:

遗传编程目前是否能够将一种搜索算法演变成另一种?例如,是否有任何实验曾经从 QuickSort 培育/变异 BubbleSort(参见 http://en.wikipedia.org/wiki/Sorting_algorithm

【问题讨论】:

标签: algorithm sorting genetic-programming


【解决方案1】:

您可能想看看 80 年代 W. Daniel Hillis 的作品。他花了很多时间通过基因编程创建分类网络。虽然他对解决对恒定数量对象进行排序的问题更感兴趣(近十年来,16 对象排序网络一直是一个主要的学术问题),但如果您是对遗传排序算法非常感兴趣。

在对任意长度列表进行排序的算法的演化过程中,您可能还想熟悉协同演化的概念。我已经建立了一个协同进化系统,之前的重点是让一个遗传算法进化排序算法,而另一个 GA 开发未排序的数字列表。排序器的适应度是它的准确度(如果它是 100% 准确,则加上较少比较的奖励),列表生成器的适应度是排序算法在对其列表进行排序时出错的次数。

要回答您关于气泡是否曾经从快速进化而来的具体问题,我不得不说我会严重怀疑它,除非程序员的适应度函数既非常具体又不明智。是的,气泡很简单,所以也许一个适应度函数是准确性加程序大小的 GP 最终会找到气泡。但是,当适应度函数是后者决定运行时间时,程序员为什么要选择大小而不是比较次数作为适应度函数?

通过询问 GP 是否可以将一种算法演变成另一种算法,我想知道您是否完全清楚 GP 是什么。理想情况下,每条独特的染色体定义一个独特的排序。 200 条染色体的种群代表 200 种不同的算法。是的,quick 和 bubble 可能存在于某个地方,但其他 198 个可能未命名的方法也是如此。

【讨论】:

    【解决方案2】:

    GP 没有理由不能进化,例如任一类型的算法。我不确定考虑将一个“演变成”另一个是否真的有意义。 GP 将简单地进化出一个越来越接近您定义的适应度函数的程序。

    如果您的适应度函数只关注排序的正确性(并假设您有合适的构建块供您的 GP 使用),那么它很可能会同时改进 BubbleSort 和 QuickSort。如果您还将效率作为适合度的衡量标准,那么这可能会影响将其中哪些确定为更好的解决方案。

    你可以给 GP 播种,例如QuickSort,如果你有一个合适的适应度函数,它最终肯定会想出 BubbleSort - 但它也可以想出比 QuickSort 更合适的任何东西。

    现在 GP 引擎需要多长时间来进行这种演变是另一个问题......

    【讨论】:

      【解决方案3】:

      我不知道,您在示例中建议的特定方向似乎不太可能;这将需要一种反常的适应度函数,因为在大多数情况下,冒泡排序比快速排序更差。发生这种情况并非不可想象,但一般来说,一旦你有了一个很好理解的算法,它就已经很合适了——换一个可能需要经过一些更糟糕的选择。

      对于大多数搜索策略来说,陷入局部最小值并不是一个未知的问题。

      【讨论】:

      • 查理,只是好奇,你将如何培育下一代?我似乎无法理解跨越 sort 和 sort 来创建新算法的事实。排序算法在完成任务的整个方法上有所不同,而不仅仅是您可以使用的参数。
      • 这确实是一个关键问题。请记住,GA 的核心是通过进行大量随机更改并寻找适应度函数“更好”的更改来取得进展。同样的问题也发生在生物进化中——你可能会从鱼进化成鸟,但任何让你更接近鸟的东西都会在它繁殖之前被淹死。
      • 另一个很好的例子是熊猫:它非常适合做两件事——吃竹子和可爱。安静的竹林生态位正在消失,因此它们受到威胁。另一方面,可能只是“可爱”是确保持续生存的特征。
      • 是的,但是 GA 如何在排序算法中进行随机更改?确实没有太多可以设置的属性,并且它们与不同的算法有很大的不同,因此不可能有一个统一的方法,它采用两种随机算法并通过使用第一个算法的属性“A”和属性来创建一个新算法“B”来自第二个。您可以拥有一个池并根据性能评级函数从中进行选择,但是您如何将它们组合成一个新品种,不仅在语义上,而且在纯语法上?
      • 啊,但我是一个理论专家,这是一个实施问题。说真的,您可以将程序字符串随机更改为指令甚至 ASCII 文本;到一代人做任何事情都会非常缓慢。不用多想,我会考虑使用排序网络作为底层“密码子”en.wikipedia.org/wiki/Sorting_network。至少那时你每次都有一些“排序算法”,即使它不是特别有效,甚至没有用。
      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 2011-12-23
      • 2016-07-18
      • 2018-07-30
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2014-12-31
      相关资源
      最近更新 更多