基因编程使用什么语言


15

作为作业的一部分,我将必须编写一种遗传编程算法来预测大气污染物的水平。由于我没有经验,因此任何人都可以向我指出编程语言的命题,在这些命题中将编写演化的程序

澄清:我不是在问我将自己编写遗传算法的语言是什么(因为我将能够自己做出决定),而是在问应该使用哪种编程语言来创建进化的程序。

我的老师建议使用Lisp,但我不喜欢这个想法-首先,我必须研究某种抽象语法树,其次,可靠地对树结构进行交叉操作可能会很麻烦。

我宁愿使用一些专用于遗传编程像斜线/ A。SlashA不需要在AST上工作-字节码中的程序只是一个int数组,可以根据需要更改它,因为每个int数组都表示某个slash / A程序。

附加说明:

  • 我想避免操纵AST!
  • 这个问题很难解决(也许不如预测库存值那么困难)。这是由于以下事实(很可能),我们没有足够的输入信息(有一些隐藏参数)。创建具有更好性能的模型(返回模型意味着更好的性能)是一个挑战(平均模型的MAPE为35%),大多数模型的MAPE约为25%,最好为20%。
  • 我想使用一种语言来管理具有许多功能的数据集,但前提是我不确定哪些功能很重要。(这里的斜杠/ A有一个缺点-在这种语言中,输入功能是按顺序读取的-因此某些功能将以较大的概率使用)。
  • 我希望能够用Python进行编程,因此python库将很棒---但我可以为C / C ++进行绑定(没有Java,没有Matlab等)。

我意识到这是一个调查问题,因此,如果该问题为时过早,请关闭它,但我认为它足够具体。

Answers:


14

您的污染物问题可能根本不需要太多语言。它看起来像是符号回归,而不是控制问题,在这种情况下,您可以只使用标准树GP,将其功能和一些有用的常数用作终端集和函数集中的相关运算符。GP系统将淘汰不相关的功能,并且有一些技术可以处理非常大的数据集。通常,指定您估计可以解决问题的最小功能集,并在必要时小心进行扩展。

您需要尽早在树型GP和线性GP之间进行选择。Lisp是树,Slash / A是线性的。仔细阅读这两本书,以了解其优缺点,但是从您写的内容来看,我建议您使用一个简单的Tree GP系统。编写自己的代码并不难,但是已有现有的Python实现。以下这些通常是针对Python中的进化算法,但并非所有GP都适用,有些是不活跃的:

  1. PyGressionGP(用于Python中符号回归的GP)-http: //code.google.com/p/pygressiongp/
  2. PyGene- https://github.com/blaa/PyGene
  3. Python中的简单遗传编程 -http://zhanggw.wordpress.com/2009/11/08/a-simple-genetic-programming-in-python-4/
  4. Pyevolve - https://github.com/perone/Pyevolve -也看到博客- http://blog.christianperone.com -和这个职位- http://blog.christianperone.com/?p= 549
  5. esec(Python中的进化计算)-http: //code.google.com/p/esec/
  6. 桃子-http: //code.google.com/p/peach/
  7. PyBrain(做了很多,不只是NN) - http://pybrain.org/
  8. dione- http://dione.sourceforge.net/
  9. PyGEP(基因表达编程)-http: //code.google.com/p/pygep/
  10. deap(分布式进化算法)-http: //code.google.com/p/deap/

另外,请参阅著名的GP作者Poli,Langdon和McPhee撰写的关于GP的(免费)入门书籍:

遗传编程领域指南-http: //www.gp-field-guide.org.uk/


您是否有关于linar和tree GP利弊的参考资料?
jb。

我看到了一些比较,但是没有任何具体的参考。您可以看一下Banzhaf和Brameier在2000年代发表的作品-我认为他们在线性GP方面做了很多工作,并在2007年出版了有关LGP的书。
格雷厄姆·琼斯

嗯...这些人为什么不团结?
vonPetrushev'2

我不确定您的意思-为什么树木和线性GP人无法团结起来?没有宗教上的鸿沟,它们只是同一想法的不同风味(还有其他想法,例如Gene Expression Progamming(GEP)-gene-expression-programming.com)。
格雷厄姆·琼斯

1
我不是说树GP是邪恶的。我只是想展示自己的实现方式,而线性则容易得多。我从零开始就花了大约4个小时来使用Python原型。
jb。

4

如果要开发程序,则无论如何都可能会操纵语法树。这样,您开发的任何程序在语法上都会自动正确。

选择语言时,您要记住两件事。

  1. 避免使用可能导致所开发的程序在某些数据上崩溃的低级构造。例如,指针算术。如果要使用C或C ++作为已开发程序的语言,则可能需要将其限制为无指针算法的版本。
    尽管类似的虚拟机(如JVM和CLR)应该为您提供一些安全网,但出于类似的原因,我还是会反对汇编语言。
  2. 适用于大型数据集;如果我正确地理解了您的任务,则输出程序本身将不得不处理大型数据集。

您可能想使用已经熟悉的目标语言。我本人并不熟悉Python,但是AFAIK满足上述条件,因此它对于您的目标语言应该是一个不错的选择。


1
请参阅github.com/arturadib/slash-a ---使用这种语言,您无需进行AST操作!程序被重新设置为字节码数组,并且由于每个数组都是正确的程序,因此您可以使用所需的任何遗传操作。
jb。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.