32

遺伝的アルゴリズムと遺伝的プログラミングの違いについて簡単に説明したいと思います (プログラミングの専門用語はあまり使わずに)。例も高く評価されます。

どうやら、遺伝的プログラミングでは、ソリューションはコンピュータープログラムです。一方、遺伝的アルゴリズムは解を一連の数値として表します。他に違いはありますか?

4

6 に答える 6

47

遺伝的アルゴリズム(GA)は、自然進化のプロセスを模倣する検索アルゴリズムであり、各個人が候補解です。個人は通常、(定義されているエンコード形式に関係なく)「生データ」です。

遺伝的プログラミング(GP)は、GAの特殊なケースと見なされ、各個人は(「生データ」だけでなく)コンピュータープログラムです。GPは、アルゴリズムの検索空間を探索し、コンピュータープログラムを進化させて、定義されたタスクを実行します。

于 2010-09-29T12:56:00.237 に答える
28

遺伝的プログラミングと遺伝的アルゴリズムは非常に似ています。それらは両方とも、何世代にもわたって潜在的な候補の集団における各候補の適合性を比較することにより、問題に対する答えを進化させるために使用されます。

世代ごとに、他の候補の一部を無作為に変更 (突然変異) したり交換したり (交差) することによって、新しい候補が見つかります。最も「適合しない」候補が母集団から削除されます。

構造上の違い

それらの主な違いは、アルゴリズム/プログラムの表現です。

遺伝的アルゴリズムは、アクションと値のリスト (多くの場合、文字列) として表されます。例えば:

1+x*3-5*6

これを関数に変換する方法を理解するには、このエンコーディング用にパーサーを作成する必要があります。結果の関数は次のようになります。

function(x) { return 1 * x * 3 - 5 * 6; }

パーサーは、無効な状態を処理する方法も知っている必要があります。これは、突然変異操作とクロスオーバー操作がアルゴリズムのセマンティクスを気にしないためです。たとえば、次の文字列が生成される可能性があります1+/3-2*。これらの無効な状態に対処するためのアプローチを決定する必要があります。

遺伝的プログラムは、通常はネストされたデータ構造である、アクションと値のツリー構造として表されます。以下は、同じ例をツリーとして示したものです。

      -
   /     \
  *       *
 / \     / \
1   *   5   6
   / \
  x   3

このエンコーディング用にパーサーも作成する必要がありますが、突然変異とクロスオーバー操作はツリー構造内で機能するため、遺伝的プログラミングは (通常) 無効な状態を生成しません。

実際の違い

遺伝的アルゴリズム

  • 本質的に長さが固定されているため、結果として得られる関数の複雑さが制限されます
  • 多くの場合、無効な状態が生成されるため、これらは非破壊的に処理する必要があります
  • 多くの場合、制限と見なされる可能性のある演算子の優先順位に依存します (たとえば、この例では、乗算は減算の前に発生します)。

遺伝子プログラム

  • 本質的に可変長であるため、より柔軟ですが、複雑になることがよくあります
  • 無効な状態を生成することはめったにありません。通常、これらは破棄できます
  • 明示的な構造を使用して、演算子の優先順位を完全に回避します
于 2016-01-07T11:24:19.140 に答える
1

簡単に言うと(私の見方では)遺伝的プログラミングは遺伝的アルゴリズムの応用です。遺伝的アルゴリズムは、コンピューター プログラムを介して別のソリューションを作成するために使用されます。

于 2010-09-29T08:44:55.963 に答える
0

実用的な答え:

GA は、集団を使用し、集団の世代をより良い状態に進化させる場合です。(例えば、人間がどのように動物から人間に進化したか、パン粉をまき、より良い遺伝子を得る)

GP は、問題の既知の定義により、問題をより適切に解決するためのコードを生成する場合です。(GP は通常、ソリューションを説明する多くの if/else ステートメントを提供します)

于 2010-09-29T08:42:42.033 に答える