next up previous
Next: 粒子群最適化(Particle Swarm Optimization) Up: 差分進化 Previous: 定義

アルゴリズム

DE/rand/1/{bin,exp} のアルゴリズムは以下のように記述できる[3,4].

Step0
初期化. $N$ 個の初期個体 $\mbox{\boldmath$x$}_i$ を初期探索点として生成し,初期集団 $\{\mbox{\boldmath$x$}_i, i=1,2,\cdots,N\}$ を構成する. 全ての個体を評価する.
Step1
終了判定. 終了条件を満足すれば,アルゴリズムは終了する.終了条件としては,最大の繰り返し回数や関数評価回数を用いることが多い.
Step2
突然変異. 各個体 $\mbox{\boldmath$x$}_i$に対して,3個体 $\mbox{\boldmath$x$}_{p1}$, $\mbox{\boldmath$x$}_{p2}$, $\mbox{\boldmath$x$}_{p3}$ $\mbox{\boldmath$x$}_i$および互いに重複しないようにランダムに選択する. 新しいベクトル $\mbox{\boldmath$x$}'$ を基本ベクトル $\mbox{\boldmath$x$}_{p1}$ および差分ベクトル $\mbox{\boldmath$x$}_{p2}-\mbox{\boldmath$x$}_{p3}$ から以下のように生成する.
\begin{displaymath}
\mbox{\boldmath$x$}' = \mbox{\boldmath$x$}_{p1} + F (\mbox{\boldmath$x$}_{p2}-\mbox{\boldmath$x$}_{p3})
\end{displaymath} (2)

ここで,$F$ はスケーリングパラメータである.
Step3
交叉. ベクトル $\mbox{\boldmath$x$}'$ を親 $\mbox{\boldmath$x$}_i$ と交叉し,子ベクトル $\mbox{\boldmath$x$}^{\rm {}new}_i$ を生成する. 交差点 $j$ を全ての次元 $[1,n]$ からランダムに選択する. 子ベクトル $\mbox{\boldmath$x$}^{\rm {}new}_i$$j$ 番目の要素を $\mbox{\boldmath$x$}'$$j$番目の要素から継承する. 交叉法がbinの場合には,それ以降の次元は,交叉率$CR$の確率で, $\mbox{\boldmath$x$}'$ の要素から継承し,$1-CR$の確率で親 $\mbox{\boldmath$x$}_i$ から継承する. 交叉法がexpの場合には,それ以降の次元は,$CR$によって指数関数的に減少する確率で, $\mbox{\boldmath$x$}'$ の要素から継承し,残りの部分は,親 $\mbox{\boldmath$x$}_i$ から継承する. 実際の処理では,Step2 と Step3 は一まとまりの処理で実現される.
Step4
ポテンシャル法.もし,子ベクトルが親ベクトルよりも良いと推定されれば,Step5に進む.そうでなければ,Step6 に進む.
Step5
生存者選択. 子ベクトルを評価する. 子ベクトル $\mbox{\boldmath$x$}^{\rm {}new}_i$ が親ベクトルよりも良ければ子ベクトルが生存者となり,親を子ベクトルで置換する.
Step6
Step1 に戻る.

以下に擬似コードを示す.
\begin{example*}{0em}
DE/rand/1/bin()
\{
$P$=Generate $N$ individuals \{$\mbox...
...boldmath$x$}_i$=$\mbox{\boldmath$x$}^{\rm {}new}$;
\}
\}
\}
\}
\end{example*}


\begin{example*}{0em}
DE/rand/1/exp()
\{
$P$=Generate $N$ individuals \{$\mbox...
...boldmath$x$}_i$=$\mbox{\boldmath$x$}^{\rm {}new}$;
\}
\}
\}
\}
\end{example*}
ここで,$u(0,1)$は区間$[0,1]$の一様乱数生成関数である.



takahama 2007-07-13