遺伝的プログラミングに使用する言語


15

割り当ての一環として、大気汚染物質レベルの予測を行う遺伝的プログラミングアルゴリズムを作成する必要があります。私には経験がないので、進化したプログラムが書かれるプログラミング言語の命題へのポインタを誰でも私に指し示すことができます。

明確化:遺伝的アルゴリズム自体を書く言語を自分で決めるのではなく(自分で決定できるようになるため)、進化したプログラムをどのプログラミング言語で作成するのかを尋ねています。

私のインストラクターはLispを提案しましたが、私はこの考えが好きではありません---まず、ある種の抽象構文ツリーで作業しなければなりません。次に、ツリー構造で確実にクロスオーバーを行うのは面倒です

私はむしろ、slash / Aのような遺伝的プログラミング専用の何かを使いたいです。SlashAはASTでの作業を必要としません---バイトコード内のプログラムは、すべてのint配列がスラッシュ/ Aプログラムを表すため、必要な任意の方法で変更できるintの配列にすぎません。

追加のコメント:

  • ASTの操作を避けたい!
  • この問題は困難です(株価の予測ほど難しくないかもしれません)。これは、(ほとんどの場合)十分な入力情報がないためです(いくつかの隠されたパラメーターがあります)。平均を返すモデルよりもパフォーマンスの良いモデルを作成するのはやや困難です(平均モデルは35%のMAPEを持っています)。ほとんどのモデルは約25%のMAPEを持ち、最高は20%です。
  • どれが重要かわからないという前提で、多くの機能を備えたデータセットを管理する言語が欲しいです。(Slash / Aには欠点があります---この言語では、入力機能は順番に読み込まれます---一部の機能がより高い確率で使用されます)。
  • 私はこれをPythonでプログラムできるようにしたいので、Pythonライブラリは素晴らしいでしょう---しかし、C / C ++のバインディングはできます(JavaやMatlabなどはできません)。

私はこれが調査の質問であることを認識しているので、もしそのような質問が早い場合は閉じてください。しかし、それは十分具体的だと感じています。

回答:


14

汚染物質の問題には、おそらく多くの言語はまったく必要ありません。これは、制御問題ではなく、シンボリック回帰のように見えます。その場合、機能といくつかの便利な定数を端末セットおよび関数セットの関連演算子として使用するだけで、標準ツリー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によるGPに関する(無料の)入門書も参照してください。

遺伝的プログラミングのフィールドガイド-http ://www.gp-field-guide.org.uk/


リナーとツリーGPの長所と短所について言及していますか?
jb。

いくつかの比較を見てきましたが、具体的な参照はありません。あなたは、BanzhafとBrameierが2000年代に出版したものを見ることができました-彼らは線形GPでかなりの仕事をし、2007年にLGPに関する本を出版したと思います。
グラハムジョーンズ

うーん...なぜこれらの人々は団結しないのですか?
vonPetrushev

私はあなたが何を意味するのか分かりません-なぜ木と線形GPの人々が団結しないのですか?宗教的格差はありません、彼らは同じ考えのちょうど異なった味をしている(その他は遺伝子発現Progamming(GEP)のように、うまくとしてそこにある- gene-expression-programming.com)。
グラハムジョーンズ

1
私は、ツリーGPが悪であると言っているのではありません。私は自分の実装をロールバックしたかっただけで、線形は非常に簡単です。Pythonプロトタイプを最初から4時間ほどで作成しました。
jb。

4

プログラムを進化させる場合は、とにかく構文ツリーを操作する可能性があります。こうすることで、どのプログラムを進化させても、自動的に構文が正しくなります。

言語を選択する際に留意しなければならないことが2つあります。

  1. 進化したプログラムが一部のデータでクラッシュする可能性のある低レベルの構造は避けてください。たとえば、ポインタ演算。進化したプログラムの言語としてCまたはC ++を使用する場合、ポインター演算のないバージョンに制限することができます。
    JVMやCLRなどの仮想マシンは、セーフティネットのようなものを提供するはずですが、同様の理由でアセンブリ言語に反対します。
  2. 大規模なデータセットに適しています。私があなたの割り当てを正しく理解していれば、出力プログラム自体が大きなデータセットを操作しなければなりません。

おそらく、すでに使い慣れているターゲット言語を使用することになるでしょう。私自身はPythonに精通していませんが、私の知る限り、上記の基準を満たしているので、ターゲット言語に適しているはずです。


1
github.com/arturadib/slash-aを参照してください---この言語ではAST操作はありません!プログラムはバイトコードの配列として再設定され、すべての配列は正しいプログラムであるため、任意の遺伝的操作を使用できます。
jb。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.