2016-09-29 59 views
1

我想用CVXGEN解決MatLab中的QP/LP問題。我偏好CVXGEN而不是CVX,因爲CVXGEN要快得多。具體地講,我想解決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被輸入。在這個網站上,我可以生成C代碼,它給了我一個唯一的編號。然後我可以使用唯一編號將其編譯成MEX代碼。最後,我可以通過運行下面的代碼

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. 

這個過程調用從MATLAB這個MEX代碼(csolve),但是,需要我想要運行的問題n的每個維度的,我需要去cvxgen.com ,更改n,編譯代碼,然後運行我的MatLab代碼。是否可以讓n作爲參數輸入?這樣,我只需要編譯一次代碼,然後在我的MatLab代碼集params.n = nparams.Q = eye(n,n)中,然後調用[vars, status] = csolve(params);

回答

0

總之,我不認爲可以在cvxgen.com上指定任意尺寸。我有一個解決方案:首先,在MatLab中,允許用戶爲cvxgen.com指定他/她的電子郵件地址和密碼。接着,在MatLab使用system命令,呼叫pythonjavascript程序執行以下步驟:

1)登錄用戶爲cvxgen.com

2)轉到edit標籤上網站

3)複製和粘貼所述cvxgen代碼

4)轉到generate c標籤

5)點擊generate code

6)轉到matlab標籤

7)複製唯一標識號碼爲編譯的C代碼被下載

8)通的唯一標識號返回到MatLab和編譯Mex通過呼叫識別號碼在MatLab中輸入文件。

現在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.