問題ベースの最適化ライブ エディター タスクの概要
このサンプル スクリプトは、問題ベースの "最適化" ライブ エディター タスクを使用した最適化や方程式解法を示しています。独自の問題に合わせてスクリプトを修正してください。
このスクリプトは、次のような、非線形制約を伴う非線形最適化問題を解きます。
という制約の下で、 を最小化します。ここで、、初期点 は です。また、範囲 、 を設定します。
目的関数のコードは、このスクリプトの終わりに掲載しています。
パラメーターまたはデータの挿入
通常は、データや値をソルバーに渡します。これらの値を入力セクション (x0x と x0y が表示されている) に入力し、[セクション]、[セクションの実行] を選択するか、Control+Enter を押すことによってセクションを実行します。
初期点成分 x0y と x0x を設定し、最適化するために a をスケールします。
x0x = -2; x0y = 2; a = 100;
先に進む前にこのセクションを実行することによって、これらの値と他の問題データをワークスペースに配置します。
最適化ライブ エディター タスク
通常は、[ライブ エディター] タブで [タスク] > [最適化] を選択するか、または [挿入] タブで [タスク] > [最適化] を選択して、最適化ライブ エディター タスクをスクリプトに配置します。このとき、次の選択肢が表示されます。(これは単なるイメージで、実際のタスクではありません。)

問題ベースのタスクを選択するには、[問題ベース (推奨)] をクリックします。
以下の問題ベースのタスクには、変数、目的関数、および制約が入力されています。各自の問題に合わせてタスクを修正するか、そのまま実行してタスクの動作を確認します。問題を修正するには、タスクの一番下で [問題の定義] ボタンをクリックします。タスクを実行するには、タスクの一番下で [問題の求解] ボタンをクリックします。
OptimizationProblem :
Solve for:
x, y
minimize :
log(((1 + (100 .* (y - x.^2).^2)) + (1 - x).^2))
subject to :
(x.^2 + y.^2) <= 1
variable bounds:
-3 <= x <= 3
-2 <= y <= 9
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. <stopping criteria details>
solution = struct with fields:
x: 0.7864
y: 0.6177
reasonSolverStopped =
OptimalSolution
objectiveValue = 0.0447
結果の解釈
タスクが solve を呼び出し、そこで fmincon を呼び出してこの問題を解きます。タスクの一番上には、解が solution 構造体で返されることが示されています。報告された解 x = 0.7864 と y = 0.6177 は、次の計算のように という制約を満たします。
solution.x^2 + solution.y^2
ans = 1.0000
ソルバーは、停止時に終了条件 OptimalSolution を報告します。この条件を解釈するには、fmincon ソルバーの exitflag 出力引数を確認します。その説明には、「1 次の最適性の尺度が options.OptimalityTolerance より小さく、最大制約違反が options.ConstraintTolerance より小さいことを示します」と記載されています。つまり、この解は実行可能な局所的最小値です。
解での目的関数値は 0.0457 です。これは、実行可能点の中で最も小さい目的関数値です。
補助関数
次のコードは、rosenbrock 補助関数を作成します。
function objective = rosenbrock(x,y,a) % This function should return a scalar representing an optimization objective. % Example: Concession stand profit % revenue = 3*soda + 5*popcorn + 2*candy; % cost = 1*soda + 2*popcorn + 0.75*candy; % objective = revenue - cost; % profit % Edit the lines below with your calculations. objective = log(1 + a*(y - x^2)^2 + (1 - x)^2); end
