2012-02-04 3 views
9

彼はランダム生成することで、数百ものプログラムを生成するために、コンピュータを頼むつまり私は、ビデオの1点で1994年進化プログラミング

日付ダニー・ヒリスによってかなりクールted talkを見て、彼は、「進化的プログラミング」を語ります一連のコマンドを実行してから、各プログラムが数値をどれだけうまくソートするかをテストします。彼は最高のソートプログラムを生成するプログラムの10%を最高の状態に保ち、次にうまくいった10%に基づいてプログラムの次のラウンドを生成し、何度も何度も繰り返します。

これを行うツール/プログラミング言語はありますか?例えば。特定の制約がある場合、それらの制約を最も満たすCコードを生成します。

「進化的プログラミング」に関するウィキペディアの記事をいくつか訪問しました。そこには多くの理論があるようですが、ちょうど遊ぶことができるものを見つけるのは容易ではないようです。

答えて

5

非常に簡単で一般的に無料でダウンロードできるソースは、Javaで実装されたTinyGPです。 ところで..これについての詳細は、「進化プログラミング」ではなく「遺伝子プログラミング」に関する情報を検索する必要があります。 "遺伝的アルゴリズム"、 "進化戦略"、 "進化的プログラミング"、 "遺伝的プログラミング"のような名前に小さな相違を伴う進化計算のサブフィールドがたくさんあるので、少し混乱しています... しかし、私はあなた話は実際には遺伝的プログラミングです

3

一の具体例:

Csmithが静的​​及び動的C99標準に準拠ランダムCプログラムを生成することができるツールです。これは、ストレステストコンパイラ、スタティックアナライザ、およびCコードを処理するその他のツールに役立ちます。 Csmithはテストしたすべてのツールにバグを発見しました。これまでに知られていなかった400以上のコンパイラのバグを見つけて報告しています。

+0

進化的コンピューティングとは何の関係もありません。選択は全くありません。Csmithのランダムプログラムは100%有効です。 –

+0

これは、Csmithを実行するドライバに依存します - 自動選択は、生成されたコードが検出可能なコンパイラのバグをトリガするかどうかに基づいて行われます。新しい出力は最初から出力するか、以前の出力で突然変異を行うことによって生成することができます。 – smokris

+0

それは面白いです、私はそれを試してみましょう。私は前にテストするために完全にランダムに生成されたコードを使用しました。 –

3

古典的な例はTierraAvidaです。

関連する領域は、ハードウェアの進化と進化のロボットです。例えば、this pageを参照してください。

進化的コンピューティングについてはbookもあります。

1

私は進歩的なプログラミングでいくつかのテストを行い、多くの問題で徹底的な検索がより速いことがわかりました。

私はロボットの歩行などに使用していた遺伝的アルゴリズムがよく関わっています.GALIBを使用しました。これはおそらく古代の時代です。

アイデアは「クール」ですが、最善のアプローチは、進化技術と学習(つまり強化学習)の組み合わせを使用することです。

これは人間がとにかく学ぶ方法によく似ています。長期的な進化があり、漸進的な実験と、物事を修正し、システムを環境に適応させる学習が行われています。

しかし、進化はあまりにも効率的ではありません。

+1

MAのように? http://en.wikipedia.org/wiki/Memetic_algorithm – Alexander

-1

おそらく、進化プログラムを作成するための最も汎用性の高いプログラムは、アセンブラーです。これは私が知っている唯一の言語で、他のプログラムを上書きして独自のコードを変更する能力を持っています。古いCore Warsプログラムを見たいと思うかもしれません - これらのプログラムのうちの1つの異なるバージョンまたはそれ以上の最新バージョンが、進化し競争を打ち破ることができるかもしれません。さらに、限られた数のディレクトリがある限り、あなたは生き残る可能性があります。

+0

アセンブラではすべてを行うことができますが、使い易いということではありません...そして、確かにそれは最良の解決策ではありません。 LISPやCのようなより強力なプログラミング言語は、これらの目的に使用することができます)。 –

2

プログラムを生成する進化的計算の分野は、遺伝的プログラミング(Genetic Programming:GP)と呼ばれます。 GPは、多くの世代を通して、個体群の生物学的進化をシミュレートする。通常、個人はプログラム(またはその表現、典型的にはツリーデータ構造)であり、その生存と再生の可能性は、課題解決のパフォーマンスに関して測定されます。

今日、日常業務の実用的な生産コードは正直なところ生成できません。むしろ、GPやその他の機械学習技術は現代の研究で研究され、非常に大きな企業(Google、Facebookなど)によって使用されています。実際、GPのアプローチは、目的のプログラムが何をしたいかを知っているとき(つまり、入力が与えられたときの出力を知っているとき)には非常に役に立ちますが、どのように(または難しい)自分でコードを作成します。

トピックを正しく理解するには、進化エンジンをゼロから作成して再生したいと思うでしょう。理論的な記述から始まるコードを書いても問題ありません。これは、「プリビルドされたソフトウェア」を使用するのではなく、これらのことがどのように機能するかを知る最も良い方法です。 また、遺伝的アルゴリズム(GA)の方が一般的に簡単であるため、まずはGAから始めることをお勧めします。実際、GAでは、通常、個体の遺伝子型、すなわちそれらを構成するビットを評価しますが、GPではツリーをプログラムに変換し、実行し、出力を見て、最終的にパフォーマンスを測定することができます(そうではありません。 ?)。これを見てみましょう:http://www.theprojectspot.com/tutorial-post/creating-a-genetic-algorithm-for-beginners/3

私が修士論文をしたラボでは、GPがテキスト抽出の例から正規表現を生成する上で非常に優れていることが証明されています。彼らはエンジンで遊ぶためにGUIを構築します:http://regex.inginf.units.it/demo.html。また、github:https://github.com/MaLeLabTs/RegexGeneratorのエンジンコードも共有しました。 最後に、私の友人がブログでGPとGA(遺伝的アルゴリズム)を使って面白い視覚実験をコーディングしました。見てください:http://www.nicassio.it/daniele/gp/enviroment/http://www.nicassio.it/daniele/gp/santaclaus/

関連する問題