Main Content

ソルバーベースの [最適化] ライブ エディター タスクの効果的な使い方

タスクの効果的な整理

タスクの上の 1 つのセクションとタスクの下の 2 つ以上のセクションを使用して、[最適化] ライブ エディター タスクをライブ スクリプトに配置します。ライブ エディターで [最適化] タスクを開くには、[挿入] タブをクリックしてから、[タスク]、[最適化] を選択します。[挿入] タブで [セクション区切り] ボタンを使用して、新しいセクションを挿入します。

Live Script with section for data on top, then Optimize Live Editor task, then section for output, then section for functions.

既定で、タスク ウィンドウの右側にある [右側に出力] ボタンが選択されています。

Output on right button

この選択では、出力がタスクの右側に配置されています。出力をタスクの下側に配置するには、[インラインで出力] ボタンを選択します。

Output inline button

  • タスクの上に、最適化に必要なデータ用のセクションを追加します。たとえば、初期点 x0Aeqbeq などの制約行列、および目的関数または非線形制約関数のその他のパラメーターはタスクの上のセクションに属します。タスクの上のセクションにはデータを含める必要があるため、スクリプトを保存して再読み込みした後などに、スクリプト全体を正常に実行できます。データがワークスペースに読み込まれたら、スクリプトがデータにアクセスする必要があります。

  • タスクの出力をタスクの下のセクションに配置します。たとえば、タスクが solution 出力と objectiveValue 出力をワークスペースに書き込んでから、これらの出力をこのセクションに表示します。タスクの結果を表示して操作するための複数のセクションをタスクの下に追加できます。

  • 最後のセクションには、問題のローカル関数が含まれています。ローカル関数はライブ スクリプトの末尾に配置する必要があります。ただし、複数のスクリプトからアクセスされる関数がある場合は、それらを MATLAB® パス上の別のファイルに含めた方が便利です。

あるベクトルへの最適化変数の配置と他の変数へのデータの配置

[最適化] は、ソルバーベースの最適化と方程式解法の初期段階です。そのため、スカラー目的関数の記述 に記載されているように、すべての変数を 1 つのベクトルに配置する必要があります。たとえば、次の目的関数があるとします。

f(x,y,z,w)=(x2+y4)exp((z/(1+x2))wexp(z).

この例では、変数の x と z が最適化変数で、変数の y と w が固定データです。次のように、[最適化] タスクの下のセクションで関数を表現できます。

function f = myfun(vars,y,w)
x = vars(1);
z = vars(2);
f = (x^2 + y^4)*exp(-z/(1 + x^2))*w*exp(-z);
end

タスクの上のセクションで変数の y と w の値を定義します。

y = log(pi);
w = 2/3;

Ctrl+Enter を押して y と w をワークスペースに配置することによって、タスクの上のセクションを実行します。その後で、タスクの [問題のデータの選択] セクションで該当する入力を選択します。

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

推奨ソルバーを取得するための問題の種類の指定

タスクの [問題の種類の指定] セクションには、目的関数タイプと制約タイプを選択するためのボタンがあります。これらの項目を選択すると、[最適化] は、使用可能なソルバーの数を減らして、1 つのソルバーを推奨として表示します。たとえば、最小二乗目的、上限、および下限を伴う問題の場合は、[最適化] から lsqnonlin ソルバーが推奨されていることが示されます。

Least squares objective, lower and upper bounds leads to lsqnonlin as recommended

現在の選択では使用できないソルバーを使用するには、選択済みのボタンをクリックして、すべての問題タイプ ボタンを選択解除します。

タスクの実行方法

[最適化] ライブ エディター タスクはさまざまな方法で実行できます。

  • タスク ウィンドウの右上にあるオプション ボタン [⁝] をクリックして、[セクションの実行] を選択します。

    Run section from menu

  • タスクをクリックしてから、Ctrl+Enter を押します。

  • [自動実行] チェックボックス (タスク ウィンドウの右上にあるオプション ボタンの横) をオンにすることによって、変更後に自動実行するようにタスクを設定します。タスクの処理に時間がかかる場合は、この設定を選択しないでください。

    Autorun section

  • タスクの左側にある縞模様のバーをクリックすることによって、タスクを含むセクションを実行します。

    Striped bar to the left of the task

  • [ライブ エディター] タブで [実行] ボタンをクリックするか、F5 を押すことによって、ライブ スクリプト全体を実行します。

    Run button

ソルバーの進行状況の表示

ライブ エディター タスクを使用すれば、ソルバーの進捗状況を簡単にモニターすることができます。ソルバーが適切に動作していることを確認するには、少なくとも目的関数値プロットを表示します。また、プロット関数を使用することによって、データを失うことなくソルバーを停止できます。

Plot the objective value

相当するコードの表示

[最適化] は、画面上の選択と一致するコードを内部的に作成します。コードは、オプション ボタン [⁝] をクリックして、[コントロールおよびコード] または [コードのみ] を選択することによって表示できます。

Selecting Controls and Code

コードがタスクの下に表示されます。

lsqnonlin options and run syntax

このコードを選択してコピーし、他のコンテキストで使用するために修正できます。

タスクをビジュアル インターフェイスから使用可能なコードに変換するには、[コードへの変換] を選択します。この選択によって、ビジュアル [最適化] インターフェイスが削除され、コードの使用に進むことができます。

Convert task menu item

参考

関連するトピック