基因编程使用什么语言

机器算法验证 遗传算法
2022-02-07 11:27:27

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

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

我的导师建议使用 Lisp,但我不喜欢这个想法 --- 首先我必须研究某种抽象语法树,其次在树结构上可靠地进行交叉可能会一团糟。

我宁愿使用专门用于基因编程的东西,比如slash/ASlashA 不需要处理 AST——字节码中的程序只是一个 int 数组,可以以任何必要的方式更改,因为每个 int 数组都代表一些 slash/A 程序。

补充说明:

  • 我想避免操纵 AST!
  • 这个问题很难(可能没有预测股票价值那么难)。这是因为(很可能)我们没有足够的输入信息(有一些隐藏参数)。创建一个比返回均值的模型具有更好性能的模型有点挑战(平均模型有 35% MAPE),大多数模型的 MAPE 约为 25%,最好有 20%。
  • 我想要一种语言来管理具有许多功能的数据集,假设我不确定哪些是重要的。(斜线/A 在这里有一个缺点——在这种语言中,输入特征是按顺序读取的——所以某些特征会以更大的概率被使用)。
  • 我希望能够在 Python 中对此进行编程,因此 python 库会很棒 --- 但我可以为 C/C++ 进行绑定(没有 Java,没有 Matlab 等)。

我知道这是一个调查问题,所以如果这个问题太早了,请关闭它,但我觉得它已经足够具体了。

2个回答

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

您需要尽早在树和线性 GP 之间进行选择。Lisp 是树,Slash/A 是线性的。阅读两者以了解优缺点,但根据您所写的内容,我建议使用简单的树 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 的(免费)介绍性书籍:

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

如果你要开发一个程序,你很可能会操纵语法树。这样,无论您开发什么程序,都会自动在语法上正确。

在选择语言时,您需要牢记两件事。

  1. 避免可能导致进化程序在某些数据上崩溃的低级构造。例如,指针算术。如果您打算使用 C 或 C++ 作为进化程序的语言,您可能希望将其限制为没有指针运算的版本。
    出于类似的原因,我会投票反对汇编语言,尽管像 JVM 和 CLR 这样的虚拟机应该为您提供一些安全网。
  2. 适用于大型数据集;如果我正确理解您的任务,输出程序本身将不得不操作大型数据集。

您可能想要使用您已经熟悉的目标语言。我自己对 Python 并不熟悉,但 AFAIK 它满足上述标准,因此它应该是您的目标语言的不错选择。