このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
run
マルチスタートソルバーを実行する
構文
説明
例
多次元問題でGlobalSearch
を実行する
複数の局所最小値を持つ最適化問題を作成し、GlobalSearch
を使用して大域最小値を見つけてみます。目的は、6 つのこぶを持つラクダの背中の問題です (ソルバーを実行する を参照)。
rng default % For reproducibility gs = GlobalSearch; sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ... + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4); problem = createOptimProblem('fmincon','x0',[-1,2],... 'objective',sixmin,'lb',[-3,-3],'ub',[3,3]); x = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points. All 8 local solver runs converged with a positive local solver exit flag.
x = 1×2
-0.0898 0.7127
次の構文を使用して、run
を呼び出すときに x
の目的関数値を要求できます。
[x,fval] = run(gs,problem)
ただし、fval
を要求しなかった場合、x
で目的関数の値を計算できます。
fval = sixmin(x)
fval = -1.0316
マルチスタートソルバーを実行する
デフォルトの MultiStart
オブジェクトを使用して、6 つのこぶを持つキャメル バック問題を解決します (ソルバーを実行する を参照)。
rng default % For reproducibility ms = MultiStart; sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ... + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4); problem = createOptimProblem('fmincon','x0',[-1,2],... 'objective',sixmin,'lb',[-3,-3],'ub',[3,3]); [x,fval,exitflag,outpt,solutions] = run(ms,problem,30);
MultiStart completed the runs from all start points. All 30 local solver runs converged with a positive local solver exitflag.
最良の関数値と最良の関数値が達成される場所を調べます。
fprintf('The best function value is %f.\n',fval)
The best function value is -1.031628.
fprintf('The location where this value is attained is [%f,%f].',x)
The location where this value is attained is [-0.089842,0.712656].
通常の配列から MultiStart
を実行する
各コンポーネントの範囲 [-3,3]
内の MultiStart
の初期 2-D ポイントのセットを作成します。
v = -3:0.5:3; [X,Y] = meshgrid(v); ptmatrix = [X(:),Y(:)]; tpoints = CustomStartPointSet(ptmatrix);
MultiStart
を tpoints
の点から開始して、6 つのこぶを持つキャメル バック問題 (ソルバーを実行する を参照) を最小化する点を探します。
rng default % For reproducibility ms = MultiStart; sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ... + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4); problem = createOptimProblem('fmincon','x0',[-1,2],... 'objective',sixmin,'lb',[-3,-3],'ub',[3,3]); x = run(ms,problem,tpoints)
MultiStart completed the runs from all start points. All 169 local solver runs converged with a positive local solver exitflag.
x = 1×2
0.0898 -0.7127
GlobalSearch
プロセスを調べる
複数の局所最小値を持つ最適化問題を作成し、GlobalSearch
を使用して大域最小値を見つけてみます。目的は、6 つのこぶを持つラクダの背中の問題です (ソルバーを実行する を参照)。
rng default % For reproducibility gs = GlobalSearch; sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ... + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4); problem = createOptimProblem('fmincon','x0',[-1,2],... 'objective',sixmin,'lb',[-3,-3],'ub',[3,3]); [x,fval,exitflag,output,solutions] = run(gs,problem);
GlobalSearch stopped because it analyzed all the trial points. All 8 local solver runs converged with a positive local solver exit flag.
この問題を解決するために GlobalSearch
が何を行ったかを理解するには、output
構造体と solutions
オブジェクトを調べます。
disp(output)
funcCount: 2245 localSolverTotal: 8 localSolverSuccess: 8 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 'GlobalSearch stopped because it analyzed all the trial points....'
GlobalSearch
は目的関数を 2261 回評価しました。GlobalSearch
は 8 つの異なるポイントから開始してfmincon
を実行しました。すべての
fmincon
実行はローカル ソリューションに正常に収束しました。
disp(solutions)
1x4 GlobalOptimSolution array with properties: X Fval Exitflag Output X0
arrayfun(@(x)x.Output.funcCount,solutions)
ans = 1×4
31 34 40 3
8 回のローカル ソルバー実行で 4 つのソリューションが見つかりました。funcCount
の出力は、fmincon
が 4 つのソリューションのそれぞれに到達するのに 40 回以上の関数評価を必要としなかったことを示しています。出力には、fmincon
実行のうち 4 回で実行された関数評価の回数は表示されません。2261 関数の評価のほとんどは、GlobalSearch
が試行ポイントを評価するためのものであり、fmincon
がそれらのポイントから実行を開始するためのものではないようです。
入力引数
gs
— GlobalSearch
ソルバー
GlobalSearch
オブジェクト
GlobalSearch
ソルバー。GlobalSearch
オブジェクトとして指定されます。GlobalSearch
コマンドを使用して gs
を作成します。
ms
— MultiStart
ソルバー
MultiStart
オブジェクト
MultiStart
ソルバー。MultiStart
オブジェクトとして指定されます。MultiStart
コマンドを使用して ms
を作成します。
problem
— 最適化問題
問題構造
問題構造として指定された最適化問題。createOptimProblem
を使用して、problem
を作成します。詳細については、問題構造を作成するを参照してください。
例: problem = createOptimProblem('fmincon','objective',fun,'x0',x0,'lb',lb)
データ型: struct
k
— 開始点の数
正の整数
開始点の数。正の整数として指定します。MultiStart
は、RandomStartPointSet
オブジェクトと同じアルゴリズムを使用して k - 1
開始点を生成します。MultiStart
は、problem
構造の x0
ポイントも使用します。
例: 50
データ型: double
startpts
— MultiStart
のスタート地点
CustomStartPointSet
オブジェクト | RandomStartPointSet
オブジェクト | そのようなオブジェクトのセル配列
MultiStart
の開始点。CustomStartPointSet
オブジェクト、RandomStartPointSet
オブジェクト、またはそのようなオブジェクトのセル配列として指定されます。
例: {custompts,randompts}
出力引数
x
— ベストポイントが見つかりました
実数配列
見つかった最適なポイントが実数配列として返されます。最適なポイントは、目的関数の値が最も低いポイントです。
fval
— 遭遇した最低目的関数値
実数スカラー
遭遇した目的関数の最低値が実数スカラーとして返されます。lsqcurvefit
および lsqnonlin
の場合、目的関数は二乗和であり、残差の二乗ノルムとも呼ばれます。
exitflag
— 終了条件の概要
整数
終了条件の概要。整数として返されます。
グローバル ソルバー終了フラグ
2 | 少なくとも 1 つの実行可能な局所最小値が見つかりました。ローカル ソルバーの一部の実行が収束しませんでした。 |
1 | 少なくとも 1 つの実行可能な局所最小値が見つかりました。ローカル ソルバーのすべての実行が収束しました (終了フラグが正でした)。 |
0 | 局所的最小値が見つかりませんでした。ローカル ソルバーが少なくとも 1 回呼び出され、少なくとも 1 つのローカル ソルバーが MaxIterations または MaxFunctionEvaluations 許容値を超えました。 |
-1 | ローカル ソルバーの出力またはプロット関数によって、1 つ以上のローカル ソルバーの実行が停止されました。 |
-2 | 実行可能な局所的最小値が見つかりませんでした。 |
-5 | MaxTime 制限を超えました。 |
-8 | 解が見つかりませんでした。すべての実行でローカル ソルバー終了フラグが -2 以下であり、すべてが -2 と等しいわけではありません。 |
-10 | ユーザー提供の関数で発生した障害。 |
output
— ソリューションプロセスの詳細
構造体
ソリューション プロセスの詳細。次のフィールドを持つ構造体として返されます。
フィールド | 意味 |
---|---|
funcCount | 関数評価の回数。 |
localSolverIncomplete | 0 終了フラグを使用したローカル ソルバー実行回数。 |
localSolverNoSolution | 負の終了フラグを持つローカル ソルバー実行の数。 |
localSolverSuccess | 終了フラグが正であるローカル ソルバーの実行回数。 |
localSolverTotal | ローカル ソルバーの実行の合計数。 |
message | 終了メッセージ。 |
solutions
— 明確なローカルソリューション
GlobalOptimSolution
オブジェクトのベクトル
個別のローカル ソリューション。GlobalOptimSolution
オブジェクトのベクトルとして返されます。これらのソリューションは、正のローカル ソルバー終了フラグに対応します。つまり、ローカル ソルバーの終了フラグが非正の場合、対応するソリューションは solutions
に記録されません。すべてのローカルソリューションを取得するには、@savelocalsolutions
GlobalSearch および MultiStart の出力関数 を使用します。
バージョン履歴
R2010a で導入
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)