8

私は特定の問題を解決しようとはしていないので、これは一般的な関心事です。私はこの分野をカバーするいくつかの記事を探すために周りを見回しましたが、いくつかの良い検索用語をまとめるのにさえ苦労しています。

私が知っていることから始めましょう。私は10年前に卒業して以来、あまり遊んでいませんが、遺伝的プログラミングやより幅広いクラスの進化的アルゴリズムを含むAIの大学レベルの教育を受けています。これらのアプローチを使用して、問題を解決するためのマシンコード(おそらくx86、またはいくつかの「任意の」命令セット)を作成できるかどうか疑問に思います。平方根を計算したり、画面に心地よい画像を描いたりできるアルゴリズムなど、アルゴリズム自体を進化させることはできますか?進化的アルゴリズムを使用して、最適化されたコード(サイズ、速度など)を作成するコンパイラ全体を作成できますか?

さらに、遺伝的プログラミングや進化的アルゴリズムは、それ自体では種の進化の良い証拠ではないとよく思いました。進化的アルゴリズムを含む問題解決アプローチには、常にインテリジェンスを書き込む必要があるようです。真に興味深く驚くべき結果が真に発生するような方法で、人はどのようにして真に進化的なアルゴリズムを作成するのでしょうか。

TLDR:進化的アルゴリズムの使用は、ある種の機械語の作成に役立つ可能性がありますか。また、進化的アルゴリズムの一般的な例として、本当に興味深く驚くべき結果が得られたものはありますか?

ニック

4

3 に答える 3

6

自然界の進化を機能させる 1 つのことは、それが非常に自由であるということです。とにかく、自分の遺伝子を引き継ぐ方法を見つけなければならないだけで、さまざまな成功率の全範囲があります.

対照的に、プログラムは非常に具体的なことを行うことが期待されており、通常は機能するか機能しないかのどちらかです。遺伝的アルゴリズムの場合、フィットネスの世界に足を踏み入れるには、小さな変更が小さな (または大きな) 改善に貢献できる必要があります。しかし、プログラムのフィットネス状況は恐ろしいものです。

別の言い方をすれば、リストを「ほぼ」ソートするプログラムは無数にあり、リストをソートするプログラムとまったく異なるため、小さな変更によって 1 つにすることはできません。リストをソートするほとんどのプログラムは、それがを意味するにせよ、ほとんど正しい結果を生成するのではなく、たった 1 つの変更で恐ろしく壊れます。これらを組み合わせると、そのようなアルゴリズム (または任意のアルゴリズム) を少しずつ進化させることによって作成することは非常に困難です。

少なくとも、これは私が似たようなことをしようとしたときに学んだことだと思います. 私は間違っていることが証明されたいです。

于 2012-08-12T19:47:50.027 に答える
4

GPは実行可能コードを生成できますか?もちろん!LISPを使用するだけです。

John Kozaはずっと前に、遺伝的プログラミングを使用してプログラムを作成できることを確立しました。http://www.genetic-programming.com/johnkoza.html彼はこの主題について2冊の非常に厚い本を書きました。

ほとんどのGPがLISPで行われている理由は、マシンコードが非常に構造化されているため、ゲノムからフェノームへのマッピング「00000をMOV、00001をJNEなど」にすることは不可能だからです。代わりに、基本的に、より複雑なエンコーディングで作業する必要があります。S式は本当に明白な構成要素として現れます。

于 2012-08-13T20:01:11.013 に答える
1

Javaバイトコードを進化させる方法論であるFINCHと呼ばれるアプローチを少なくとも1つ知っています。彼らのサイトには、いくつかのプレゼンテーションと参考文献があります。x86 マシン コードはレジスタ マシンではなくスタック マシン用のコードであるため、バイト コードはおそらく x86 マシン コードよりも進化しやすいと思います。レジスタ マシンは、書き込み命令のレジスタを読み取り命令と揃える必要があるため、はるかに複雑です。スタック マシンでは、値をスタックにプッシュするだけで、次の操作でそれが読み取られます。

于 2012-08-13T19:41:39.190 に答える