このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
パーティクルスウォームオプション
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
オプションを @
に設定します。ここで、customcreation
customcreation
は作成関数ファイルの名前です。カスタム作成関数にはこの構文があります。
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
。
この更新では、以下の加重合計を使用します。
前回の速度
v
x-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'
— ソルバーが停止基準に達しました。出力関数またはプロット関数は、この状態を使用して、開いたファイルを閉じるなどのクリーンアップを行うことができます。
追加パラメーターの受け渡し は、出力関数またはプロット関数に追加のパラメータを提供する方法について説明します。
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
は停止し、エラーを発行します。