from:http://blog.csdn.net/duoduo1030/article/details/53582370?utm_source=itdadao&utm_medium=referral

CVX是斯坦福的教授Stephen P. Bold等人开发的一个基于Matlab的凸优化工具包,能够解决诸如线性规划,二次规划,整数规划(需要license)等等优化问题,且使用非常的人性化。比如,求解最小二乘法等问题。

Installation

支持32/64位的Linux, MAC OSX, Windows系统。 
可戳官方下载链接 :http://cvxr.com/cvx/download/

Instructions for Mac

下载的压缩包解压到任意目录(不要在Matlab的toolbox路径就可以了,因为之后安装会在这里新建cvx目录)。 
打开matlab程序。(我用的Matlab R2014b)

cd Your-DIR-to-cvx/cvx
cvx_setup 
 
 
  • 1
  • 2

傻瓜式安装就一键搞定了! 
其他需求详细戳用户手册安装教程:http://cvxr.com/cvx/doc/install.html

Basics

cvx_begin/cvx_end

cvx模块需要以cvx_begin起始,以cvx_end结束。其中cvx有一些需要了解的参数。

cvx_begin quiet   % 不输出cvx求解时的一大坨结果
cvx_begin sdp     % 半正定编程模式
cvx_begin gp      % 几何编程模式
 
 
  • 1
  • 2
  • 3

variable

所有cvx中用于目标函数和约束的变量都要在使用前用variable声明。

variabel a        % 变量为标量
variabel Y(4,5)   % 变量为矩阵
variabel Q(6,6,6) % 变量为多维数组
 
 
  • 1
  • 2
  • 3

variable声明也可以带有关键字,如complex,nonnegative,semidefinite,symmetric等等。

% 目前支持的关键字如下
banded(lb,ub)      diagonal           hankel             hermitian
skew_symmetric     symmetric          toeplitz           tridiagonal
lower_bidiagonal   lower_hessenberg   lower_triangular
upper_bidiagonal   upper_hankel       upper_hessenberg   upper_triangular
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

optimization fuction

目标函数非常直接,直接用minimize()和maximize()来写即可。约束以subject to起始。

% Example 1:
% minimize cTx
% subject to Ax⪯b
n = size(A,2);
cvx_begin
    variable x(n);
    dual variable y;
    minimize( c' * x );
    subject to
        y : A * x <= b;
cvx_end
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

或者

% Example 2:
% minimize y
% subject to (Ax−b,y)∈Qm
cvx_begin
    variables x(n) y;
    minimize( y );
    subject to
        { A*x-b, y } <In> lorentz(m);
cvx_end
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

expression(vs. variable)

当进入cvx_begin后,所有的expression和variable都为cvx类型,一个variable控制一个优化变量,不可以被赋值,重写。但expression是可以接受matlab的一般变量或者variable的赋值,甚至可以用来被放入minimize或者maximize,相当于临时存储变量。

Recommendation

1、关于cvx工具箱使用,戳http://cvxr.com/cvx/doc/CVX.pdf 。 
2、深入学习convex optimization理论算法,戳http://stanford.edu/~boyd/cvxbook/(Prof. Stephen P. Bold 的书《Covex Optimization》和教学slides available online)。

Contents

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