Main Content

最適化

ライブ エディターでの方程式の最適化または解決

説明

[最適化] タスクを使用すれば、問題を対話的に最適化する、または非線形方程式系を解く 2 つの方法から選択することができます。

  • 問題ベース (推奨) — シンボリック最適化変数とシンボリック最適化式を作成して、目的関数と制約、または方程式を表します。

  • ソルバーベース — 標準の MATLAB® コードを使用して、目的関数と制約、または方程式を表します。

このタスクは、自動的に、ライブ スクリプト用の MATLAB コードを生成します。

このタスクの問題ベースのバージョンを使用して、次の操作を行うことができます。

  • 最適化変数配列およびその範囲と初期値を指定します。

  • 問題のタイプ (最小化、最大化、実行可能性、または方程式の解法) を指定します。

  • 式を記述するか、関数を参照することによって、目的関数と制約関数を指定します。

  • オプションで、ソルバーを選択し、既定以外のオプションを指定します。

  • 最適化を実行します。

このタスクのソルバーベースのバージョンを使用して、次の操作を行うことができます。

  • 問題の特性に基づいてソルバーを選択します。Global Optimization Toolbox をお持ちの場合は、そのソルバーを使用するように選択することもできます。

  • 関数を記述するか、関数を参照することによって、目的関数と制約関数を指定します。

  • ソルバー オプションを指定します。

  • 最適化を実行します。

[最適化] の使用を開始するには、ソルバーベースの最適化ライブ エディター タスクの概要および問題ベースの最適化ライブ エディター タスクの概要を参照してください。[最適化] の使用方法に関する提案については、ソルバーベースの [最適化] ライブ エディター タスクの効果的な使い方または問題ベースの [最適化] ライブ エディター タスクの効果的な使い方を参照してください。現在、[最適化]fseminf ソルバー、GlobalSearch ソルバー、または MultiStart ソルバーを使用することはできません。

ライブ エディター タスクに関する一般情報については、ライブ スクリプトへの対話型タスクの追加を参照してください。

Optimize task in Live Editor: Choose between problem-based (recommended) and solver-based

タスクを開く

MATLAB エディターでライブ スクリプトに [最適化] タスクを追加するには、[挿入] タブで、[タスク]、[最適化] を選択します。

Insert an Optimize Live Editor task

または、スクリプト内のコード ブロックに、optimfmincon などの関連キーワードを入力します。コマンドの補完候補から [最適化] を選択します。

Choosing Optimize from command completion suggestions

パラメーター

問題ベースの変数名は動的です。通常の命名規則の制限に従う、任意の名前を選択できます (変数名を参照)。

問題ベース

問題のタイプ。該当するラベルの付いたボタンをクリックすることによって指定されます。

目的関数。最適化式、ローカル関数、または関数ファイルとして指定します。GoalMinimize または Maximize の場合に適用されます。

解の制約。最適化式、ローカル関数、または関数ファイルとして指定します。+ ボタンをクリックすることで問題に制約が追加されます。

問題の方程式。最適化式、ローカル関数、または関数ファイルとして指定します。GoalSolve equations の場合に適用されます。+ ボタンをクリックすることで問題に方程式が追加されます。

タスクの状態。Define problem または Solve problem で指定します。詳細については、問題ベースの [最適化] ライブ エディター タスクの効果的な使い方を参照してください。

ソルバーベース

目的関数タイプ。該当するラベルの付いたボタンをクリックすることによって指定されます。選択した目的関数によって、使用可能なソルバーと問題に推奨されるソルバーが決定されます (Solverを参照)。

制約タイプ。該当するラベルの付いたボタンをクリックすることによって指定されます。複数の制約タイプを指定できます。選択した制約によって、問題で使用可能なソルバーと推奨されるソルバーが決定されます (Solverを参照)。

MATLAB が問題を解くために使用する最適化ソルバー。使用可能なソルバーのリストからソルバーを選択することによって指定されます。使用可能なソルバーと推奨されるソルバーは、所有しているライセンスと選択したObjectiveConstraintsによって異なります。

制限

  • 現在、[最適化] には次の多目的最適化の制限があります。

    • 複数の出力をもつ単一の関数を使用して目的関数を指定する必要があります。言い換えると、目的関数は値のベクトル、すなわち目的ごとに 1 つのエントリを出力する必要があります。

    • すべての目的関数は、同じ意味、ソルバーベースのタスクの最小化、および問題ベースのタスクの最小化または最大化を使用する必要があります。

ヒント

  • 追加の入力を伴う関数の場合は、ソルバーベースと問題ベースの [最適化] タスクの要件がやや異なります。

    • "ソルバーベース": 最適化変数を選択し、固定データ入力を含むワークスペース変数を指定します。例については、あるベクトルへの最適化変数の配置と他の変数へのデータの配置を参照してください。この例には、3 つの関数入力が含まれています。

      Optimization input = vars, Fixed input y = y, Fixed input w = w.

      [最適化] では、すべての関数入力が指定されるまでコードが生成されません。

    • "問題ベース": 各関数の入力の最適化変数またはワークスペース変数を指定します。関数シグネチャ内の入力引数名が既存の最適化変数名またはワークスペース変数名に一致する場合、[最適化] は自動的にその名前を選択します。

      Function inputs = x, y, a.

      [最適化] では、すべての関数入力が指定されるまでコードが生成されません。

  • [最適化] では、varargin 入力を含む関数またはエラーを含む関数を解析できません。

  • ファイルから関数を選択すると、[最適化] がそのファイルの場所を MATLAB パスに追加します。

  • [最適化] で解析エラーが発生した場合や複数のローカル関数の名前が重複している場合は、使用可能なローカル関数のリストが空になります。

バージョン履歴

R2020b で導入

参考

関数