Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

粒子群最適化アルゴリズム

アルゴリズムのアウトライン

particleswarm は、Kennedy と Eberhart [1] で説明されているアルゴリズムに基づいており、Mezura-Montes と Coello Coello [2] および Pedersen [3] で提案された変更が使用されています。

粒子群アルゴリズムは、初期粒子を作成し、それらに初期速度を割り当てることから始まります。

各粒子の位置で目的関数を評価し、最良(最低)の関数値と最適な位置を決定します。

現在の速度、粒子の個々の最適な位置、および隣接する粒子の最適な位置に基づいて、新しい速度を選択します。

次に、パーティクルの位置 (新しい位置は古い位置と速度を加えたもので、パーティクルを境界内に維持するように修正されます)、速度、および近傍を繰り返し更新します。

アルゴリズムが停止基準に達するまで反復が続行されます。

手順の詳細は次のとおりです。

初期化

デフォルトでは、particleswarm は境界内でランダムに均一にパーティクルを作成します。無制限のコンポーネントがある場合、particleswarm は -1000 から 1000 までのランダムな均一分布を持つ粒子を作成します。境界が 1 つしかない場合、particleswarm は作成をシフトして、境界をエンドポイントとし、作成間隔を 2000 の幅にします。粒子 i の位置は x(i) で、これは nvars 要素を持つ行ベクトルです。InitialSwarmSpan オプションを使用して、初期群の範囲を制御します。

同様に、particleswarm は、範囲 [-r,r] 内でランダムに均一に初期粒子速度 v を作成します。ここで、r は初期 範囲 のベクトルです。コンポーネント k の範囲は min(ub(k) - lb(k),InitialSwarmSpan(k)) です。

particleswarm はすべての粒子で目的関数を評価します。各粒子iの現在の位置p(i)を記録します。以降の反復では、p(i) は粒子 i が見つけた最適な目的関数の場所になります。そして、b はすべての粒子の中で最適です: b = min(fun(p(i)))d は、b = fun(d) となる場所です。

particleswarm は近傍サイズ NminNeighborhoodSize = max(2,floor(SwarmSize*MinNeighborsFraction)) に初期化します。

particleswarm は慣性 W = max(InertiaRange) を初期化します。InertiaRange が負の場合は W = min(InertiaRange) を設定します。

particleswarm はストール カウンター c = 0 を初期化します。

表記の便宜上、変数 y1 = SelfAdjustmentWeighty2 = SocialAdjustmentWeight を設定します。ここで、SelfAdjustmentWeightSocialAdjustmentWeight はオプションです。

反復ステップ

アルゴリズムは次のように群れを更新します。位置 x(i) にある粒子 i の場合:

  1. i 以外の N 粒子のランダムなサブセット S を選択します。

  2. 近傍点の中で最適な目的関数である fbest(S) と、最適な目的関数を持つ近傍点の位置である g(S) を見つけます。

  3. 長さnvarsu1u2の一様(0,1)分布ランダムベクトルに対して、速度を更新する。

    v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).

    この更新では、以下の加重合計を使用します。

    • 前回の速度v

    • 現在の位置と粒子が見た最良の位置との差p-x

    • 現在の位置と現在の近隣地域における最適な位置の差 g-x

  4. 位置x = x + vを更新します。

  5. 境界を強制します。x のいずれかのコンポーネントが境界外にある場合は、その境界と等しく設定します。境界に設定されたコンポーネントについては、そのコンポーネントの速度 v が境界の外側を指している場合は、その速度コンポーネントをゼロに設定します。

  6. 目的関数 f = fun(x) を評価します。

  7. f < fun(p) の場合は p = x を設定します。このステップにより、p がパーティクルが見た中で最高の位置にあることが保証されます。

  8. アルゴリズムの次のステップは、個々の粒子ではなく、群れ全体のパラメータに適用されます。群れの中の粒子 j の中で最も小さい f = min(f(j)) について考えてみましょう。

    f < b の場合は、 b = fd = x を設定します。このステップにより、b が群れの中で最適な目的関数を持ち、d が最適な位置を持つことが保証されます。

  9. 前のステップで最適な関数値が下がった場合は、flag = true を設定します。それ以外の場合は flag = false です。flag の値は次のステップで使用されます。

  10. 近所を更新します。flag = trueの場合:

    1. c = max(0,c-1) を設定する。

    2. NminNeighborhoodSize に設定します。

    3. c < 2 の場合は W = 2*W を設定します。

    4. c > 5 の場合は W = W/2 を設定します。

    5. WInertiaRange オプションの範囲内にあることを確認します。

    flag = falseの場合:

    1. c = c+1 を設定する。

    2. N = min(N + minNeighborhoodSize,SwarmSize) を設定する。

停止条件

particleswarm は停止基準に達するまで繰り返します。

停止オプション停止テスト終了フラグ
MaxStallIterationsFunctionTolerance過去 MaxStallIterations 回の反復における最良目的関数値 g の相対変化は FunctionTolerance 未満です。1
MaxIterations反復回数が MaxIterations に達します。0
OutputFcn または PlotFcnOutputFcn または PlotFcn は反復を停止できます。-1
ObjectiveLimit最適な目的関数値 gObjectiveLimit より小さいです。-3
MaxStallTime最良目的関数値 g は、過去 MaxStallTime 秒間変化しませんでした。-4
MaxTime関数の実行時間が MaxTime 秒を超えています。-5

particleswarm が終了フラグ 1 で停止した場合、終了後にオプションでハイブリッド関数を呼び出します。

参照

[1] Kennedy, J., and R. Eberhart. "Particle Swarm Optimization." Proceedings of the IEEE International Conference on Neural Networks. Perth, Australia, 1995, pp. 1942–1945.

[2] Mezura-Montes, E., and C. A. Coello Coello. "Constraint-handling in nature-inspired numerical optimization: Past, present and future." Swarm and Evolutionary Computation. 2011, pp. 173–194.

[3] Pedersen, M. E. "Good Parameters for Particle Swarm Optimization." Luxembourg: Hvass Laboratories, 2010.

関連するトピック