メインコンテンツ

最適化エクスプローラー

R2026b

最適化問題について複数のソルバー構成とその解を調べる

R2026a 以降

説明

最適化エクスプローラー アプリでは、複数のソルバー構成 (ソルバー、オプション、および開始点) を使用して、最適化問題に対する大域的な解を求めます。自動モードを使用して、最適化問題に対する大域的な解を繰り返し求めたり、最適化問題を解くための最適なソルバーとオプションの組み合わせを探したりできます。手動モードを使用すると、調べるソルバー、初期条件、およびオプションのセットを作成できます。最適化エクスプローラーでは、結果が既定でプロットおよび格納されます。さらに調べるために、現在のセッションまたは前回のセッションで追加の最適化を実行できます。

メモ

最適化エクスプローラーを使用するには、最初に最適化問題を作成する必要があります。MATLAB® コマンドを使用して OptimizationProblem オブジェクトを提供するか、問題ベースの [最適化] ライブ エディター タスクを使用して OptimizationProblem オブジェクトを定義できます。fmincon や patternsearch などの最適化ソルバーへの入力をワークスペースに変数として提供することもできます。OptimizationProblem オブジェクトを提供すると、問題に関するほとんどの情報が最適化エクスプローラーに与えられ、最も効率的に解を求めることができます。

Optimization Explorer display

最適化エクスプローラー アプリを開く

  • MATLAB ツールストリップ: [アプリ] タブの [数学、統計および最適化] でアプリ アイコンをクリックします。

  • MATLAB コマンド プロンプト: 「optimizationExplorer」と入力します。

パラメーター

すべて展開する

最適化パラメーター

問題を OptimizationProblem オブジェクトとして指定すると、最適化エクスプローラーにほとんどのデータが与えられるため、最も適切なソルバーを選択できるようになります。

[問題オブジェクト] は、問題ベースの最適化ワークフローを使用して作成します。最初に optimproblem を呼び出してから、目的関数と制約を追加します。

あるいは、問題ベースのバージョンの [最適化] ライブ エディター タスクを使用して [問題オブジェクト] を作成します。

ソルバーの入力を使用して問題を指定すると、最適化変数を使用して問題を指定する場合よりも最適化エクスプローラーに与えられるデータが少なくなるため、解法プロセスの効率が低くなることがあります。ソルバーとその構文は以下のリンクに掲載されています。

ソルバーの入力はコマンド ラインで作成します。代表的な入力には以下があります。

  • 目的関数 — @fun などの関数ハンドルを作成します。スカラー目的関数の記述を参照してください。

  • 非線形制約関数 — @nlcon などの関数ハンドルを作成します。非線形制約を参照してください。

  • 初期点 x0 — 行ベクトルまたはその他の配列を作成します。x0 を参照してください。

  • 下限 lb と上限 ub — 数値ベクトルまたは数値配列を作成します。範囲制約を参照してください。

  • 線形制約 — 不等式制約の場合は、数値行列 A と対応するベクトル b を作成します。等式制約の場合は、数値行列 Aeq と対応するベクトル beq を作成します。線形制約を参照してください。

以下のガイドラインに従って、ソルバーの初期点を指定します。

  • 新規セッション: x0 で最適化変数の数と形状を示します。

    • ソルバーの入力 — 初期点が必要なソルバー (fmincon など) に対して、実数ベクトルまたは実数配列として x0 を指定します。fun(x0) を目的関数 fun で評価してスカラー値 (lsqnonlin ソルバーの場合はベクトル値) を返せなければなりません。

    • 問題オブジェクト — 問題オブジェクトには変数の数と形状に関する情報が含まれているため、x0 は必要ありません。

  • 手動モード: 指定した任意の開始点がソルバーで使用されます。

    • ソルバーの入力、単一点の目的の場合 — 要素の数が問題変数の数と等しい配列として x0 を指定します。

    • ソルバーの入力、多スタートまたは母集団ベースの目的の場合 — 各行が 1 つの点を表し、列の数が問題変数の数である行列として x0 を指定します。ga や particleswarm などの母集団ベースのソルバーでは、複数の点を使用して目的関数を評価します。

    • 問題オブジェクト、単一点の目的の場合 — フィールドの名前が問題変数の名前と一致する構造体として x0 を指定します。たとえば、問題に "x" と "angle" という最適化変数がある場合、構造体 x0 に、実数配列として指定された x0.x と x0.angle というフィールドを含める必要があります。

    • 問題オブジェクト、多スタートまたは母集団ベースの目的の場合 — 単一点の目的と同様の構造体または OptimizationValues ベクトルとして x0 を指定します。最適化エクスプローラーでは、OptimizationValues オブジェクトの Variables プロパティのみが使用され、Objective や Constraints の値は使用されません。

問題属性のパラメーター

最適化問題が凸であるかどうかを指定します。

ソルバーは特殊な手法を使用して凸関数を最適化し、凸制約により、いずれかの局所的最小値が大域的最小値になります。問題 (目的関数と制約の両方を含む) が凸であることが確実な場合にのみ、Yes を選択します。

最適化問題が非平滑であるかどうかを指定します。

滑らかでない関数にはジャンプやねじれが存在し、一部の点で導関数が得られない原因になります。一部のソルバーは導関数を必要とするため、滑らかでない関数を処理できません。目的関数が滑らかでない、または非線形制約が滑らかでないことが確実な場合にのみ、Yes を選択します。

目的関数または非線形制約がシミュレーションによるものであるかどうかを指定します。

シミュレーションでは、微分方程式を数値的に解くか、Simulink® などの環境で複雑なコードを用いて、目的関数または非線形制約関数を計算します。シミュレーションは通常、計算量が多く (時間がかかる)、多くの場合は滑らかではありません。

メモ

現在、Simulink モデルを使用する問題については、並列処理はサポートされていません。回避策については、Optimize Simulink Model in Parallel with Optimization Explorer (Global Optimization Toolbox)を参照してください。

目的関数または非線形制約が評価に時間のかかる (計算量が多い) ものであるかどうかを指定します。

計算量が多い関数の評価には約 5 秒以上かかります。一部のソルバーは、計算量が多い関数に適しています。1 つの点における目的関数と非線形制約の評価に合計で一般に 5 秒以上かかる場合に Yes を選択します。

ソルバー選択のパラメーター

最適化エクスプローラー アプリの動作モードを指定します。

  • [Auto] モードの場合、さまざまな開始点または乱数シードから停止条件 (設定した制限時間など) に達するまで、適用可能なソルバーがアプリで繰り返し実行されます。停止条件を参照してください。

  • [Manual] モードの場合、手動で設定したソルバー構成がアプリで実行されます。使用可能なソルバーは問題のタイプによって異なります。候補となるソルバーの一覧については、Solver を参照してください。

使用するソルバーとして、次のいずれかを指定します。

多スタート ソルバーでは、同じソルバーおよびオプションの複数のインスタンスをさまざまな開始点を使用して実行できます。

メモ

多スタート ソルバーでは MultiStart (Global Optimization Toolbox) ソルバーは実行されません。代わりに、問題の範囲内でランダムに選択された開始点を使用して、名前の付いたソルバーが複数回実行されます。一様にランダムな開始点が最適化エクスプローラーで作成され、成分が非有界の場合は ±1000 の疑似境界が使用されます。

実行パラメーター

並列処理を使用する (true) か逐次処理を使用する (false) かを指定します。並列実行には Parallel Computing Toolbox™ が必要です。

一般に、並列処理では並列ワーカーごとに 1 つの構成を割り当てて、複数の構成を 1 回で同時に処理します。通常、並列処理の方が逐次処理よりも高速です。

メモ

現在、Simulink モデルを使用する問題については、並列処理はサポートされていません。回避策については、Optimize Simulink Model in Parallel with Optimization Explorer (Global Optimization Toolbox)を参照してください。

