Matlab中CVX工具箱使用

Matlab中CVX工具箱使用

CVX是一個凸優化解決工具,需要在Matlab上使用。
CVX讓Matlab變成一個模型語言,可以使用Matlab的標準語法完成優化問題的求解。

安裝

  1. 下載官方安裝包,解壓縮到任意路徑,建議和Matlab放到一起。
  2. 打開Matlab,切換路徑到CVX的存放路徑,Matlab中運行cvx_setup命令即完成安裝。
cd C:\personal\cvx
cvx_setup
  • CVX 支持的解析器slover
    該版本的cvx支持4種具有不同特性的解析器slover : SeDuMi、SDPT3、MOSEK 、Gurobi

所以使用cvx並不需要去額外下載一個slover,因爲CVX的安裝包中已經包含了 SeDuMi and SDPT3,這兩個slover是免費許可的,默認啓用的是SDPT3(The default solver is currently SDPT3)。

  • MOSEK 包含在CVX的教育許可證和商業許可證中,使用教育郵箱申請教育版許可,即可免費使用。
  • Gurobi and MOSEK 同樣也可以搭載到CVX中去,但是你需要獲得專業版許可證CVX Professional license才能使用這些功能。

(可以下載帶有Gurobi and MOSEK的CVX包或單獨下載Gurobi and MOSEK,之後安裝專業版許可證) ,兩個公司均有教育許可。

使用實例

1、官網實例,目標是解決如下優化問題:
minimizeAxb2subject toCx=dxe \begin{array}{ll} \text{minimize} & \|Ax-b\|_2 \\ \text{subject to} & Cx=d \\ & \|x\|_\infty\leq e \end{array}
在Matlab中使用以下代碼即可完成優化求解,

m = 20; n = 10; p = 4;
A = randn(m,n); b = randn(m,1);
C = randn(p,n); d = randn(p,1); e = rand;
cvx_begin
    variable x(n)
    minimize( norm( A * x - b, 2 ) )	%目標函數
    subject to
        C * x == d						%約束條件1
        norm( x, Inf ) <= e				%約束條件2
cvx_end	

2、上面的自變量是單個向量,下面給出一個多個變量的求解方案;
還是一個凸函數最優化問題,主要問題如下:
首先要把需要解決的問題寫成convex optimization的標準問題,即明確目標函數和條件約束。
maxg,tt s.t. {2gm1HMll^ggm1HMll^gm1H}t,ll^g2Mp \begin{array}{l}{\max _{\mathbf{g}, t} t} \\ {\text { s.t. } \Re\left\{2 \mathbf{g}_{m-1}^{H} \mathbf{M}_{l \hat{l}} \mathbf{g}-\mathbf{g}_{m-1}^{H} \mathbf{M}_{l \hat{l}} \mathbf{g}_{m-1}^{H}\right\} \geq t, \forall l \neq \hat{l}} \\ {\quad \quad\|\mathbf{g}\|^{2} \leq M_p}\end{array}
其中,Mll^M_{l\hat{l}}爲矩陣,MpM_p爲固定值,約束向量gg的幅度。

cvx_begin
    variable g(n,1) t
    maximize (t)	%目標函數
    subject to 		%約束條件
        for i = 1:56
            real(g_m'*M(i)*g - g_m'*M(i)*g_m) >= t;
        end 
        norm(g) <= M;
cvx_end

在Matlab中可以使用循環語句完成大量約束的枚舉,更加方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章