進化戦略(しんかせんりゃく、)あるいは進化的戦略(しんかてきせんりゃく)は、メタヒューリスティクスの探索アルゴリズムである。4つの主要な進化的アルゴリズム方法論の一つでもある。進化戦略は、実数関数の非線形最適化問題を解く手法として、1960年代頃にベルリン工科大学の Ingo Rechenberg と Hans-Paul Schwefel により開発されたアルゴリズムである。遺伝的アルゴリズムと同時期に提案され内容も「進化的な要素を関数の探索に用いる」という全く同じコンセプトの手法であるが、1990年代頃までは遺伝的アルゴリズムがアメリカを中心に研究が行われていたのに対し、進化戦略は主にヨーロッパを中心に全く独立の分野として研究が行われ、あまりお互いの交流はなかった。その研究内容としては数学的な解析が非常に多いのが特徴である。進化戦略には大きく分けて、一つの状態から別の一つの状態へ遷移する手法と、複数の状態から複数の状態へ遷移する手法がある。前者は(1+1)-ESと呼ばれている、後者の方法としては(μ,λ)-ESと選択方法が若干違う(μ+λ)-ESという二つの手法があるがここではまとめて(μ,λ)-ES系と呼ぶことにする。探索手法は主に突然変異を用いる、ただし(μ,λ)-ES系では遺伝的アルゴリズムに用いられる交叉の処理も補助的な探索手法として用いられる。特に(μ,λ)-ES系は遺伝子型が実数を取るように拡張した遺伝的アルゴリズムや進化的プログラミングあるいは粒子群最適化などとの違いが薄く、現在ではこれらの手法の境界線はあいまいになっている。ここでは、(1+1)-ES アルゴリズムについて述べる。このアルゴリズムは次のような単純な局所探索の枠組みから始まる。まず n 次元空間の上の目的関数 "f(x)" の最大値を求める問題を考えてみる。このとき引数ベクトル "x" はformula_1の成分を持つとする。このときとなるベクトルformula_2を考える、ここで "N(0,σ)" は平均0、分散σ(すなわち標準偏差σ)の正規乱数(乱数列参照)であり、各成分ごとに独立である(同じ数値を全成分に加算するわけではない)。このときもし "f(x) < f(x')" であるなら、"x = x' " として上記の処理を繰り返す。ここで問題になるのはσがどれくらいの数値なら適正であるか である、もしσが小さな数値なら "x' " は非常に "x" に近い位置のベクトルになり、上記の操作は最も近い極大値を見つけることができる可能性が高い。しかしこの極大値が最大値である保証はなく、もし違うなら最大値ではない極大値に捕まって探索が失敗したことになる(局所解)。逆にσが大きな数値なら局所解の問題は回避できる可能性が高いが探索した結果がその空間付近の極大値である可能性は極めて低い、もしかしたら求めた解は最大値のほんの少し手前であるかもしれない。(1+1)-ES は上記の探索を行いながらσの値を更新する探索手法である。更新方法には決まった方法の定義は無いが提案者の Schwefel は次のような更新規則と更新方法を推奨している。突然変異(上述の正規乱数を各成分に加える行為)の成功率は 1/5 とするべきである。つまり成功率が 1/5 未満ならσを小さくし、1/5 以上ならσを大きくするべきである。この主張は以下のような数学的な解釈に基づいている。最適解を "x" としたとき、解の収束への速さをとおく。ここで "t" は探索を繰り返した回数である。このときψを最大化する、すなわちとなるようなσが最適なσであるとする。この式を多くの方程式に適用してσを求め、そのときの成功確率を求めた結果、ほとんどの式が 0.2 すなわち 1/5 付近の解を持つことに至ったため、上記の主張がなされるようになった。これを 1/5 ルールという。σの更新方法は "n" ("x" の要素数)毎の探索時に過去 10"n" 回の成功確率を見て、成功率が 2"n" 回(1/5ルール)未満なら 0 以上 1 以下の実数定数 "c" をσにかける。逆に 2"n" 回以上の成功率なら σを"c" で割ることが推奨されている。"c" の値は一概には決められないが Schwefel は 0.85 を推奨している。まとめると(1+1)-ES のアルゴリズムは以下のような流れで行われる。ここからは(μ,λ)-ES系のアルゴリズムについて述べる。このアルゴリズムは探索する "x" を複数にして、より効果的な大域探索を可能とするアルゴリズムの開発を目指したものである。しかしながら、そのような場合 (1+1)-ES のような 1/5 ルールが成り立たなくなってしまい、突然変異のパラメータ調整の具体的な指針が存在しない。そこで、(μ,λ)-ES系では突然変異のパラメータも個体の中に埋め込み最適解の探索と同時にパラメータの数値も進化させる手法が試みられている。具体的には個体を "a" とした場合、個体は次のような構成となる。(μ,λ)-ES系の突然変異は上記の個体の各要素全てについて操作を行う。まず探索のメインである探索ベクトル以外については以下のような操作が提案されている。このときformula_3は全て独立に平均 0分散 1の正規乱数である。またformula_4は定数であり推奨値はそれぞれ、 ight)^{-1} formula_5である。探索ベクトル "x" の突然変異については以下のような少々複雑な計算が行われる。まず各"i" について正規分布 "N(0, σ )" に従う正規乱数を求めそれをformula_6とおく次に各α に対して以下のような n×n の行列 formula_7 を生成するこの二つの要素を以下の式で掛け合わせてベクトルformula_8を生成する。このベクトルと"x" の和を"x' " とする。これが突然変異操作となる。(μ,λ)-ES系の組み換えは遺伝的アルゴリズムの交叉と同様の操作である。各個体に上述の突然変異を行う前に、探索ベクトル"x" の値を個体間で次のような操作を行う。他にも内分点を取るなどの操作が提案されている。(μ/ρ,λ)-ES と表記した際は、ρ個の親から交叉して1つの新しい個体を作り、それをλ回繰り返してλ個の新しい個体を作る。アルゴリズムの流れをまとめると(μ,λ)-ES系のアルゴリズムは以下のようになる。加速するために共分散行列を使用したアルゴリズム。遺伝的アルゴリズムの解説本などの中には進化戦略についてのアルゴリズムの内容を若干解説している本がいくつかある。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。