このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
粒子群最適化アルゴリズム
アルゴリズムのアウトライン
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
は近傍サイズ N
を minNeighborhoodSize = max(2,floor(SwarmSize*MinNeighborsFraction))
に初期化します。
particleswarm
は慣性 W = max(InertiaRange)
を初期化します。InertiaRange
が負の場合は W = min(InertiaRange)
を設定します。
particleswarm
はストール カウンター c = 0
を初期化します。
表記の便宜上、変数 y1 = SelfAdjustmentWeight
と y2 = SocialAdjustmentWeight
を設定します。ここで、SelfAdjustmentWeight
と SocialAdjustmentWeight
はオプションです。
反復ステップ
アルゴリズムは次のように群れを更新します。位置 x(i)
にある粒子 i
の場合:
i
以外のN
粒子のランダムなサブセットS
を選択します。近傍点の中で最適な目的関数である
fbest(S)
と、最適な目的関数を持つ近傍点の位置であるg(S)
を見つけます。長さ
nvars
のu1
とu2
の一様(0,1)分布ランダムベクトルに対して、速度を更新する。v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x)
.この更新では、以下の加重合計を使用します。
前回の速度
v
現在の位置と粒子が見た最良の位置との差
p-x
現在の位置と現在の近隣地域における最適な位置の差
g-x
位置
x = x + v
を更新します。境界を強制します。
x
のいずれかのコンポーネントが境界外にある場合は、その境界と等しく設定します。境界に設定されたコンポーネントについては、そのコンポーネントの速度v
が境界の外側を指している場合は、その速度コンポーネントをゼロに設定します。目的関数
f = fun(x)
を評価します。f < fun(p)
の場合はp = x
を設定します。このステップにより、p
がパーティクルが見た中で最高の位置にあることが保証されます。アルゴリズムの次のステップは、個々の粒子ではなく、群れ全体のパラメータに適用されます。群れの中の粒子
j
の中で最も小さいf = min(f(j))
について考えてみましょう。f < b
の場合は、b = f
とd = x
を設定します。このステップにより、b
が群れの中で最適な目的関数を持ち、d
が最適な位置を持つことが保証されます。前のステップで最適な関数値が下がった場合は、
flag = true
を設定します。それ以外の場合はflag = false
です。flag
の値は次のステップで使用されます。近所を更新します。
flag = true
の場合:c = max(0,c-1)
を設定する。N
をminNeighborhoodSize
に設定します。c < 2
の場合はW = 2*W
を設定します。c > 5
の場合はW = W/2
を設定します。W
がInertiaRange
オプションの範囲内にあることを確認します。
flag = false
の場合:c = c+1
を設定する。N = min(N + minNeighborhoodSize,SwarmSize)
を設定する。
停止条件
particleswarm
は停止基準に達するまで繰り返します。
停止オプション | 停止テスト | 終了フラグ |
---|---|---|
MaxStallIterations と FunctionTolerance | 過去 MaxStallIterations 回の反復における最良目的関数値 g の相対変化は FunctionTolerance 未満です。 | 1 |
MaxIterations | 反復回数が MaxIterations に達します。 | 0 |
OutputFcn または PlotFcn | OutputFcn または PlotFcn は反復を停止できます。 | -1 |
ObjectiveLimit | 最適な目的関数値 g は ObjectiveLimit より小さいです。 | -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.