このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
粒子群最適化アルゴリズム
アルゴリズムのアウトライン
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.