チートシート

MATLAB におけるソルバーベースの最適化

最適化問題、最小二乗問題、および非線形方程式系を定義し、求解します。[最適化] ライブエディター タスクを使用して、このワークフローの手順に従ってください。

1. 最適化変数を単一のベクトル \( x \) にまとめます。\( x \) を用いて、目的関数と制約条件を記述します。

目的関数タイプ 数学形式 例
線形 \( f^{T} x \) f = [-1 0 -5];
二次 \( x^{T}H x + f^{T} x \) H = [5 1 0; 1 3 0; 0 0 0];
最小二乗

\( \| Cx - d \|_2 \)

\( \sum F_i(x)^2 \)

C = [7 8 10; 1 3 4; 2 5 7];
d = [2; 1; 1.5];

function F = myF(x)
F(1) = f1(x);
F(2) = f2(x);
end
一般 \( f(x) \) function objval = fobj(x)
objval = 3*(x(1)-x(2))^4;
end
制約タイプ 数学形式 例
境界 \( l \leq x \leq u \) lb = zeros(n,1);
ub = 5*ones(n,1);
線形

\( A x \leq b \)

\( A_{eq} x = b_{eq} \)

A = [1 0 1; 0 -2 1];
b = [4; 2];
Aeq = [1 0 2];
beq = 1;
二次錐 \( \| A_{sc} x - b_{sc} \| \leq d_{sc} x - \gamma \) A = diag([1,1/2,0]);
b = zeros(3,1);
d = [0;0;1];
gamma = 0;
socConstraints =
secondordercone(A,b,d,gamma);
一般

\( c(x) \leq 0 \)

\( c_{eq}(x) = 0 \)

function[c,ceq] = nlcons(x)
c(1) = x(1).^2 + x(2).^2 - 1;
c(2) = x(1)*x(3) - 5;
ceq = [];
end
整数 \( x_j \in \mathbb{Z}^n \) intcon = [1 2]

2. 目的関数と制約条件のタイプに合ったソルバーを選択します。

Optimization Toolbox™ のソルバーは導関数を利用しており、通常は処理速度が速く、大規模な問題にも対応できます。Global Optimization Toolbox (イタリック体) および MATLAB (*) のソルバーは、導関数を使用せず、大域的最小値を探索します。

3. 必要に応じて初期点を指定し、必要であればオプションを設定してください。ソルバーを呼び出して、解を求めます。

初期点

例:

x0 = lb + 0.5*(ub-lb)
x0 = zeros(n,1)

オプション

optimoptions を使用して、停止条件、プロット関数、初期母集団などを設定します。

例:

opts = optimoptions('fmincon','Display','iter')
求解

例:

[x,fval] = fmincon(@fobj,x0,A,b,Aeq,beq,lb,ub,@nlcons,opts)
[x,fval,eflag] = ga(@fobj,nvars)
x = lsqlin(C,d,A,b,[],[],lb)

詳細はこちら: