遗传编程和搜索算法

时间:2011-02-06 17:57:09

标签: algorithm sorting genetic-programming

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

3 个答案:

答案 0 :(得分:3)

你可能想看看80年代W. Daniel Hillis的作品。他花了很多时间通过遗传编程创建分选网络。虽然他更感兴趣的是解决对恒定数量的对象进行排序的问题(16个对象排序网络已经成为近十年来的一个主要学术问题),但如果你是熟悉他的工作将是一个好主意。对遗传分选算法真的很感兴趣。

在用于对任意长度列表进行排序的算法的演变中,您可能还希望熟悉协同进化的概念。我已经构建了一个协同进化系统,之前有一个遗传算法用于演化排序算法,而另一个GA则开发出未排序的数字列表。分拣机的适用性是它的准确性(如果100%准确,则加上较少的比较奖励),列表生成器的适用性是排序算法在排序列表时所犯的错误数。

为了回答你关于气泡是否从快速进化而来的具体问题,我不得不说我会严重怀疑它,除非程序员的健身功能非常具体和不明智。是的,泡沫非常简单,所以也许GP的适应度函数是精确度加上程序大小最终会发现泡沫。但是,当后者决定运行时,为什么程序员会选择大小而不是比较次数作为适应度函数?

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

答案 1 :(得分:2)

GP没有理由不进化,例如任何一种算法。我不确定将一个“进入”另一个进入是否真的有意义。 GP将简单地发展一个更接近你定义的适应度函数的程序。

如果您的健身功能仅查看排序正确性(假设您有适合您的GP使用的构建块),那么它可以很好地发展BubbleSort和QuickSort。如果您还将效率作为衡量适应度的指标,那么这可能会影响哪些因素被确定为更好的解决方案。

您可以通过例如播种GP QuickSort,如果你有一个合适的健身功能,它肯定最终可以拿出BubbleSort - 但它可以提出比QuickSort更健康的任何东西。

现在GP引擎需要多长时间才能完成这一演变是另一个问题......

答案 2 :(得分:1)

我不知道一个,你在你的例子中提出的具体方向似乎不太可能;它会采取一种不正常的适应性函数,因为泡沫排序在大多数情况下比快速排序更差。这可能发生这种情况并不是不可想象的,但一般来说,一旦你有了一个易于理解的算法,它已经非常适合了 - 去另一个可能需要通过一些更糟糕的选择。

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