このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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: [1×1 struct]
iterations: 43
funccount: 2203
message: 'Optimization ended: relative change in the objective value ↵over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.↵FMINCON: Initial point is a local minimum that satisfies the constraints.↵↵Optimization completed because at the initial point, the objective function is non-decreasing ↵in feasible directions to within the value of the optimality tolerance, and ↵constraints are satisfied to within the value of the constraint tolerance.↵↵<stopping criteria details>↵↵Optimization completed: The final point is the initial point.↵The first-order optimality measure, 2.118144e-07, is less than options.OptimalityTolerance =↵1.000000e-06, and the maximum constraint violation, 0.000000e+00, is less than↵options.ConstraintTolerance = 1.000000e-06.↵'
hybridflag: 1
points = struct with fields:
X: [50×2 double]
Fval: [50×1 double]
入力引数
関数ハンドルまたは関数名として指定される目的関数。長さ nvars
の行ベクトルを受け入れ、スカラー値を返す目的関数を記述します。
'UseVectorized'
オプションが true
の場合、pop
行 nvars
列の行列を受け入れるには fun
と記述します。ここで、pop
は現在の母集団サイズです。この場合、fun
は、適応度関数の値を含む pop
と同じ長さのベクトルを返します。particleswarm
はベクトル化された計算でも母集団の単一のメンバーを渡すことができるため、fun
が pop
に対して特定のサイズを想定していないことを確認してください。
例: fun = @(x)(x-[4,2]).^2
データ型: char
| function_handle
| string
変数の数。正の整数として指定されます。ソルバーは長さが nvars
から fun
までの行ベクトルを渡します。
例: 4
データ型: double
下限は、実数ベクトルまたは double の配列として指定されます。lb
は、lb
≤ x
≤ ub
内の要素ごとの下限を表します。
particleswarm
は配列 lb
をベクトル lb(:)
に内部的に変換します。
例: lb = [0;-Inf;4]
は x(1) ≥ 0
, x(3) ≥ 4
を意味します。
データ型: double
上限は、実数ベクトルまたは double の配列として指定されます。ub
は、lb
≤ x
≤ ub
内の要素ごとの上限を表します。
particleswarm
は配列 ub
をベクトル ub(:)
に内部的に変換します。
例: ub = [Inf;4;10]
は x(2) ≤ 4
, x(3) ≤ 10
を意味します。
データ型: double
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 です。並列またはベクトル化された関数評価を参照してください。 |
最適化問題は、次のフィールドを含む構造体として指定されます。
solver | 'particleswarm' |
objective | 目的関数への関数ハンドル、または目的関数の名前。 |
nvars | 問題内の変数の数。 |
lb | 下限のベクトルまたは配列。 |
ub | 上限のベクトルまたは配列。 |
options | optimoptions によって作成されたオプション。 |
rngstate | 解決プロセスの開始時の乱数ジェネレータのオプションの状態。 |
データ型: struct
出力引数
ソリューションは、境界制約に従って目的関数を最小化する実数ベクトルとして返されます。
目的の値は、実数スカラー fun(x)
として返されます。
アルゴリズムの停止条件。アルゴリズムの停止理由を識別する整数として返されます。exitflag
の値と particleswarm
が停止した対応する理由を以下に示します。
| 前回の |
| 反復数が |
| 出力関数またはプロット関数によって反復が停止したことを示します。 |
| 範囲に整合性がないことを示します。つまり、一部の |
| 最良の目的関数値が |
| 最良の目的関数値が |
| 実行時間が |
最適化プロセスに関する情報を含む構造体として返された解法プロセスの概要。
| ソルバーの反復回数 |
| 目的関数評価回数。 |
| アルゴリズムが停止した理由。 |
| ハイブリッド関数からの終了フラグ。 |
| アルゴリズムが開始される直前のデフォルトの乱数ジェネレータの状態。 |
最終的な群れの位置と目的関数の値は、次のフィールドを持つ構造体として返されます。
X
— 最終的な群れの位置。行列として返されます。行列の各行は 1 つの点を表します。Fval
— 最終的な群れの目的関数の値。各i
について、最終的な群れのメンバーであるpoints.Fval(i) = fun(points.X(i))
のインデックス。
最適化を続行するには、points
を InitialPoints
オプションとして渡すことができます。ただし、このアプローチは、最適化が最終母集団から再開されるときにアルゴリズムの多くの側面が同一ではないため、最初からより長い時間にわたって最適化を実行するのと同じではありません。粒子群最適化アルゴリズムを参照してください。
データ型: struct
制限
問題ベースの 最適化ライブ エディター タスクでは、現在、複数の初期点または初期目的関数値の指定はサポートされていません。初期点を指定するには、ソルバーベースのタスクを使用するか、コマンド ラインを使用します。
アルゴリズム
粒子群最適化アルゴリズムの説明については、粒子群最適化アルゴリズム を参照してください。
代替機能
アプリ
最適化ライブ エディター タスクが particleswarm
にビジュアル インターフェイスを提供します。
拡張機能
並列実行するには、'UseParallel'
オプションを true
に設定します。
options = optimoptions('
solvername
','UseParallel',true)
詳細については、Global Optimization Toolbox で並列処理を使用する方法を参照してください。
バージョン履歴
R2014b で導入particleswarm
は、群れの最終位置と関連する目的関数の値を含む構造体である出力 points
を返すことができるようになりました。InitialPoints
オプションを使用して、初期群れの位置と目的関数の値を指定できるようになりました。InitialSwarmMatrix
オプションまたは InitialSwarm
オプションを使用して、初期の群れの位置を指定することもできます。このような場合、particleswarm
は初期群集行列を InitialPoints
オプションとして渡します。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)