このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
パーティクルスウォームオプション
particleswarmのオプションの指定
次のように optimoptions 関数を使用して options を作成します。
options = optimoptions('particleswarm',... 'Param1',value1,'Param2',value2,...);
例については、パーティクルスウォームを使った最適化を参照してください。
このセクションの各オプションは、options 内のフィールド名でリストされます。たとえば、Display は options の対応するフィールドを参照します。
スウォーム作成
デフォルトでは、particleswarm は 'pswcreationuniform' の群れ作成関数を呼び出します。この機能は次のように動作します。
InitialSwarmMatrixオプションが存在する場合、'pswcreationuniform'はInitialSwarmMatrix行列の最初のSwarmSize行を群れとして取ります。InitialSwarmMatrix行列の行数がSwarmSizeより小さい場合、'pswcreationuniform'は次のステップに進みます。'pswcreationuniform'は、合計でSwarmSize個になるよう十分なパーティクルを作成します。'pswcreationuniform'は、ランダムかつ均一に分散されたパーティクルを作成します。あらゆる群れのコンポーネントの範囲は-InitialSwarmSpan/2,InitialSwarmSpan/2であり、境界と一致するように必要に応じてシフトおよびスケーリングされます。
作成後、particleswarm はすべてのパーティクルが境界を満たしているかどうかを確認し、必要に応じてコンポーネントを切り捨てます。Display オプションが 'iter' であり、パーティクルの切り捨てが必要な場合は、particleswarm が通知します。
カスタム作成機能
optimoptions を使用してカスタム作成関数を設定し、CreationFcn オプションを @ に設定します。ここで、customcreationcustomcreation は作成関数ファイルの名前です。カスタム作成関数の構文は次のようになります。
swarm = customcreation(problem)
作成関数は、サイズが SwarmSize 行 nvars 列の行列を返す必要があります。ここで、各行は 1 つのパーティクルの位置を表します。問題の構造の詳細については、problem を参照してください。特に、problem.options.SwarmSize からは SwarmSize を、problem.nvars からは nvars を取得できます。
作成関数の例については、pswcreationuniform のコードをご覧ください。
edit pswcreationuniform表示設定
Display オプションは、アルゴリズムの実行中にコマンド ラインに表示される情報の量を指定します。
'off'または'none'— 出力は表示されません。'iter'— 反復ごとに情報が表示されます。'final'(デフォルト) — 停止の理由が表示されます。
iter は、以下を表示します。
Iteration— 反復回数f-count— 目的関数評価の累積回数Best f(x)— 最適な目的関数値Mean f(x)— 全粒子の平均目的関数値Stall Iterations—Best f(x)の最後の変更以降の反復回数
DisplayInterval オプションは、反復表示が更新される前に実行される反復回数を設定します。正の整数を指定してください。
アルゴリズムの設定
particleswarm アルゴリズムの詳細は 粒子群最適化アルゴリズム に記載されています。このセクションでは、チューニングパラメーターについて説明します。
粒子群アルゴリズムの主なステップは、群集の新しい速度を世代ことです。
長さnvarsのu1とu2の一様(0,1)分布乱数ベクトルに対して、速度を更新する。
v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).
変数 W = inertia、y1 = SelfAdjustmentWeight、および y2 = SocialAdjustmentWeight。
この更新では、次の加重合計を使用します。
前回の速度
vx-p、現在の位置xと粒子が見た最良の位置pとの差x-g、現在の位置xと現在の近隣における最適な位置gとの差
この式に基づくと、オプションは次の効果をもたらします。
慣性の絶対値
Wが大きいほど、新しい速度は古い速度とより一致するようになり、絶対値も大きくなります。Wの絶対値が大きいと、群れが不安定になる可能性があります。Wの値は、2 要素ベクトルInertiaRangeの範囲内に留まります。y1 = SelfAdjustmentWeightの値が大きいほど、粒子はこれまで訪れた中で最も良い場所へと向かいます。y2 = SocialAdjustmentWeightの値が大きいほど、粒子は現在の近傍の最適な場所に向かって進みます。
慣性、SelfAdjustmentWeight、または SocialAdjustmentWeight の値が大きいと、群れが不安定になる可能性があります。
MinNeighborsFraction オプションは、各パーティクルの初期近傍サイズと最小近傍サイズの両方を設定します。粒子群最適化アルゴリズム を参照してください。MinNeighborsFraction を 1 に設定すると、群れのすべてのメンバーが大域的最小点を社会調整目標として使用します。
これらのチューニング オプションのいくつかを設定する例については、パーティクルスウォームを使った最適化 を参照してください。
ハイブリッド関数
ハイブリッド関数は、粒子群アルゴリズムが終了した後に実行される別の最小化関数です。HybridFcn オプションでハイブリッド関数を指定できます。選択肢は
[]—ハイブリッド関数はありません。'fminsearch'— 制約のない最小化を実行するには、MATLAB® 関数fminsearchを使用します。'patternsearch'—パターン探索を使用して、制約付きまたは制約なしの最小化を実行します。'fminunc'— 制約のない最小化を実行するには、Optimization Toolbox™ 関数fminuncを使用します。'fmincon'— 制約付き最小化を実行するには、Optimization Toolbox 関数fminconを使用します。
メモ
ハイブリッド関数が問題の制約を受け入れることを確認します。そうでない場合、particleswarm はエラーをスローします。
ハイブリッド関数には個別のオプションを設定できます。fminsearch の場合は optimset を使用し、fmincon、patternsearch、fminunc の場合は optimoptions を使用します。以下に例を示します。
hybridopts = optimoptions('fminunc',... 'Display','iter','Algorithm','quasi-newton');
particleswarm options に含めます。options = optimoptions(options,'HybridFcn',{@fminunc,hybridopts}); options を設定する前に hybridopts が存在している必要があります。ハイブリッド関数を使用する例については、パーティクルスウォームを使った最適化 を参照してください。ハイブリッド関数を使用する場合を参照してください。
出力関数とプロット関数
出力関数は、particleswarm が各反復で呼び出す関数です。出力関数は particleswarm を停止したり、他のタスクを実行したりできます。出力関数を指定するには、
options = optimoptions(@particleswarm,'OutputFcn',@outfun)ここで、outfun は 出力関数またはプロット関数の構造 で指定された構文を持つ関数です。出力関数が複数ある場合は、関数ハンドルのセル配列として渡します。
options = optimoptions(@particleswarm,... 'OutputFcn',{@outfun1,@outfun2,@outfun3})
同様に、プロット関数は particleswarm が各反復で呼び出す関数です。出力関数とプロット関数の違いは、プロット関数には、プロット ウィンドウに表示される particleswarm を一時停止または停止するボタンなど、プロット拡張機能が組み込まれていることです。唯一の組み込みプロット関数 'pswplotbestf' は、反復に対して最適な目的関数の値をプロットします。指定するには、
options = optimoptions(@particleswarm,'PlotFcn','pswplotbestf')
カスタム プロット関数を作成するには、出力関数またはプロット関数の構造 で指定された構文を使用して関数を記述します。カスタム プロット関数を指定するには、関数ハンドルを使用します。複数のプロット関数がある場合は、関数ハンドルのセル配列として渡します。
options = optimoptions(@particleswarm,... 'PlotFcn',{@plotfun1,@plotfun2,@plotfun3})
カスタム出力関数の例については、粒子群出力関数 を参照してください。
出力関数またはプロット関数の構造
出力関数の呼び出し構文は次のとおりです。
stop = myfun(optimValues,state)
関数が stop を true に設定すると、反復は終了します。particleswarm の計算を続行するには、stop を false に設定します。
この関数には次の入力引数があります。
optimValues— 現在の反復における群れに関する情報を含む構造体。詳細はoptimValues構造に記載されています。state— 現在の反復の状態を示す文字列。'init'— ソルバーは反復処理を開始していません。出力関数またはプロット関数は、この状態を使用してファイルを開いたり、後続の反復のためのデータ構造やプロットを設定したりできます。'iter'— ソルバーは反復処理を続行しています。通常、ここで出力関数またはプロット関数が機能します。'done'— ソルバーが停止基準に達しました。出力関数またはプロット関数は、この状態を使用して、開いたファイルを閉じるなどのクリーンアップを行うことができます。
追加パラメーターの受け渡し は、出力関数またはプロット関数に追加のパラメーターを提供する方法について説明します。
メモ
プロット関数のフレームワークで座標軸が管理されるため、プロット関数は subplot ステートメントをサポートしていません。複数のサブプロットを指定するには、個別のプロット関数を記述し、cell 配列としてソルバーに渡します。
options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});出力関数は subplot をサポートするため、プロット関数ではなく出力関数を使用すると、1 つの関数に複数のプロットを含めることができます。
optimValues構造
particleswarm は optimValues 構造を出力関数またはプロット関数に渡します。optimValues 構造には次のフィールドがあります。
| フィールド | コンテンツ |
|---|---|
funccount | 目的関数評価の合計数。 |
bestx | 最適な目的関数値 bestfval に対応する最適な解ポイントが見つかりました。 |
bestfval | 見つかった最良(最低)の目的関数値。 |
iteration | 反復回数。 |
meanfval | 現在の反復におけるすべての粒子間の平均目的関数。 |
stalliterations | bestfval の最後の変更以降の反復回数。 |
swarm | 粒子の位置を含む行列。各行には 1 つの粒子の位置が含まれており、行数は群れのサイズに等しくなります。 |
swarmfvals | 群れの中の粒子の目的関数の値を含むベクトル。粒子 i、swarmfvals(i) = fun(swarm(i,:)) の場合、fun は目的関数です。 |
並列またはベクトル化された関数評価
速度を上げるには、particleswarm が群れの目的関数を 並列 または ベクトル化 方式で評価するようにオプションを設定できます。これらのオプションのうち 1 つだけを使用できます。UseParallel を true に、UseVectorized を true に設定すると、計算は並列ではなくベクトル化されて実行されます。
平行粒子群
Parallel Computing Toolbox™ ライセンスをお持ちの場合は、目的関数の評価をプロセッサまたはコア間で群集に分散できます。UseParallel オプションを true に設定します。
目的関数の計算コストが高い場合、または粒子とプロセッサの数が多い場合は、並列計算の方がシリアル計算よりも高速になる可能性があります。そうしないと、通信オーバーヘッドにより並列計算が直列計算より遅くなる可能性があります。
詳細は、並列計算を参照してください。
ベクトル化された粒子群
目的関数が一度にすべての粒子を評価できる場合は、通常、UseVectorized オプションを true に設定することで時間を節約できます。目的関数は、各行が 1 つの粒子を表す M 行 N 列の行列を受け入れ、目的関数値の M 行 1 列のベクトルを返す必要があります。このオプションは、patternsearch オプションおよび ga UseVectorized オプションと同じように機能します。patternsearch の詳細については、目的関数と制約関数をベクトル化する を参照してください。
停止条件
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 |
また、FunValCheck オプションを 'on' に設定し、群れの中に NaN、Inf、または複雑な目的関数値を持つ粒子がある場合、particleswarm は停止し、エラーを発行します。