私がやっていたサイドプロジェクトに差分進化アルゴリズムを実装しました。クロスオーバ・ステップにはパラメータの選択肢(クロスオーバ確率など)が多かったようですが、私はそれをスキップして突然変異を使用することにしました。この方法はうまくいくように見えましたが、クロスオーバーを導入するとパフォーマンスが向上するかどうかは不明です。なぜ、クロスオーバーは微分進化において有益なのですか?
メイン質問:差動進化にクロスオーバーを導入する背景には何がありますか?クロスオーバーを導入することで純粋な突然変異を凌駕するおもちゃの例を提供できますか?
私の直感は、クロスオーバが2次元で次のようなものになるということです。ふと 私たちは2つの親ベクトル(赤)を持っています。均一なクロスオーバは、青の点の1つで新しいトライアルベクタを生成することができます。
私は探検のこの種のは有益であると期待される理由はわかりません。実際、高性能ソリューションがある種の線形傾向に従うと、パフォーマンスが悪化する可能性があるようです。下の図では、赤い点が現在の母集団であり、最適解が右下隅に向いているとします。人口は、右上と左下のコーナーが悪い解決策を生み出すように谷を下っています。左上隅には「大丈夫ですが最適ではない解」が生成されます。均一なクロスオーバが改善の方向にと直交するである試行(青色で)を生成することに注目してください。私はクロスオーバー確率1を使用し、突然の突然変異を無視して私のポイントを示しました(コード参照)。この状況は、最適化の問題で非常に頻繁に発生する可能性があると思いますが、何かを誤解する可能性があります。
注:上記の例では、私は暗黙のうちに、この空間全体に(均一に)人口がランダムに初期化されたと仮定していますし、中央の谷(トップダウン正しい解に収束し始めています左から右下)。
このおもちゃの例は凸であるため、微分の進化は適切な技術でさえありません。しかし、このモチーフがマルチモーダルのフィットネス・ランドスケープに埋め込まれていれば、クロスオーバーが有害であるように思えます。クロスオーバは有益な探査をサポートしていますが、私はこの特定の方向で探検することをなぜ選択するのかはわかりません。上記の例のための
Rコード:
N = 50
x1 <- rnorm(N,mean=2,sd=0.5)
x2 <- -x1+4+rnorm(N,mean=0,sd=0.1)
plot(x1,x2,pch=21,col='red',bg='red',ylim=c(0,4),xlim=c(0,4))
x1_cx = list(rep(0, 50))
x2_cx = list(rep(0, 50))
for (i in 0:N) {
x1_cx[i] <- x1[i]
x2_cx[i] <- x2[sample(1:N,1)]
}
points(x1_cx,x2_cx,pch=4,col='blue',lwd=4)
フォローアップの質問:クロスオーバーは、特定の状況で有益である場合は、あなたの特定の問題は、クロスオーバーから恩恵を受けるかどうかを判断するに賢明なアプローチ)があります、およびb)アルゴリズムを最適化するためにクロスオーバパラメータを調整する方法は?
関連stackoverflowの質問(私はインスタンスのおもちゃの例を、より具体的な何かを探しています):what is the importance of crossing over in Differential Evolution Algorithm?
同様の問題ではなく、具体的な進化を差動に:Efficiency of crossover in genetic algorithms
直線的な傾向に従うと、進化的アルゴリズムよりも簡単な解決策が存在する可能性があります。右上/左下にもっと深いサイドバレーがあればどうでしょうか? – Bergi
@Bergi - コメントありがとう。あなたの議論は、クロスオーバーなしでは、アルゴリズムはあまりにも貪欲で、十分に探索していないのですか?なぜ突然変異のステップは十分ではありませんか?そこに遊ぶための十分なパラメータはありませんか?私は可能な限り少ない空きパラメーターで自分のルーチンを維持しようとしています。 –
これはあなたの状況に直接当てはまるわけではありませんが、クロスオーバーの一般的な直感として、Hill-Robertson効果(https://en.wikipedia.org/wiki/Hill%E2%80%93Robertson_effect)は非常に意味があります – JoeRocc