最適化エクスプローラーの起動方法を指定します。このパラメーターの効果は [Mode] の設定によって異なります。

  • [Auto] モード — [Run] または [Run next] を選択すると、ソルバー構成がアプリで選択され、停止条件に達するまで実行されます。

  • [Manual] モード — [Run] を選択すると、スケジュールされた構成が実行されます。[Run next] を選択すると、次にスケジュールされた構成のみが実行されます。スケジュールされた構成は [ソルバー構成] パネルで確認できます。

結果の確認のパラメーター

ソルバーの実行時間に対する目的関数値の散布図 (既定のプロット) を表示します。

  • 時間軸は対数スケールです。目的関数軸はスケーリングなし (線形) です。

  • プロットされた点の詳細を確認するには、点をクリックしてデータ ヒントをアクティブにします。点をもう一度クリックすると、データ ヒントが非表示になります。

  • 表示にはフィルターとランキングの設定が影響します。

解の平行座標プロットを表示します。これは parallelplot と同様です。プロットの座標のスケールが異なる場合に結果を見やすくするには、[値の再スケーリング] を選択して、各座標値の区間を [0,1] にします。

  • プロットされる点と線は目的関数値別に色分けされ、その色分けが付随するカラー バーに示されます。

  • プロットされた解の詳細を確認するには、点をクリックしてデータ ヒントをアクティブにします。点をもう一度クリックすると、データ ヒントが非表示になります。

  • 表示にはフィルターとランキングの設定が影響します。

解の点の次元数に応じて、解のクラスターの散布図または t-SNE プロットを表示します。1 次元または 2 次元の解の場合、scatter のプロットが表示されます。3 次元以上の解の場合、解のクラスターの t-SNE プロットが表示されます。これは tsne (Statistics and Machine Learning Toolbox) によって返されます。

  • プロットされるマーカーは目的関数値別に色分けされ、その色分けが付随するカラー バーに示されます。

  • プロットされた解の詳細を確認するには、点をクリックしてデータ ヒントをアクティブにします。点をもう一度クリックすると、データ ヒントが非表示になります。

  • 表示にはフィルターとランキングの設定が影響します。

解のスパイダー プロットを表示します。それぞれの解について、次の数量が 5 つの軸で示されます。

  • 目的値 — 目的関数値

  • 実行時間 [s] — 実行時間 (秒)

  • 制約違反 — 実行不可能性 (最大制約違反)

  • 関数の評価回数 — 関数評価の回数

  • 最適性 — 1 次の最適性の尺度 (Optimization Toolbox™ のソルバーにのみ適用)

次の点に注意してください。

  • プロットされる点と線は目的関数値別に色分けされ、その色分けが付随するカラー バーに示されます。

  • プロットされた解の詳細を確認するには、点をクリックしてデータ ヒントをアクティブにします。点をもう一度クリックすると、データ ヒントが非表示になります。

  • 表示にはフィルターとランキングの設定が影響します。

ソルバー アルゴリズム別の目的関数値の箱ひげ図を表示します。これは boxchart によって返されます。

  • プロットされた解の詳細を確認するには、目的の点にカーソルを合わせます。点をクリックすると、データ ヒントが表示されたままになります。他の目的の点にカーソルを合わせるかクリックすると、それらが同時に表示されます。黒のアンカー ポイントをクリックすると、データ ヒントが非表示になります。

  • 表示にはフィルターとランキングの設定が影響します。

[結果のフィルター] パネルの表示を切り替えます。このパネルのオプションを使用して、プロットや [結果テーブル] に表示される結果にフィルターを適用できます。具体的には、次のようなフィルターが可能です。

  • 選択したソルバー

  • 選択したステータス ([完了]、[実行時間の制限に達しました]、[停止])

  • [実行時間]、[目的値]、または [制約違反] が指定の範囲内に収まる結果

[結果のフィルター] パネルには、現在表示されている結果の数と結果の総数が表示されます。

Showing 257 of 273 results

[結果テーブル] にも同じ情報が表示されます。フィルターを削除するには、Reset and show all results ボタンをクリックします。

目的値で並べ替えた上位の結果を表示します。ランキングには最大 10 件の結果が含まれます。ランキングをキャンセルするには、Reset and show all results ボタンをクリックします。

