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