進化的プログラミング

これはこのページの過去の版です。U-ichi (会話 | 投稿記録) による 2006年8月6日 (日) 05:45個人設定で未設定ならUTC)時点の版 (内容を追加)であり、現在の版とは大きく異なる場合があります。

進化的プログラミング(Evolutionary Programming)は、4つの主要な進化的アルゴリズム方法論の1つである。

概要

人工知能の生成を意図した学習過程として、シミュレーションされた進化を使った Lawrence J. Fogel が1960年に最初に使った用語である。Fogel は予測機として有限状態機械を使い、それを発展させた。

その後、彼の息子の David B. Fogelにより実数関数最適化問題を探索する手法に拡張され、進化的戦略と類似した方法に発展した。

進化的プログラミングの中心となるのは突然変異である。親ベクトルに対してランダムな変化を加えて子ベクトルを生成し、それらを評価して、ランダムに個体を選んで適用度を比較する。これによって次の世代を選び、解が収束するまでこれを繰り返していく。

現在、進化的プログラミングは他の3つの方法論に比べると特に決まった構造が無く、進化的コンピューティング全般を漠然と指す用語となっている。進化的プログラミングと進化的戦略を区別することは困難になってきている。

アルゴリズムの流れ

上記の記述通り、進化的プログラミングは現在決まった構造を持たない。そこで、ここでは D.B.Fogel が提案した実数関数の探索アルゴリズムの流れを述べる。

  1. N  個の個体(この場合は関数の引数)を用意して、これにランダムで初期値を設定する。
  2. 個体のそれぞれのコピーをつくる。
  3. 2. で作った各コピーに正規乱数(乱数列参照)を加える。
  4. 3. の操作で作られた新しい N  個の個体と、元の個体を混ぜた 2N  個の各個体に対して評価値を求める、評価値は以下の方法で求める。
    1. 評価値を求める個体以外の個体をランダムで q 個選択する。
    2. 選んだ q 個の個体のうち、対象の個体より成績が悪い個体(最大値を求める場合は、対象の個体より関数の値が小さい個体)の数をその個体の評価値とする。
  5. 評価値順に個体をソートする。
  6. 下位 N 個の個体を削除する。
  7. 終了条件を満たすまで2. 以下の操作を繰り返す。

上記のアルゴリズムの場合、コピーした個体に正規乱数を加える操作が突然変異の操作にあたる。

独自の特徴としては、評価値の与え方である。実際この評価値の与え方を進化的プログラミングの特徴に挙げる者もいる。ただし、この評価値の与え方および個体の残し方は全くの拡張を行わずに他の進化的アルゴリズム(遺伝的アルゴリズムや進化的戦略)に適用可能である。

関連項目

参考文献

日本では進化的プログラミングを専門に扱っている書籍はほとんどない。ただし、遺伝的アルゴリズムの解説本などの中には進化的アルゴリズムの内容に簡単に触れている本がいくつかある。

  • 坂和正敏、『遺伝的アルゴリズム』、朝倉書店、1995年
  • 三宮信夫、喜多 一、玉置 久、岩本貴司『遺伝的アルゴリズムと最適化』、朝倉書店、1998年