進化戦略のソースを表示
←
進化戦略
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''進化戦略'''(しんかせんりゃく、{{lang-en-short|Evolution Strategy, ES}})あるいは'''進化的戦略'''(しんかてきせんりゃく)は、[[メタヒューリスティクス]]の探索[[アルゴリズム]]である。4つの主要な[[進化的アルゴリズム]]方法論の一つでもある。 == 概要 == 進化戦略は、[[実数]][[関数 (数学)|関数]]の[[非線形]][[最適化問題]]を解く手法として、[[1960年代]]頃に[[ベルリン工科大学]]の Ingo Rechenberg と Hans-Paul Schwefel により開発されたアルゴリズムである。 [[遺伝的アルゴリズム]]と同時期に提案され内容も「進化的な要素を関数の探索に用いる」という全く同じコンセプトの手法であるが、[[1990年代]]頃までは遺伝的アルゴリズムが[[アメリカ合衆国|アメリカ]]を中心に研究が行われていたのに対し、進化戦略は主に[[ヨーロッパ]]を中心に全く独立の分野として研究が行われ、あまりお互いの交流はなかった。その研究内容としては数学的な解析が非常に多いのが特徴である。 進化戦略には大きく分けて、一つの状態から別の一つの状態へ遷移する手法と、複数の状態から複数の状態へ遷移する手法がある。 前者は'''(1+1)-ES'''と呼ばれている、後者の方法としては'''(μ,λ)-ES'''と選択方法が若干違う'''(μ+λ)-ES'''という二つの手法があるがここではまとめて(μ,λ)-ES系と呼ぶことにする。 探索手法は主に[[突然変異]]を用いる、ただし(μ,λ)-ES系では遺伝的アルゴリズムに用いられる交叉の処理も補助的な探索手法として用いられる。特に(μ,λ)-ES系は遺伝子型が実数を取るように拡張した遺伝的アルゴリズムや[[進化的プログラミング]]あるいは[[粒子群最適化]]などとの違いが薄く、現在ではこれらの手法の境界線はあいまいになっている。 == (1+1)-ES アルゴリズム == === 概要 === ここでは、(1+1)-ES アルゴリズムについて述べる。このアルゴリズムは次のような単純な[[局所探索]]の枠組みから始まる。 まず n 次元空間の上の目的関数 ''f(x)'' の最大値を求める問題を考えてみる。 このとき[[引数]][[ベクトル]]{{要曖昧さ回避|date=2021年7月}} ''x'' は<math>x = (x_1, x_2, \dots, x_n)</math>の成分を持つとする。このとき {{Indent|<math> x'_i = x_i + N(0,\sigma^2) (i=1,2,\dots, n)</math>}} となるベクトル<math>x' = (x'_1, x'_2, \dots, x'_n)</math>を考える、ここで ''N''(0, ''σ''<sup>2</sup>) は[[平均]] 0、[[分散 (確率論)|分散]] ''σ''<sup>2</sup>(すなわち[[標準偏差]] ''σ'')の正規乱数([[乱数列]]参照)であり、各成分ごとに独立である(同じ数値を全成分に加算するわけではない)。 このときもし ''f''(''x'') < ''f''(''x′'') であるなら、''x'' = ''x′'' として上記の処理を繰り返す。 ここで問題になるのは'''σがどれくらいの数値なら適正であるか''' である、もしσが小さな数値なら ''x' '' は非常に ''x'' に近い位置のベクトルになり、上記の操作は最も近い[[極大値]]を見つけることができる可能性が高い。しかしこの極大値が最大値である保証はなく、もし違うなら最大値ではない極大値に捕まって探索が失敗したことになる(局所解)。逆にσが大きな数値なら局所解の問題は回避できる可能性が高いが探索した結果がその空間付近の極大値である可能性は極めて低い、もしかしたら求めた解は最大値のほんの少し手前であるかもしれない。 (1+1)-ES は上記の探索を行いながらσの値を更新する探索手法である。更新方法には決まった方法の定義は無いが提案者の Schwefel は次のような更新規則と更新方法を推奨している。 ==== 1/5 ルール ==== 突然変異(上述の正規乱数を各成分に加える行為)の成功率は 1/5 とするべきである。つまり成功率が 1/5 未満ならσを小さくし、1/5 以上ならσを大きくするべきである。この主張は以下のような数学的な解釈に基づいている。 最適解を ''x<sup>*</sup>'' としたとき、解の収束への速さを {{Indent|<math>\psi = E\left\{ || x^* - x(t) || - || x^* - x(t+1) || \right\}</math>}} とおく。ここで ''t'' は探索を繰り返した回数である。このときψを最大化する、すなわち {{Indent|<math>\left.\frac{d\psi}{d\sigma}\right|_{\sigma^*} = 0 </math>}} となるようなσ<sup>*</sup>が最適なσであるとする。この式を多くの方程式に適用してσ<sup>*</sup>を求め、そのときの成功確率を求めた結果、ほとんどの式が 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 のアルゴリズムは以下のような流れで行われる。 # ''x'' とσの初期値をランダムで決める。 # 突然変異操作より''x'' の近傍 ''x' '' を求める(求め方は上述の概要を参照) # ''f(x) < f(x')'' であるなら、''x = x' '' とする。 # 1/5 ルールに従いσを更新する。 # 適当な終了条件が満たされるまで2. 以下の操作を繰り返す。 == (μ,λ)-ES系 == === 概要 === ここからは(μ,λ)-ES系のアルゴリズムについて述べる。このアルゴリズムは探索する ''x'' を複数にして、より効果的な大域探索を可能とするアルゴリズムの開発を目指したものである。しかしながら、そのような場合 (1+1)-ES のような 1/5 ルールが成り立たなくなってしまい、突然変異のパラメータ調整の具体的な指針が存在しない。 そこで、(μ,λ)-ES系では突然変異のパラメータも個体の中に埋め込み最適解の探索と同時にパラメータの数値も進化させる手法が試みられている。 具体的には個体を ''a'' とした場合、個体は次のような構成となる。 {{Indent|<math> a = (x, \sigma, \alpha) </math> {{Indent|(探索ベクトル)<math>x = (x_1, x_2, \dots, x_n)</math><br /> (突然変異パラメータ)<math>\sigma = (\sigma_1, \sigma_2, \dots, \sigma_n)</math><br /> (調整パラメータ)<math>\alpha = (\dots, \alpha_{ij},\dots) (i= 1, \dots, n-1)(j= i+1,\dots, n)</math> }} }} === 突然変異の操作 === (μ,λ)-ES系の突然変異は上記の個体の各要素全てについて操作を行う。 まず探索のメインである探索ベクトル以外については以下のような操作が提案されている。 {{Indent|<math>\sigma'_i = \sigma_i\exp\left(\tau'\xi + \tau\xi_i\right)</math><br /> <math>\left.\alpha'_{ij} = \alpha_{ij} + \beta\xi_{ij}\right.</math>}} このとき<math>\xi,\xi_i,\xi_{ij}</math>は全て独立に平均 0分散 1の正規乱数である。 また<math>\tau,\tau',\beta</math>は定数であり推奨値はそれぞれ、 {{Indent|<math> \tau = \left(\sqrt{2\sqrt{n}}\right)^{-1} </math><br /> <math> \tau' = \left(\sqrt{2n}\right)^{-1} </math><br /> β <nowiki>=</nowiki> 0.0873}} である。 探索ベクトル ''x'' の突然変異については以下のような少々複雑な計算が行われる。 まず各''i'' について正規分布 ''N(0, σ<sub>i</sub><sup>2</sup> )'' に従う正規乱数を求めそれを<math>\eta =\left(\eta_1,\eta_2,\dots,\eta_n\right)</math>とおく 次に各α<sub>ij</sub> に対して以下のような n×n の[[行列]] <math>R(\alpha_{ij})</math> を生成する {{Indent| <math>\left.r_{ii} = r_{jj} = \cos\alpha_{ij}\right.</math><br /> <math>\left.r_{ij} = -r_{ji} = -\sin\alpha_{ij}\right.</math><br /> <math>r_{kk} = 1 (k= 1, \dots, n \mbox{ and } k \neq i, k \neq j)</math><br /> それ以外の要素は 0 とする。 }} この二つの要素を以下の式で掛け合わせてベクトル<math>\zeta = (\zeta_1,\zeta_2,\dots,\zeta_n)</math>を生成する。 {{Indent|<math>\zeta = \prod^{n-1}_{i=1}\prod^n_{j=i+1}R(\alpha_{ij})\eta</math>}} このベクトルと''x'' の和を''x' '' とする。 {{Indent|<math>\left.x' = x + \zeta\right.</math>}} これが突然変異操作となる。 === 組み換え === (μ,λ)-ES系の組み換えは[[遺伝的アルゴリズム]]の交叉と同様の操作である。 各個体に上述の突然変異を行う前に、探索ベクトル''x'' の値を個体間で次のような操作を行う。 {{Indent| * (入れ換え)個体 a の探索ベクトル x の成分 x<sup>a</sup><sub>i</sub>と個体 b の探索ベクトル x の成分 x<sup>b</sup><sub>i</sub>を入れ換える * (中間値)個体 a の探索ベクトル x の成分 x<sup>a</sup><sub>i</sub>と個体 b の探索ベクトル x の成分 x<sup>b</sup><sub>i</sub>をそれぞれ(x<sup>a</sup><sub>i</sub> + x<sup>b</sup><sub>i</sub>)/2 に置き換える。 }} 他にも[[内分点]]を取るなどの操作が提案されている。 '''(μ/ρ,λ)-ES''' と表記した際は、ρ個の親から交叉して1つの新しい個体を作り、それをλ回繰り返してλ個の新しい個体を作る。 === アルゴリズムの流れ === アルゴリズムの流れをまとめると(μ,λ)-ES系のアルゴリズムは以下のようになる。 # μ個の個体をランダムに生成して、それぞれの個体の目的関数を評価する。 # いくつかの個体に対しては組み換え操作を行う。 # 各個体を適当に選択し、その個体に突然変異操作を行った個体を新たにλ個生成する。 # それぞれの個体の目的関数を評価する。 # 生き残る個体を決定する ## (μ,λ)-ESの場合は新たに生成したλ個の個体(λ>μ)の内上位μ個を選び、残りを削除する。 ## (μ+λ)-ESの場合は新たに生成したλ個の個体と生成元のμ個の個体を混ぜ合わせ上位μ個の個体を選び、残りを削除する。 # 終了条件を満たすまで2. 以下の操作を繰り返し、最終的に最も成績の良い個体の探索ベクトルを解として出力する。 == CMA-ES == {{main|CMA-ES}} 加速するために[[共分散行列]]を使用したアルゴリズム。 == 参考文献 == 遺伝的アルゴリズムの解説本などの中には進化戦略についてのアルゴリズムの内容を若干解説している本がいくつかある。 * 坂和正敏・田中雅博 『遺伝的アルゴリズム』、朝倉書店、1995年、ISBN 4-254-20990-8 * 三宮信夫・喜多 一・玉置 久・岩本貴司『遺伝アルゴリズムと最適化』、朝倉書店、1998年、ISBN 4-254-20977-0 == 関連項目 == *[[進化的アルゴリズム]] *[[遺伝的アルゴリズム]] *[[遺伝的プログラミング]] *[[進化的プログラミング]] == 外部リンク == * {{Wayback|url=http://www.scholarpedia.org/article/Evolution_Strategies |title=Evolution Strategies |date=20070107113829}} - [[スカラーペディア]]百科事典「進化戦略」の項目。 {{最適化アルゴリズム}} {{DEFAULTSORT:しんかせんりやく}} [[Category:人工知能]] [[Category:最適化アルゴリズム]] [[Category:進化的計算]] [[Category:進化的アルゴリズム]]
このページで使用されているテンプレート:
テンプレート:Indent
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:Main
(
ソースを閲覧
)
テンプレート:Wayback
(
ソースを閲覧
)
テンプレート:最適化アルゴリズム
(
ソースを閲覧
)
テンプレート:要曖昧さ回避
(
ソースを閲覧
)
進化戦略
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報