Main Content

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

パーティクルスウォームオプション

particleswarmのオプションの指定

次のように optimoptions 関数を使用して options を作成します。

options = optimoptions('particleswarm',...
    'Param1',value1,'Param2',value2,...);

例については、パーティクルスウォームを使用した最適化を参照してください。

このセクションの各オプションは、options のフィールド名でリストされます。たとえば、Displayoptions の対応するフィールドを参照します。

スウォームの作成

デフォルトでは、particleswarm'pswcreationuniform' の群れ作成関数を呼び出します。この機能は次のように動作します。

  1. InitialSwarmMatrix オプションが存在する場合、'pswcreationuniform'InitialSwarmMatrix マトリックスの最初の SwarmSize 行を群れとして取得します。InitialSwarmMatrix 行列の行数が SwarmSize より小さい場合、'pswcreationuniform' は次のステップに進みます。

  2. 'pswcreationuniform' は、合計で SwarmSize 個になるように十分な数のパーティクルを作成します。'pswcreationuniform' は、ランダムかつ均一に分散されたパーティクルを作成します。あらゆる群れのコンポーネントの範囲は -InitialSwarmSpan/2,InitialSwarmSpan/2 であり、境界と一致するように必要に応じてシフトおよびスケーリングされます。

作成後、particleswarm はすべてのパーティクルが境界を満たしているかどうかを確認し、必要に応じてコンポーネントを切り捨てます。Display オプションが 'iter' であり、パーティクルを切り捨てる必要がある場合は、particleswarm が通知します。

カスタム作成機能

optimoptions を使用してカスタム作成関数を設定し、CreationFcn オプションを @customcreation に設定します。ここで、customcreation は作成関数ファイルの名前です。カスタム作成関数にはこの構文があります。

swarm = customcreation(problem)

作成関数は、サイズが SwarmSizenvars 列の行列を返す必要があります。各行は 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 IterationsBest f(x) の最後の変更以降の反復回数

DisplayInterval オプションは、反復表示が更新される前に実行される反復回数を設定します。正の整数を指定してください。

アルゴリズムの設定

particleswarm アルゴリズムの詳細は 粒子群最適化アルゴリズム に記載されています。このセクションでは、チューニング パラメータについて説明します。

粒子群アルゴリズムの主なステップは、群の新しい速度を生成することです。

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

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

変数 W = inertiay1 = SelfAdjustmentWeight、および y2 = SocialAdjustmentWeight

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

  • 前回の速度v

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

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

この式に基づくと、オプションには次のような効果があります。

  • 慣性の絶対値 W が大きいほど、新しい速度は古い速度とより一致するようになり、絶対値も大きくなります。W の絶対値が大きいと、群れが不安定になる可能性があります。W の値は、2 要素ベクトル InertiaRange の範囲内に留まります。

  • y1 = SelfAdjustmentWeight の値が大きいほど、粒子はこれまで訪れた中で最も良い場所に向かって進みます。

  • y2 = SocialAdjustmentWeight の値が大きいほど、粒子は現在の近傍の最適な場所に向かって進みます。

慣性、SelfAdjustmentWeight、または SocialAdjustmentWeight の値が大きいと、群れが不安定になる可能性があります。

MinNeighborsFraction オプションは、各粒子の初期近傍サイズと最小近傍サイズの両方を設定します。粒子群最適化アルゴリズム を参照してください。MinNeighborsFraction1 に設定すると、群れのすべてのメンバーがグローバル最小点を社会調整目標として使用します。

これらのチューニング オプションのいくつかを設定する例については、パーティクルスウォームを使用した最適化 を参照してください。

ハイブリッド機能

