web-dev-qa-db-ja.com

遺伝的プログラミングでASTに対して交差演算を実行する

そのため、一般に、GAでクロスオーバーを実行する場合、「ゲノム」のランダムなセクションを他の親の対応するセクションと直接反転させ、突然変異率に基づいてそれを突然変異させます。

以下のシーケンスを検討してください。

0100 1000 0001 1011

0010 0110 1101 1111

変異のないクロスオーバーは次のようになります。

0100 0110 1101 1011

0010 1000 0001 1111

その場合、ブロック2と3が交換され、ブロック1と4は変更されませんでした。

最初の親で参照する抽象ツリー内のポイントが2番目の親のセクションと互換性がある保証はないため、たとえば、ある構文セクションがGPで抽象構文ツリーとどのように機能するかはわかりません。次の例のように、戻り値の型はブール型で、もう一方は戻り値の型の文字列です。

    p1
   /  \
  b    i
 /\   /\
b  f i  s

    p2
   /  \
  s    b
 /\   /\
i  n s  i

戻り値の型がbである親1からブランチ1を、戻り値の型がsである親2からブランチ1に渡ろうとした場合、実行すると構文エラーが発生します。 ASTでクロスオーバーを正しく実行します。具体的な例をいただければ幸いです。

8
Jordan LaPrise

最初の観察は、正規GAは固定長表現に基づいています(特定の遺伝子の固定数 loci =染色体上)。

したがって、クロスオーバーGA演算子は生物学的有性生殖に類似しています:母親と父親の両方からの遺伝物質は、子供の遺伝子が(ほぼ)同じ位置にあるように組み合わされていますその親の中で。

これは、サブツリーをツリー構造のまったく異なる位置に移動できる従来のツリーベースのGPクロスオーバーとはかなり異なります。

標準GPはclosureとして知られる「制限」を想定しているため、この形式のクロスオーバーが発生する可能性があります。

関数のすべての変数、定数、引数、および関数から返される値は、同じデータ型でなければなりません。

ASTベースの表現は、(強く)型付けされた遺伝的プログラミングの形式であり、実現可能な交差点にいくつかの制約を導入します。

ASTのすべてのノードはタイプに関連付けられており、クロスオーバーを実行する前に、互換性のあるクロスオーバーポイントのリストを作成する必要があります。

       p1[1]                          p2[1]
      /     \                        /     \
  [2]b       i[5]                [2]s       b[5]
  /  \       /  \                /  \       /  \
[3]b [4]f [6]i  [7]s           [3]i [4]n [6]s  [7]i


b(p1): [2, 3]      b(p2): [5]
f(p1): [4]         f(p2): []
i(p1): [5, 6]      i(p2): [3, 7]
s(p1): [7]         s(p2): [2, 6]
n(p1): []          n(p2): [4]

今:

  1. [P]からランダムなクロスオーバーポイントp1を選択します
  2. サブツリー[P]p2の互換性のあるものと交換します

例えば.

  1. p1のランダム選択は[5]です
  2. p2の互換サブツリーには、[3][7]にルートがあります。ランダム選択は[7]です。

クロスオーバーの結果は次のとおりです。

    p1                p2
   /  \              /  \
  b    i            s    b
 /\                / \  / \
b  f              b   fs   i 
                          / \
                         i   s

子供たちは同じ形ではありませんが、GPではかなり標準的です。

これは非常に基本的なアプローチです。時間とともに、他のさまざまな側面を考慮する必要があります。

  • 多くの場合クロスオーバーポイントは一定の確率で選択されません

    典型的なGPプリミティブセットは、平均分岐係数(各ノードの子の数)が少なくとも2のツリーにつながるため、ノードの大部分は葉になります。その結果、クロスオーバーポイントを均一に選択すると、非常に少量の遺伝物質(つまり、小さなサブツリー)のみを頻繁に交換するクロスオーバー操作が発生します。多くのクロスオーバーは、実際には単純に2つのリーフを交換することまで削減できます。

    これに対抗するために、Koza(1992)は、90%の確率で関数を選択し、10%の確率で関数を残すという広く使用されているアプローチを提案しました。

    (から 遺伝的プログラミングへのフィールドガイド リカルドポリ、ウィリアムラングドン、ニコラスマクフィー、ジョンコザ)

    したがって、互換性のあるクロスオーバーポイントの単純なリストでは十分ではありません。

  • ツリーのサイズを小さくするために特別な演算子を使用する必要がある場合があります(例:ホイスト変異、シュリンク変異)

  • 一部のコンテキストでは、遺伝物質の位置を保存する傾向があるクロスオーバー演算子が必要になる場合があります(homologous )。

    例えば。 1点相同交差では、ルートノードから2つの親ツリーを分析し、共通領域内の2つのツリーの部分からのみ交差ポイントを選択する必要があります。

    共通領域は、親ツリー間のマッチングプロセスの結果を表すという意味で、相同性に関連しています。 2つの親ツリー間の共通領域内では、線形ビット文字列遺伝的アルゴリズムの場合と同様に、相同プリミティブの転送が発生する可能性があります。

    (「遺伝的プログラミングのフィールドガイド」)

    同種のクロスオーバーは、興味深い実装の詳細を示します(タイプ互換のクロスオーバーポイントのリストと調整する必要があります)。

  • ASTベースの表現は、クロスオーバー/ミューテーションオペレーターが認識しなければならないさまざまな形式の「構造的バイアス」をもたらす可能性があります。


最後に重要なことですが、型付き遺伝的プログラミングの実装に適した他の表現があります(ツリーベースでなくても)。線形表現は、特定のプログラミング言語に最適な選択です(線形表現を使用し、相同演算子が線形GPで広く使用されている場合、相同交差を実現するのはかなり簡単です)。


詳細については、2つのすばらしい無料リソースがあります。

6
manlio