这是一个普遍关心的问题,因为我不是在试图解决一个具体的问题。我环顾四周,试图找到一些涉及这一领域的文章,但我甚至很难把一些好的搜索词组合在一起。
让我们从我所知道的开始吧:我接受了大学程度的人工智能教育,包括遗传编程和更广泛的进化算法,尽管自从我十年前毕业以后,我就很少和他们玩了。我想知道这些方法是否可以用来创建解决问题的机器代码(可能是x86,或者是一些“任意”的指令集)。我们是否可以自己进化算法,比如计算平方根的算法,或者在屏幕上画出令人愉悦的图像?进化算法可以用来创建完整的编译器来创建优化的代码(包括大小、速度等)吗?
此外,我经常认为遗传规划或进化算法本身并不能很好地证明物种的进化。涉及进化算法的问题解决方法似乎总是需要智能。一个人如何创造一个真正的进化算法,使真正有趣和令人惊讶的结果能够真正发生?
TLDR:进化算法的使用在创建一种机器代码时是否有用,以前是否有进化算法的例子来产生真正有趣和令人惊讶的结果?
尼克
发布于 2012-08-12 19:47:50
进化在自然界中发挥作用的一件事是,它是非常开放的;你只要找到一种方法,任何方式,传递你的基因,就会有各种各样的成功率。
相比之下,人们期望程序做一些非常具体的事情,而且通常要么有效,要么不起作用。对于遗传算法来说,小的变化需要能够做出小的(或大的)改进,才能在健身领域爬升。但是,项目的健身前景是可怕的。
换句话说:有无限多的程序“几乎”排序一个列表,这些列表与确实对列表进行排序的程序完全不同,因此不能通过一个小的变异来将列表排序为一个列表。大多数对列表进行排序的程序也只需一个突变就会崩溃,而不是产生几乎正确的结果,不管这意味着什么。这些组合意味着很难通过小程度的渐进进化来产生这样的算法(或任何算法)。
至少,当我尝试做类似的事情时,我想这就是我学到的东西。我希望被证明是错的。
发布于 2012-08-13 20:01:11
GP能产生可执行代码吗?好的!就用LISP吧。
约翰·科扎( John )很久以前就已经确定,你可以利用基因编程来创建程序。http://www.genetic-programming.com/johnkoza.html他写了两本关于这个主题的很厚的书。
大多数GP是用LISP完成的,因为机器代码是非常结构化的,所以你的基因组到物候图“让00000是MOV,00001是JNE等等”是不可行的。实际上,您必须使用更复杂的编码。S-表达式作为真正明显的构建块出现。
发布于 2012-08-13 19:41:39
我至少知道一种叫做芬奇的方法,这是一种进化Java字节码的方法。他们的网站上有一些专题介绍和参考出版物。我认为字节码可能比x86机器代码更容易进化,因为这是堆栈机器的代码,而不是寄存器机器的代码。寄存器机器要复杂得多,因为您需要将写指令的寄存器与读指令对齐。在堆栈机器上,您只需在堆栈上推送一个值,下一个操作就会读取它。
https://stackoverflow.com/questions/11925142
复制相似问题