ランキングは、別のフィルターがアクティブなときは使用できません。

エクスポート パラメーター

結果をワークスペースにエクスポートする方法を指定します。

  • Export Results Table は、フィルターが適用されている現在の結果のテーブルをエクスポートします。

  • Export Function は、選択した行の結果を [結果テーブル] に再現する関数をエクスポートします。この関数を実行するには、通常、入力として使用した元の最適化問題か、最初にセッションを作成するために使用したソルバーの入力が必要になります。ソルバーの入力を使用した場合は、エクスポートした関数に、使用していないものも含めて、すべてのソルバーの入力を渡す必要があります。使用していない入力については、エクスポートした関数に空の大かっこ ([]) をそれぞれ渡します。

プログラムでの使用

optimizationExplorer は、最適化エクスプローラー アプリを開きます。既に開いている場合はアプリにフォーカスを移動します。

optimizationExplorer(folder) は、以前に保存した folder のセッションで最適化エクスプローラー アプリを開きます。folder 引数は文字ベクトルまたは string スカラーとして指定します。最適化エクスプローラーのセッション フォルダーの名前に加え、セッション フォルダーが現在のフォルダー以外にある場合はフォルダーのパスも含める必要があります。

制限

サポートされる問題のタイプ

現在、最適化エクスプローラーは、二次でない明示的に非線形の問題にのみ対応しています。具体的に、以下は最適化エクスプローラーでサポートされていません。

  • 線形計画問題

  • 二次計画問題

  • 錐計画問題

  • 多目的問題

  • 混合整数線形計画問題

線形計画問題、凸二次計画問題、および錐計画問題には一意の最適な目的関数値があるため、これらの問題を解くためのツールとしては最適化エクスプローラーは適しません。線形計画問題については、最適化エクスプローラーよりも linprog の sensitivity 出力の方が、問題のパラメーターの変更による影響について多くの情報が得られます。

セッション フォルダーは保護されない

[保存] または [名前を付けて保存] を使用して最適化エクスプローラー セッションを保存するとき、結果のフォルダーは変更から保護されません。セッション フォルダー内のいずれかのファイルの名前または内容が変更されると、セッションを再度開くことができなくなる可能性があります。したがって、セッション フォルダーを使用して最適化エクスプローラー セッションを再開できるようにするには、フォルダー内での変更は一切行わないでください。

ヒント

  • ベスト プラクティスとして、最適化エクスプローラーでソルバーを実行する前に、問題に対して 1 回はソルバーを実行しておきます。この手順により、ソルバーが問題をエラーなしで確実に実行できるようになります。

  • 追加のソルバー構成を実行するときは、現在の結果が保持され、新しい結果が [結果テーブル] とプロットに追加されます。

  • プロットの表示と結果のフィルターのオプションは、ツールストリップの [停止] ボタンと同様に実行中にアクティブになります。ただし、これらのオプションの効果は、ソルバーの反復の完了後にのみ現れるため遅れて見えることがあります。

  • [結果テーブル] の解の値を確認するには、テーブルのエントリをダブルクリックします。

    Double-click the entry to see the value.

  • [結果テーブル] のエントリの詳細を確認するには、テーブルの右側にある縦に並んだ 3 つのドットをクリックし、[詳細を表示] を選択します。

    Show details.

  • 目的関数または非線形制約関数が勾配情報を返す場合やベクトル化された方法で計算を行う場合の効率を高めるには、[ソルバーの入力] を [詳細設定] の設定と共に使用して問題を設定します。

    Select problem inputs in new session.

    Advanced settings allow gradient and vectorized computations.

    現在、勾配情報を使用できるのは fmincon、fminunc、および lsqnonlin、ベクトル化された方法で実行できるのは ga、particleswarm、patternsearch、および surrogateopt です。

アルゴリズム

すべて展開する

バージョン履歴

R2026a で導入

参考

| | | | (Global Optimization Toolbox) | | (Global Optimization Toolbox) | (Global Optimization Toolbox) | (Global Optimization Toolbox) | (Global Optimization Toolbox)