このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
particleswarm
粒子群最適化法
構文
説明
例
単純な関数を最小化する
2 つの変数の単純な関数を最小化します。
目的関数を定義します。
fun = @(x)x(1)*exp(-norm(x)^2);
関数を最小化するには particleswarm
を呼び出します。
rng default % For reproducibility nvars = 2; x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance. x = 629.4474 311.4814
関数プロットでわかるように、この解は真の最小値からは程遠いものです。
fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))
通常は、境界を設定するのが最善です。境界を持つ単純な関数を最小化するを参照してください。
境界を持つ単純な関数を最小化する
境界制約を持つ 2 つの変数の単純な関数を最小化します。
目的関数を定義します。
fun = @(x)x(1)*exp(-norm(x)^2);
変数に境界を設定します。
lb = [-10,-15]; ub = [15,20];
関数を最小化するには particleswarm
を呼び出します。
rng default % For reproducibility nvars = 2; x = particleswarm(fun,nvars,lb,ub)
Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2
-0.7071 -0.0000
デフォルト以外のオプションを使用して最小化する
より大きな集団とハイブリッド関数を使用して、より良い解決策を見つけてください。
目的関数と境界を指定します。
fun = @(x)x(1)*exp(-norm(x)^2); lb = [-10,-15]; ub = [15,20];
オプションを指定します。
options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);
関数を最小化するには particleswarm
を呼び出します。
rng default % For reproducibility nvars = 2; x = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2
-0.7071 -0.0000
解法プロセスの検証
オプションの出力引数を返して、ソリューション プロセスをより詳細に調べます。
問題を定義します。
fun = @(x)x(1)*exp(-norm(x)^2); lb = [-10,-15]; ub = [15,20]; options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);
すべての出力で particleswarm
を呼び出して関数を最小化し、解決プロセスに関する情報を取得します。
rng default % For reproducibility nvars = 2; [x,fval,exitflag,output,points] = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2
-0.7071 -0.0000
fval = -0.4289
exitflag = 1
output = struct with fields:
rngstate: [1x1 struct]
iterations: 43
funccount: 2203
message: 'Optimization ended: relative change in the objective value ...'
hybridflag: 1
points = struct with fields:
X: [50x2 double]
Fval: [50x1 double]
入力引数
fun
— 目的関数
関数ハンドル | 関数名
関数ハンドルまたは関数名として指定される目的関数。長さ nvars
の行ベクトルを受け入れ、スカラー値を返す目的関数を記述します。
'UseVectorized'
オプションが true
の場合、pop
行 nvars
列の行列を受け入れるには fun
と記述します。ここで、pop
は現在の人口サイズです。この場合、fun
は、フィットネス関数の値を含む pop
と同じ長さのベクトルを返します。particleswarm
はベクトル化された計算でも集団の単一のメンバーを渡すことができるため、fun
が pop
に対して特定のサイズを想定していないことを確認してください。
例: fun = @(x)(x-[4,2]).^2
データ型: char
| function_handle
| string
nvars
— 変数の数
正の整数
lb
— 下限
[]
(既定値) | 実数ベクトルまたは配列
下限。実数ベクトルまたは倍精度浮動小数点配列として指定します。lb
は、 lb
≤ x
≤ ub
内の要素ごとの下限を表します。
particleswarm
は配列 lb
をベクトル lb(:)
に内部的に変換します。
例: lb = [0;-Inf;4]
は x(1) ≥ 0
, x(3) ≥ 4
を意味します。
データ型: double
ub
— 上限
[]
(既定値) | 実数ベクトルまたは配列
上限は、実数ベクトルまたは倍精度浮動小数点数の配列として指定されます。ub
は、 lb
≤ x
≤ ub
内の要素ごとの上限を表します。
particleswarm
は配列 ub
をベクトル ub(:)
に内部的に変換します。
例: ub = [Inf;4;10]
は x(2) ≤ 4
, x(3) ≤ 10
を意味します。
データ型: double
options
— particleswarm
のオプション
optimoptions
を使用して作成されたオプション
optimoptions
関数の出力として指定される particleswarm
のオプション。
一部のオプションは、optimoptions
に表示されません。これらのオプションは斜体で表示されます。詳細については、最適化オプションの表示 を参照してください。
CreationFcn | 初期の群れを作成する関数。 |
Display | コマンド ラインに返される表示のレベル。
|
DisplayInterval | 反復表示の間隔。反復表示では、DisplayInterval 回の反復ごとに 1 行が出力されます。既定値は 1 です。 |
FunctionTolerance | デフォルトが 1e-6 の非負のスカラー。最後の MaxStallIterations 回の反復における最良目的関数値の相対的な変化が options.FunctionTolerance 未満になると、反復は終了します。 |
FunValCheck | 目的関数と制約の値が有効かどうかを確認します。目的関数または制約が複素数、 |
HybridFcn |
ハイブリッド関数を使用する場合を参照してください。 |
InertiaRange | 昇順で同じ符号値を持つ 2 要素の実数ベクトル。適応慣性の下限と上限を指定します。一定の(非適応)慣性を得るには、InertiaRange の両方の要素を同じ値に設定します。既定値は [0.1,1.1] です。粒子群最適化アルゴリズムを参照してください。 |
InitialPoints | マトリックスまたは構造として指定された、粒子の初期集団または部分集団。
|
InitialSwarmSpan |
|
MaxIterations | particleswarm が実行する反復の最大回数。デフォルトは 200*nvars です。ここで nvars は変数の数です。 |
MaxStallIterations | デフォルトは 20 の正の整数。最後の MaxStallIterations 回の反復における最良目的関数値の相対的な変化が options.FunctionTolerance 未満になると、反復は終了します。 |
MaxStallTime | 既知の最良の目的関数値が改善されない最大秒数。デフォルトは Inf の正のスカラー。 |
MaxTime | particleswarm が実行される最大時間 (秒)。既定値は Inf です。 |
MinNeighborsFraction | 最小適応近傍サイズ、0 から 1 までのスカラー。既定値は 0.25 です。粒子群最適化アルゴリズムを参照してください。 |
ObjectiveLimit | 最小目標値、停止基準。スカラー、デフォルトは -Inf です。 |
OutputFcn | 関数ハンドルまたは関数ハンドルのセル配列。出力関数は反復データを読み取り、ソルバーを停止できます。既定値は [] です。出力関数とプロット関数を参照してください。 |
PlotFcn | 関数名、関数ハンドル、または関数ハンドルのセル配列。カスタム プロット関数の場合は、関数ハンドルを渡します。プロット関数は反復データを読み取り、各反復をプロットし、ソルバーを停止できます。既定値は [] です。利用可能な組み込みプロット関数: 'pswplotbestf' 。出力関数とプロット関数を参照してください。 |
SelfAdjustmentWeight | 速度を調整するときに各パーティクルの最適な位置に重み付けします。デフォルトが 1.49 の有限スカラー。粒子群最適化アルゴリズムを参照してください。 |
SocialAdjustmentWeight | 速度を調整するときに近傍の最適な位置に重み付けします。デフォルトが 1.49 の有限スカラー。粒子群最適化アルゴリズムを参照してください。 |
SwarmSize | 群れの中の粒子の数。1 より大きい整数。デフォルトは min(100,10*nvars) です。ここで nvars は変数の数です。 |
UseParallel | true の場合に目的関数を並列に計算します。既定値は false です。並列またはベクトル化された関数評価を参照してください。 |
UseVectorized | true の場合にベクトル化された形式で目的関数を計算します。既定値は false です。並列またはベクトル化された関数評価を参照してください。 |
problem
— 最適化問題
構造体
最適化問題は、次のフィールドを含む構造体として指定されます。
solver | 'particleswarm' |
objective | 目的関数への関数ハンドル、または目的関数の名前。 |
nvars | 問題内の変数の数。 |
lb | 下限のベクトルまたは配列。 |
ub | 上限のベクトルまたは配列。 |
options | optimoptions によって作成されたオプション。 |
rngstate | 解決プロセスの開始時の乱数ジェネレーターのオプションの状態。 |
データ型: struct
出力引数
x
— 解
実数ベクトル
ソリューションは、任意の境界制約に従って目的関数を最小化する実数ベクトルとして返されます。
fval
— 目的値
実数スカラー
目的の値。実数スカラー fun(x)
として返されます。
exitflag
— アルゴリズムの停止条件
整数
アルゴリズムの停止条件。アルゴリズムの停止理由を識別する整数として返されます。exitflag
の値と particleswarm
が停止した対応する理由を以下に示します。
| 前回の |
| 反復数が |
| 出力関数またはプロット関数によって反復が停止したことを示します。 |
| 範囲に整合性がないことを示します。つまり、一部の |
| 最良の目的関数値が |
| 最良の目的関数値が |
| 実行時間が |
output
— 解法プロセスの概要
構造体
最適化プロセスに関する情報を含む構造体として返された解法プロセスの概要。
| ソルバーの反復回数 |
| 目的関数の評価回数。 |
| アルゴリズムが停止した理由。 |
| ハイブリッド関数からの終了フラグ。 |
| アルゴリズムが開始する直前のデフォルトの乱数ジェネレーターの状態。 |
points
— 最終的な群れの位置と目的関数の値
構造体
最終的な群れの位置と目的関数の値は、次のフィールドを持つ構造体として返されます。
X
— 最終的な群れの位置が行列として返されます。行列の各行は 1 つの点を表します。Fval
— 最終的な群れの目的関数の値。各i
について、最終的な群れpoints.Fval(i) = fun(points.X(i))
のメンバーのインデックス。
最適化を続行するには、points
を InitialPoints
オプションとして渡すことができます。ただし、このアプローチは、最適化を最終集団から再開するときにアルゴリズムの多くの側面が同一ではないため、最初からより長い時間にわたって最適化を実行することと同じではありません。粒子群最適化アルゴリズムを参照してください。
データ型: struct
制限
問題ベースの 最適化 ライブ エディター タスクでは、現在、複数の初期ポイントまたは初期目的関数値の指定はサポートされていません。初期ポイントを指定するには、ソルバーベースのタスクを使用するか、コマンド ラインを使用します。
アルゴリズム
粒子群最適化アルゴリズムの説明については、粒子群最適化アルゴリズム を参照してください。
代替機能
アプリ
[最適化] ライブ エディター タスクが particleswarm
にビジュアル インターフェイスを提供します。
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、'UseParallel'
オプションを true
に設定します。
options = optimoptions('
solvername
','UseParallel',true)
詳細については、Global Optimization Toolbox で並列処理を使用する方法を参照してください。
バージョン履歴
R2014b で導入R2023b: particleswarm
の初期点、最終位置、目的関数の値を指定して取得する
particleswarm
は、群れの最終位置と関連する目的関数値を含む構造体である出力 points
を返すことができるようになりました。InitialPoints
オプションを使用して、初期群れの位置と目的関数の値を指定できるようになりました。InitialSwarmMatrix
オプションまたは InitialSwarm
オプションを使用して、初期の群れの位置を指定することもできます。このような場合、particleswarm
は初期の群集行列を InitialPoints
オプションとして渡します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)