MatLab
を使用して QP/LP 問題を解決したいと考えてCVXGEN
います。の方がはるかに高速であるため、 CVXGEN
overを優先します。特に解決したいのはCVX
CVXGEN
min f(x) s.t. x in X
ここf(x)
で、 は二次形式であり、X
コンパクトで凸であり、線形関数によって定義されます。問題のサイズは実行によって異なります。手続きをできるだけ自動化したい。CVXGEN
説明のために、コードの例を次に示し ます。
dimensions
n = 10
end
parameters
Q (n,n) psd # quadratic penalty.
end
variables
x (n)
end
minimize
quad(x, Q)
end
このコードは で入力しcvxgen.com
ます。この Web サイトで、一意の番号を与える C コードを生成できます。次に、一意の番号を使用して、これを MEX コードにコンパイルできます。最後に、次のコードを実行して、この MEX コード ( csolve
) を MatLab から呼び出すことができます。
n=10; % dimension of the problem
params.Q = eye(n,n); % assume that the Hessian is the identity
[vars, status] = csolve(params); % this outputs optimal x* = 0.
ただし、この手順では、実行する問題の次元ごとに、に移動し、 を変更し、コードをコンパイルn
してから、コードを実行する必要があります。パラメータとして入力させることはできますか?このように、コードを 1 回コンパイルするだけで済みます。次に、コード セット内でとを呼び出し、次に を呼び出します。cvxgen.com
n
MatLab
n
MatLab
params.n = n
params.Q = eye(n,n)
[vars, status] = csolve(params);