誰かが分化進化法を説明してもらえますか? ウィキペディアの定義は非常に専門的です。
簡単な例が続く簡単な説明をいただければ幸いです:)
誰かが分化進化法を説明してもらえますか? ウィキペディアの定義は非常に専門的です。
簡単な例が続く簡単な説明をいただければ幸いです:)
簡単な説明を次に示します。DE は、候補解の母集団を繰り返し修正して、関数の最適値に収束させる最適化手法です。
最初に候補解をランダムに初期化します。次に、反復ごとに、各候補解 x に対して次のことを行います。
(上記のアルゴリズムは非常に単純化されていることに注意してください。それからコーディングしないでください。代わりに他の場所で適切な仕様を見つけてください)
残念ながら、ウィキペディアの記事にはイラストがありません。グラフィカルな表現を使用すると理解しやすくなります。いくつかのスライドはhttp://www-personal.une.edu.au/~jvanderw/DE_1.pdfにあります。
候補解がバイナリ文字列 (染色体) ではなく (通常) 実数ベクトルと見なされる点を除いて、遺伝的アルゴリズム (GA) に似ています。DE の重要な側面の 1 つは、突然変異のステップ サイズ (突然変異についてはステップ 1 を参照) が動的であることです。つまり、母集団の構成に適応し、収束するとゼロになる傾向があります。これにより、DE は GA よりも遺伝的浮動の影響を受けにくくなります。
私自身の質問に答える...
NP
候補者で構成されています。Xi
=現在の世代からのインデックスi
(インデックスの範囲は0
~ )の親候補。ターゲット ベクターNP-1
とも呼ばれます。D
パラメータが含まれています。Xi(j)
= 候補のj番目のパラメーターXi
。Xa
, Xb
, Xc
= 3 つのランダムな親候補。(Xb - Xa)
F
= 個体群の進化の速度を決定する重み。
CR
= クロスオーバーが発生する確率。
Xc`
=差分変異操作により得られた変異ベクター。ドナーベクターとも呼ばれます。Xt
=Xi
との子Xc`
。トライアルベクターとも呼ばれます。for (int i = 0; i<NP; ++i)
i
) 。do
{
a = random.nextInt(NP);
} while (a == i)
do
{
b = random.nextInt(NP);
} while (b == i || b == a);
do
{
c = random.nextInt(NP);
} while (c == i || c == b || c == a);
Xc` = Xc + F * (Xb - Xa)
Xi
を適用します。それ以外の場合は、から継承します。少なくとも 1 つの変数を継承する必要がありますCR
Xc`
Xi
Xc`
int R = random.nextInt(D);
for (int j=0; j < D; ++j)
{
double probability = random.nextDouble();
if (probability < CR || j == R)
Xt[j] = Xc`[j]
else
Xt[j] = Xi[j]
}
Xt
優れている場合は、次の世代Xi
にXt
置き換えます。Xi
それ以外の場合Xi
は、変更されません。