有理目的関数、問題ベース
最適化に対する問題ベースのアプローチでは、最適化変数を作成し、これらの変数で目的関数と制約を表現します。
有理関数は多項式の商です。目的関数が最適化変数の有理関数またはその他のサポートされている関数の場合は、目的関数の式を変数から直接作成できます。これに対して、目的関数がサポートされている関数でない場合は、目的関数を表す MATLAB® 関数を作成し、fcn2optimexpr
を使用して関数を式に変換しなければなりません。詳細については、最適化変数および式でサポートされる演算と非線形関数から最適化式への変換を参照してください。
たとえば、次の目的関数を記述します。
2 つの最適化変数 x
および y
で記述します。
x = optimvar('x'); y = optimvar('y'); f = (x-y)^2/(4+(x+y)^4)*(x+y^2)/(1+y^2);
この目的関数の最小値を求めるには、f
を目的関数として最適化問題を作成し、初期点を設定して solve
を呼び出します。
prob = optimproblem('Objective',f);
x0.x = -1;
x0.y = 1;
[sol,fval,exitflag,output] = solve(prob,x0)
Solving problem using fminunc. Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
sol = struct with fields:
x: -2.1423
y: 0.7937
fval = -1.0945
exitflag = OptimalSolution
output = struct with fields:
iterations: 9
funcCount: 10
stepsize: 1.7073e-06
lssteplength: 1
firstorderopt: 1.4999e-07
algorithm: 'quasi-newton'
message: 'Local minimum found....'
objectivederivative: "reverse-AD"
solver: 'fminunc'
終了フラグは、報告された解が局所的最小値であることを示しています。出力構造体は、ソルバーが関数評価を 30 回行っただけで最小値に到達していることを示しています。