最適化エクスプローラー アプリの使用
最適化エクスプローラー アプリは、さまざまなソルバー、初期点、オプションなど、異なる構成を使用して最適化問題を繰り返し解くのに役立ちます。この例では、アプリで Global Optimization Toolbox のソルバーを使用する例を示していますが、アプリの使用に Global Optimization Toolbox は必要ありません。
手順のビデオ
この例の手順を確認するには、ビデオを再生してください。
問題の作成
最適化エクスプローラー アプリを使用するには、既存の問題がなければなりません。OptimizationProblem オブジェクトか、fmincon や patternsearch などの最適化ソルバーに対する入力のいずれかが必要です。[最適化] ライブ エディター タスクを実行するか、コマンド ラインで問題を作成すると、問題をワークスペースに取り込むことができます。この例では、次のスクリプトを実行して、問題 prob をワークスペースに取り込みます。
x = optimvar("x",LowerBound=-100,UpperBound=99); y = optimvar("y",LowerBound=-98,UpperBound=102); rng default % For reproducibility offset = 30*randn(1,2); % Move optimal solution from [0,0] f2 = @(x,y)sawtoothxy(x-offset(1),y-offset(2)); f = fcn2optimexpr(f2,x,y); prob = optimproblem(Objective=f); x0.x = 0; x0.y = 0; function f = sawtoothxy(x,y) [t,r] = cart2pol(x,y); % Change to polar coordinates h = cos(2*t - 1/2)/2 + cos(t) + 2; g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ... .*r.^2./(r+1); f = g.*h; end
ソルバーが問題をエラーなしで確実に実行できるように、コマンド ラインで問題に対するソルバーを実行します。
[sol,fval] = solve(prob,x0)
Solving problem using fmincon.
Local minimum found that satisfies the constraints.
Optimization completed because 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.
sol = struct with fields:
x: 9.7505
y: 62.7420
fval = 23.5804最適化エクスプローラーを開く
アプリ ギャラリーでアイコンをクリックするか、コマンド ラインで「optimizationExplorer」と入力してアプリを開きます。

問題と属性の選択
今回の場合、問題は OptimizationProblem オブジェクトです。問題オブジェクトをインポートします。

prob を選択します。

最適化エクスプローラーに問題の特性が表示されます。

[開始点] を x0 として指定します。
[次へ] をクリックします。問題の属性がわかっている場合は指定します。これらの属性により、アプリで適切なソルバーが選択されるようになります。この問題の場合、それぞれの属性について [いいえ] を選択します。

[次へ] をクリックします。
最適化エクスプローラーの実行
アプリを自動モードで実行するように指定します。このモードでは、設定した制限時間まで、推奨されるすべてのソルバー、開始点、オプションがアプリで自動的に実行されます。ここでは、[制限時間] を 2 分に設定します。Parallel Computing Toolbox™ がある場合は、[並列の使用] を選択してアプリを並列で実行すると、逐次的に実行するよりも高速になることがよくあります。一般に、並列の場合は複数のソルバーがアプリで同時に実行されます。

[セッションの開始] をクリックします。

[ソルバー構成] パネルには、実行中のソルバーが表示されます。
[問題の概要] パネルには、問題のタイプと属性の概要が表示されます。
[結果の概要] パネルには、返された最良の目的関数値、現在の実行時間、開始されたソルバーと完了したソルバーの数、その他の結果が表示されます。
既定の散布図には、返された目的関数値が時間の対数に対して表示されます。
[結果テーブル] には、各ソルバー構成の結果のテーブルが示されます。
結果の検証
アプリに表示された結果を検証します。まず、[結果テーブル] の [目的値] 列ヘッダーをクリックして、[結果テーブル] を目的関数値の昇順に並べ替えます。

テーブルの多くの行で、目的関数値はほぼ 0 になっています。

フィルターを適用して特定の結果に絞り込むことができます。これを行うには、ツールストリップの [結果の確認] セクションで [フィルターの表示] ボタンをクリックします。[結果のフィルター] パネルが開き、プロットや [結果テーブル] に表示される結果にフィルターを適用できるオプションが表示されます。

上位 10 件の結果のみを確認するには、まず、[結果のフィルター] ペインの上部にある
リセット ボタンをクリックしてすべての結果を表示します。次に、[結果テーブル] の上部にある [ランキングを表示] をクリックします。

特定の構成の解を確認するには、その構成の [解] 列にあるエントリをダブルクリックします。

[結果テーブル] で現在選択されている構成の詳細を調べることができます。構成のテーブルの右側にある縦に並んだ 3 つのドットをクリックし、[詳細を表示] を選択します。

タブが開き、構成、反復表示、ソルバーの停止理由についての詳細が表示されます。このタブには、結果の解釈に役立つ関連トピックへのリンクもあります。

リセット ボタンをクリックして、ランキングのフィルター処理を削除します。

テーブルに表示するデータの列を選択できます。

テーブルの列を追加または削除します。

結果のプロットの表示
適用したフィルターに基づいて変化するさまざまなプロットを調べます。まず、[解の座標] プロットを表示します。

このプロットには、この 2 次元問題の解の座標が目的関数値ごとに色分けされて表示されます。次に、[ソルバーの箱ひげ図] を表示します。

最適化の再実行
手動で再実行するソルバーをいくつか選択します。[結果テーブル] で現在選択されている構成のスケジュールを変更できます。構成のテーブルの右側にある縦に並んだ 3 つのドットをクリックし、[スケジュール変更] を選択します。

実行する他のソルバーを選択するには、ツールストリップの [ソルバーの選択] セクションから選択します。ソルバーを選択するには、アプリが手動モードでなければなりません。手動モードに切り替えるには、[ソルバーの選択] セクションで [手動] を選択します。実行するソルバーを選択すると、メイン ウィンドウにタブとして表示されます。

[ソルバー構成] パネルに、同じスケジュール構成が表示されます。

実行するソルバー構成を選択したら、ツールストリップで [実行] をクリックします。
結果のエクスポート
[結果テーブル] 全体、またはテーブルで現在選択されている結果を作成する関数をエクスポートできます。

エクスポートされたテーブルには、現在のフィルターのデータのみが格納されます。可能な列と追加の結果の詳細がすべて含まれます。
エクスポートされた関数には、最適化問題やソルバーの入力は含まれません。エクスポートされた関数を使用するには、問題を別途保存するか、ソルバーの入力を保存します。
たとえば、OptimizationProblem オブジェクトから最適化エクスプローラーを起動した場合、エクスポートされた関数は次のコードから始まります。
function [solution,objectiveValue] = solveProblem(problem)このエクスポートされた関数の場合、元の OptimizationProblem オブジェクトを problem 引数として与える必要があります。
ソルバーの入力から最適化エクスプローラーを起動した場合は、エクスポートされた関数は次のコードまたは同等のコードから始まります。
function [solution,objectiveValue] = solveProblem(fun,A,b,Aeq,beq,lb,ub,nonlcon) % This function accepts the problem inputs imported into the Optimization % Explorer app and reproduces the selected result. % Auto-generated by MATLAB on 24-Oct-2025 15:57:35 % Load data data = load("explorerConfiguration1_1FunctionData1.mat"); x0 = data.x0;
このエクスポートされた関数の場合、元の目的関数 fun、線形制約行列 A、b、Aeq、beq、範囲 lb と ub、および非線形制約関数 nonlcon を与える必要があります。元の開始点 x0 は最適化エクスプローラーのセッション データに保存されています。エクスポートした関数を実行するには、このデータもファイル システムになければなりません。