对于log,exp等函数,CVX采用的是不可靠的Successive Approximation method对函数近似,而CVXQUAD采用更可靠的Pade Approximation。
更新CVX的版本到CVX 2.2。除了要用到Quantum (Matrix) Entropy和 Matrix Logarithm相关的函数,必须要用CVXQUAD准确求解。如果使用CVX 2.2+Mosek 9.x求解器,就可以无需安装CVXQUAD,因为CVX可以利用Mosek 9.x本地的指数锥方法,而避免CVX的Successive Approximation method和消除CVXQUAD的使用优势。
A)安装CVXQUAD
CVXAUQD是一个函数集合,它同基于matlab的凸优化工具CVX一起使用。对于指数锥等多种函数,它使用不同于CVX采用的新近似方法。
首先解压 https://github.com/hfawzi/cvxquad/archive/master.zip 下载下来的压缩包,我将该文件放在了matlab安装的bin目录下,然后在matlab的命令框里面输入:
添加绝对路径: addpath(genpath(‘F:\Matlab2018b\bin\cvxquad-master’))
将文件夹添加到matlab路径(!!!困扰我很久)
然后将的文件夹里面 “exponential/exponential.m” 复制到CVX安装目录下的文件夹“sets”中(可以将原本的exponential.m文件复制到其他地方保存,以防以后还会使用到Successive Approximation method方法)
可以运行以下使用了CVXQUAD中函数quantum_rel_entr的代码(为给定矩阵M计算最近的相关矩阵),检验CVXQUAD是否成功安装运行。
n = 4;
M = randn(n,n);
M = M*M’;
cvx_begin
variable X(n,n) symmetric
minimize quantum_rel_entr(M,X)
subject to
diag(X) == ones(n,1)
cvx_end
更详细的内容请参照网页:https://github.com/hfawzi/cvxquad。
http://ask.cvxr.com/t/cvxquad-how-to-use-cvxquads-pade-approximant-instead-of-cvxs-unreliable-successive-approximation-for-gp-mode-log-exp-entr-rel-entr-kl-div-log-det-det-rootn-exponential-cone-cvxquads-quantum-matrix-entropy-matrix-log-related-functions/5598
以上翻译基于本人自身见解,若有不正之处,敬请提出,本人将不尽感激!