問題ベースの最適化ライブ エディター タスクの概要
このサンプル スクリプトは、問題ベースの "最適化" ライブ エディター タスクを使用した最適化や方程式解法を示しています。独自の問題に合わせてスクリプトを修正してください。
このスクリプトは、次のような、非線形制約を伴う非線形最適化問題を解きます。
という制約の下で、 を最小化します。ここで、、初期点 は です。また、範囲 、 を設定します。
目的関数のコードは、このスクリプトの終わりに掲載しています。
パラメーターまたはデータの挿入
通常は、データや値をソルバーに渡します。これらの値を入力セクション (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.
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