17

誰かが分化進化法を説明してもらえますか? ウィキペディアの定義は非常に専門的です。

簡単な例が続く簡単な説明をいただければ幸いです:)

4

3 に答える 3

15

簡単な説明を次に示します。DE は、候補解の母集団を繰り返し修正して、関数の最適値に収束させる最適化手法です。

最初に候補解をランダムに初期化します。次に、反復ごとに、各候補解 x に対して次のことを行います。

  1. v = a + ( b - c ) / 2 という試行ベクトルを生成します。ここで、a、b、c は母集団からランダムに選択された 3 つの異なる候補解です。
  2. x と v の間でベクトル コンポーネントをランダムに交換して、v' を生成します。v の少なくとも 1 つのコンポーネントを交換する必要があります。
  3. 母集団の x を v' に置き換えるのは、それがより適切な候補である (つまり、関数をより適切に最適化する) 場合のみです。

(上記のアルゴリズムは非常に単純化されていることに注意してください。それからコーディングしないでください。代わりに他の場所で適切な仕様を見つけてください)

残念ながら、ウィキペディアの記事にはイラストがありません。グラフィカルな表現を使用すると理解しやすくなります。いくつかのスライドはhttp://www-personal.une.edu.au/~jvanderw/DE_1.pdfにあります。

候補解がバイナリ文字列 (染色体) ではなく (通常) 実数ベクトルと見なされる点を除いて、遺伝的アルゴリズム (GA) に似ています。DE の重要な側面の 1 つは、突然変異のステップ サイズ (突然変異についてはステップ 1 を参照) が動的であることです。つまり、母集団の構成に適応し、収束するとゼロになる傾向があります。これにより、DE は GA よりも遺伝的浮動の影響を受けにくくなります。

于 2011-09-22T18:20:06.197 に答える
12

私自身の質問に答える...

概要

  • 遺伝的アルゴリズムと分化進化 (DE) の主な違いは、遺伝的アルゴリズムがクロスオーバーに依存しているのに対し、進化戦略は主要な検索メカニズムとして突然変異を使用することです。
  • DE は、2 つの母集団メンバー間の加重差を 3 番目のメンバーに追加することによって、新しい候補を生成します (これについては以下で詳しく説明します)。
  • 結果の候補が比較された候補よりも優れている場合は、それを置き換えます。それ以外の場合、元の候補は変更されません。

定義

  • 人口はNP候補者で構成されています。
  • Xi=現在の世代からのインデックスi(インデックスの範囲は0~ )の親候補。ターゲット ベクターNP-1とも呼ばれます。
  • 各候補にはDパラメータが含まれています。
  • Xi(j)= 候補のj番目のパラメーターXi
  • Xa, Xb, Xc= 3 つのランダムな親候補。
  • 差分ベクトル =(Xb - Xa)
  • F= 個体群の進化の速度を決定する重み。
    • 理想値: [0.5, 1.0]
  • CR= クロスオーバーが発生する確率。
    • 範囲: [0, 1]
  • Xc`=差分変異操作により得られた変異ベクター。ドナーベクターとも呼ばれます。
  • Xt=Xiとの子Xc`トライアルベクターとも呼ばれます。

アルゴリズム

  1. 母集団の各候補者に対して
    • for (int i = 0; i<NP; ++i)
  2. 3 つの異なる親を無作為に選択します (それらは互いに異なっている必要があります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);
  1. (突然変異ステップ) 2 つの母集団メンバー間の加重差分ベクトルを 3 番目のメンバーに追加します
    • Xc` = Xc + F * (Xb - Xa)
  2. (クロスオーバー ステップ) のすべての変数に対して、確率を継承する一様なクロスオーバーXiを適用します。それ以外の場合は、から継承します。少なくとも 1 つの変数を継承する必要がありますCRXc`XiXc`
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]
}
  1. (選択ステップ)Xt優れている場合は、次の世代XiXt置き換えます。Xiそれ以外の場合Xiは、変更されません。

資力

于 2015-04-13T02:50:28.113 に答える