ハイブリッド関数は、粒子群アルゴリズムが終了した後に実行される別の最小化関数です。HybridFcn オプションでハイブリッド関数を指定できます。以下を選択できます。

  • [] — ハイブリッド機能はありません。

  • 'fminsearch' — 制約のない最小化を実行するには、MATLAB® 関数 fminsearch を使用します。

  • 'patternsearch' — パターン検索を使用して、制約付きまたは制約なしの最小化を実行します。

  • 'fminunc' — 制約のない最小化を実行するには、Optimization Toolbox™ 関数 fminunc を使用します。

  • 'fmincon' — 制約付き最小化を実行するには、Optimization Toolbox 関数 fmincon を使用します。

メモ

ハイブリッド関数が問題の制約を受け入れることを確認します。そうでない場合、particleswarm はエラーをスローします。

ハイブリッド機能には個別のオプションを設定できます。fminsearch の場合は optimset を使用し、fminconpatternsearchfminunc の場合は 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)

関数が stoptrue に設定すると、反復は終了します。particleswarm の計算を続行するには、stopfalse に設定します。

この関数には次の入力引数があります。

  • optimValues — 現在の反復における群れに関する情報を含む構造体。詳細はoptimValues 構造をご覧ください。

  • state — 現在の反復の状態を示す文字列。

    • 'init' — ソルバーは反復処理を開始していません。出力関数またはプロット関数は、この状態を使用してファイルを開いたり、後続の反復のためのデータ構造やプロットを設定したりできます。

    • 'iter' — ソルバーは反復処理を続行しています。通常、ここで出力関数またはプロット関数が機能します。

    • 'done' — ソルバーが停止基準に達しました。出力関数またはプロット関数は、この状態を使用して、開いたファイルを閉じるなどのクリーンアップを行うことができます。

追加パラメーターの受け渡し は、出力関数またはプロット関数に追加のパラメータを提供する方法について説明します。

optimValues 構造

particleswarmoptimValues 構造を出力関数またはプロット関数に渡します。optimValues 構造体には次のフィールドがあります。

フィールド内容
funccount目的関数評価の合計数。
bestx最適な目的関数値 bestfval に対応する最適な解点が見つかりました。
bestfval最良(最低)の目的関数値が見つかりました。
iteration反復回数。
meanfval現在の反復におけるすべての粒子間の平均目的関数。
stalliterationsbestfval の最後の変更以降の反復回数。
swarm粒子の位置を含む行列。各行には 1 つの粒子の位置が含まれ、行数は群れのサイズに等しくなります。
swarmfvals群れ内の粒子の目的関数値を含むベクトル。粒子 iswarmfvals(i) = fun(swarm(i,:)) の場合、fun は目的関数です。

並列またはベクトル化された関数評価

速度を上げるには、particleswarm が群れの目的関数を 並列 または ベクトル化 方式で評価するようにオプションを設定できます。これらのオプションのうち 1 つだけを使用できます。UseParalleltrue に、UseVectorizedtrue に設定すると、計算は並列ではなくベクトル化されて実行されます。

平行粒子群

Parallel Computing Toolbox™ ライセンスをお持ちの場合は、プロセッサまたはコア間で目的関数の評価をスウォームに分散できます。UseParallel オプションを true に設定。

目的関数の計算コストが高い場合、または粒子とプロセッサの数が多い場合は、並列計算の方がシリアル計算よりも高速になる可能性があります。そうしないと、通信オーバーヘッドにより並列計算が直列計算よりも遅くなる可能性があります。

詳細については、並列計算 を参照してください。

ベクトル化された粒子群

目的関数が一度にすべての粒子を評価できる場合は、通常、UseVectorized オプションを true に設定することで時間を節約できます。目的関数は、各行が 1 つの粒子を表す MN 列の行列を受け入れ、目的関数値の M1 列のベクトルを返す必要があります。このオプションは、patternsearch および ga UseVectorized オプションと同じように機能します。patternsearch の詳細については、 目的関数と制約関数をベクトル化する を参照してください。

停止条件

particleswarm は、次のいずれかが発生すると反復を停止します。

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

また、FunValCheck オプションを 'on' に設定し、群れに NaNInf、または複雑な目的関数値を持つ粒子がある場合、particleswarm は停止し、エラーを発行します。