進化的プログラミング
上記の記述通り、進化的プログラミングは現在決まった構造を持たない。そこで、ここでは D.B.Fogel が提案した実数関数の探索アルゴリズムの流れを述べる。
N 個の個体(この場合は関数の引数)を用意して、これにランダムで初期値を設定する。
個体のそれぞれのコピーをつくる。
2. で作った各コピーに正規乱数(乱数列参照)を加える。
3. の操作で作られた新しい N 個の個体と、元の個体を混ぜた 2N 個の各個体に対して評価値を求める、評価値の求め方は以下の通り。 評価値を求める個体以外の個体をランダムで q 個選択する。 選んだ q 個の個体のうち、対象の個体より成績が悪い個体(最大値を求める場合は、対象の個体より関数の値が小さい個体)の数をその個体の評価値とする。
評価値順に個体をソートする。
下位 N 個の個体を削除する。
終了条件を満たすまで2. 以下の操作を繰り返す。
残った中で最も成績の良い個体を「解」として出力する。
上記のアルゴリズムの場合、コピーした個体に正規乱数を加える操作が突然変異の操作にあたる。
特徴としては、評価値の与え方がある。この評価値は集団中で最も優れた個体の評価値は q になり、最も劣っている個体の評価値は 0 になるがそれ以外の個体の評価値は一定ではなく比較的優秀な個体の評価値の方が高くなる確率が高い確率的関数であるといえる。
このような評価値を与えることを進化的プログラミングの特徴に挙げることもある。ただし、この評価値の与え方および個体の残し方は全くの拡張も変更も行わずに他の進化的アルゴリズム(遺伝的アルゴリズムや進化的戦略)に適用可能である。