遺伝的アルゴリズムと遺伝的プログラミングの違いについて簡単に説明したいと思います(プログラミング用語はあまり多くありません)。例もいただければ幸いです。
どうやら、遺伝子プログラミングでは、ソリューションはコンピュータプログラムです。一方、遺伝的アルゴリズムは、解を数字の文字列として表します。他に違いはありますか?
遺伝的プログラミングと遺伝的アルゴリズムは非常に似ています。これらは両方とも、何世代にもわたって潜在的な候補者の母集団における各候補者の適応度を比較することにより、問題への答えを進化させるために使用されます。
世代ごとに、他の候補の部分をランダムに変更(突然変異)または交換(クロスオーバー)することにより、新しい候補が見つかります。最も適合性の低い候補が母集団から削除されます。
それらの主な違いは、アルゴリズム/プログラムの表現です。
遺伝的アルゴリズムは、アクションと値のリストとして表され、多くの場合文字列です。例えば:
1+x*3-5*6
これを関数に変換する方法を理解するには、このエンコーディング用にパーサーを作成する必要があります。結果の関数は次のようになります。
function(x) { return 1 * x * 3 - 5 * 6; }
ミューテーションおよびクロスオーバー操作はアルゴリズムのセマンティクスを気にしないため、パーサーは無効な状態を処理する方法も知っている必要があります。たとえば、次の文字列が生成される可能性があります:1+/3-2*
。これらの無効な状態に対処するためのアプローチを決定する必要があります。
遺伝的プログラムは、アクションと値のツリー構造、通常はネストされたデータ構造として表されます。これは同じ例で、ツリーとして示されています。
-
/ \
* *
/ \ / \
1 * 5 6
/ \
x 3
このエンコーディング用にパーサーも作成する必要がありますが、突然変異とクロスオーバー操作はツリーの構造内で機能するため、遺伝的プログラミングは(通常)無効な状態を生成しません。
遺伝的アルゴリズム
遺伝子プログラム
遺伝的アルゴリズム(GA)は、自然進化のプロセスを模倣する検索アルゴリズムです。ここで、各個人は候補解です。個人は通常、(定義されているエンコード形式に関係なく)「生データ」です。
遺伝的プログラミング(GP)はGAの特殊なケースと見なされます。ここで、各個人はコンピュータープログラムです(「生」だけではありません)データ")。 GPはアルゴリズム検索スペースを探索し、コンピュータープログラムを進化させ定義されたを実行します仕事。
上記の良い部分的な答えがたくさん。コザがこの主題に関する彼の独創的なテキストでそれを述べたように、「[a GAが問題の最良の解決策である場合、GPはa GA to簡単に言えば、GPはGAのタイプであり、コスト関数によって評価されるプログラムを進化させます。ゲノムが入力のコレクションではなくプログラムであるという事実コスト関数IMHOは材料の違いです。
実用的な答え:
GAは、母集団を使用し、母集団の世代をより良い状態に進化させる場合です。 (たとえば、パン粉をまき、より良い遺伝子を取得することによって、人間が動物から人へとどのように進化したか)
GPは、問題の既知の定義により、問題をより適切に解決するためのコードを生成する場合です。 (GPは通常、解決策を説明する多くのif/elseステートメントを提供します)
簡単にするために、(私が見ているように)遺伝的プログラミングは遺伝的アルゴリズムのアプリケーションです。遺伝的アルゴリズムは、コンピュータープログラムを介して別のソリューションを作成するために使用されます。