はじめに †
解が実数値で表現される最適化問題において,近年,注目される最適化法のひとつが差分進化(Differential Evolution, DE) *1*2です.ここでは簡単にDEを紹介します.
差分進化 (Differential Evolution) †
解は実数値ベクトル\( \bm{x}=\{x_1,x_2,\cdots,x_n\} \)で表します. 世代数\( t \)に対し,解集団\( \mathcal{P}_t=\{\bm{x}_{1,t},\bm{x}_{2,t},\cdots,\bm{x}_{N,t}\} \)をランダムに生成します. 各\( \bm{x}_{i,t} \)に対して,次式で変異ベクトルを算出します.
ここで,\( F \)はスケーリング係数,\( \bm{x}_{r_1,t} \),\( \bm{x}_{r_2,t} \),\( \bm{x}_{r_3,t} \)は,解集団からランダムに取り出した解です. 次に\( \bm{x}_{i,t} \)と変異ベクトル\( \bm{v}_{i,t} \)を次式のように交叉させることで,新しい解\( \bm{u}_{i,t} \)を生成します.これを各\( \bm{x}_{i,t} \)について繰り返します.
次に,解集団を更新します.各解\( \bm{x}_{i,t} \)と新しい解\( \bm{u}_{i,t} \)を比較し,目的関数値が良好な方を次世代の解集団に残します.
上記を世代数\( t \)を計数しながら繰り返します.これはDEのひとつの方法で,rand/1/binと表します.
実験 †
関数最適化問題におけるDEの動作を紹介します.使用した方法は,前述のrand/1/binで,解集団サイズは50,世代数は250,スケーリング係数F=0.7,交叉率CR=0.9に設定しました.
Sphere関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Ackley関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Three-hump関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Easom関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Griewank関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Michalewicz関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Rastrigin関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
Rosenbrock関数 †
関数 †
変数空間のみ †
目的関数と変数空間 †
*1 R. Storn, K. Price, "Differential evolution - a simple and efficient heuristic for global optimization over continuous spaces," Journal of Global Optimization, Vol. 11, pp.341-–359, 1997.
*2 田邊 遼司, 串田 淳一, 畠中 利治, 関数最適化における進化計算, 計測と制御, 54 巻, 8 号, pp. 567--572, 2015















