Matlab中CVX工具箱使用
CVX是一個凸優化解決工具,需要在Matlab上使用。
CVX讓Matlab變成一個模型語言,可以使用Matlab的標準語法完成優化問題的求解。
安裝
- 下載官方安裝包,解壓縮到任意路徑,建議和Matlab放到一起。
- 打開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 defaultsolver
is currently SDPT3)。
- MOSEK 包含在CVX的教育許可證和商業許可證中,使用教育郵箱申請教育版許可,即可免費使用。
- Gurobi and MOSEK 同樣也可以搭載到CVX中去,但是你需要獲得專業版許可證
CVX Professional license
才能使用這些功能。
(可以下載帶有Gurobi and MOSEK的CVX包或單獨下載Gurobi and MOSEK,之後安裝專業版許可證) ,兩個公司均有教育許可。
使用實例
1、官網實例,目標是解決如下優化問題:
在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
的標準問題,即明確目標函數和條件約束。
其中,爲矩陣,爲固定值,約束向量的幅度。
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中可以使用循環語句完成大量約束的枚舉,更加方便。