1

MatLabを使用して QP/LP 問題を解決したいと考えてCVXGENいます。の方がはるかに高速であるため、 CVXGENoverを優先します。特に解決したいのはCVXCVXGEN

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.comnMatLabnMatLabparams.n = nparams.Q = eye(n,n)[vars, status] = csolve(params);

4

1 に答える 1

0

要するに、 で任意の次元を指定することはできないと思いますcvxgen.com。私には 1 つの解決策があります。まず、MatLab で、ユーザーが自分の電子メール アドレスとパスワードを指定できるようにしますcvxgen.com。次に、 のsystemコマンドを使用して、次の手順を実行するまたはプログラムをMatLab呼び出します。pythonjavascript

1) ユーザーをログインcvxgen.com

2)editウェブサイトのタブに移動

cvxgen3)コードをコピーして貼り付けます

4)generate cタブに移動

5) クリックgenerate code

6)matlabタブに移動

7) ダウンロードするコンパイル済み C コードの一意の識別番号をコピーします。

8) 一意の識別番号を に戻し、識別番号を呼び出してファイルMatLabをコンパイルします。MexMatLab

これで、次のコマンドMexでファイルを呼び出すことができます。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.
于 2016-09-30T14:50:58.867 に答える