CVX入门

您所在的位置:网站首页 凸优化工具箱 CVX入门

CVX入门

2024-01-20 16:31| 来源: 网络整理| 查看: 265

CVX是一个基于Matlab的凸优化建模系统。CVX将Matlab转换为建模语言,允许使用标准Matlab表达式语法指定约束和目标。

软件包下载,安装以及使用详见:https://blog.csdn.net/weixin_40148024/article/details/91879675

在此大致说一下: CVX工具包官方网站:http://cvxr.com/cvx/ 关于CVX的介绍:http://web.cvxr.com/cvx/doc/intro.html 工具包安装网址: http://cvxr.com/cvx/doc/install.html 1.点开网址 http://cvxr.com/cvx/download 下载 .zip 或者 .tar.gz 文件 2.下载后对压缩包进行解压,将cvx文件夹拷贝至你习惯使用的目录下。 3.启动Matlab,在Current Folder窗口中打开cvx文件夹,然后在Command Window中输入cvx_setup。 这样就安装成功啦! Remark:需要设置路径Set Path(Add with Subfolders),这一步是将cvx工具箱所在文件夹添加到MATLAB工作搜索目录。 File-Set Path-Add with Subfolders

**

CVX-基础

** CVX的介绍主要是记录CVX的使用文件:http://web.cvxr.com/cvx/doc/intro.html#what-is-disciplined-convex-programming 中的一些语法,以待将来查阅,其安装以及简单的案例可以在文件A quick start中找到,很简单,这里就不赘述了。

首先,所有CVX模型都必须以命令cvx_begin开头,并以命令cvx_end结束。 所有的变量声明,目标函数和约束都应该介于两者之间。 cvx_begin命令可能包含更多的修饰符: cvx_begin quiet 防止模型在解算时产生任何屏幕输出。 cvx_begin sdp 调用半确定编程模式。 cvx_begin gp 调用几何编程模式。 这些修饰剂可以在适当的时候结合使用; 例如,cvx_begin sdp quiet会调用SDP模式并使求解器输出无效。

变量 CVX的变量可以是实数或复数标量,向量,矩阵或n维数组。例如

1.variable X 2.variable Y(20,10) 3.variable Z(5,5,5) 就分别定义了一个标量X,一个20×10的矩阵Y(包含200个标量变量)和一个5×5×5的数组Z(包含125个标量变量)。 变量声明还可以包含一个或多个关键字来表示变量上的各种结构或条件。 例如,要声明一个复杂的变量,可以使用复杂的关键字:

1.variable w(50) complex 非负变量和对称/埃尔米特半正定(PSD)矩阵可分别用非负半定义关键字指定: 1.variable x(10) nonnegative 2.variable Z(5,5) semidefinite 3.variable Q(5,5) complex semidefinite 对于MIDCP,整数和二进制关键字分别用于声明整数和二进制变量: 1.variable p(10) integer 2.variable q binary 各种关键字可用于帮助构造具有矩阵结构的变量,例如对称性或带状(关于带状矩阵可参考http://blog.sina.com.cn/s/blog_54f1857701000a33.html)。 例如,下面代码段就声明Y是一个实的50×5050×50对称矩阵变量,Z a 100×100100×100 Hermitian Toeplitz矩阵变量。 (注意,hermitian关键字也指定矩阵是复杂的。)

1.variable Y(50,50) symmetric 2.variable Z(100,100) hermitian toeplitz 当前支持的结构关键字是: 1.banded(lb,ub) diagonal hankel hermitian 2.skew_symmetric symmetric toeplitz tridiagonal 3.lower_bidiagonal lower_hessenberg lower_triangular 4.upper_bidiagonal upper_hankel upper_hessenberg upper_triangular 下划线实际上可以省略,lower triangular这种写法也可以。 这些关键字大部分意义都很明确,但也有一些例外: 1.banded(lb,ub) 该矩阵以较低的带宽lb和较高的带宽ub进行带限。 如果lb和ub均为零,则产生对角矩阵。 ub可以省略,在这种情况下,它被设置为等于lb.例如,带状(1,1)(或带状(1))是三对角矩阵。

1.upper_hankel 矩阵是Hankel,并且在中心对角线以下,即对于i + j> n + 1为零。 当提供多个关键字时,得到的矩阵结构由交集确定。 例如,对称三角对称是一个有效的组合。 也就是说,在这种情况下,当一个更合理的选择存在时,CVX确实拒绝了对称的lower_triangular这样的组合。 而且,如果关键字完全冲突,那么将会导致满足所有关键字的emph {no}非零矩阵。 特定于矩阵的关键字也可以应用于n维数组:数组中的每个二维“切片”都被赋予所述的结构。 例如,声明

1.variable R(10,10,8) hermitian semidefinite 构造了8个10×10复Hermitian PSD矩阵,存储在R的2-D切片中(这里也许我理解有误)。

CVX变量语句非常灵活,单它只能用于声明单个变量,如果要声明很多变量,这可能不方便。 出于这个原因,提供了变量语句,允许您声明多个变量;即, 1.variables x1 x2 x3 y1(10) y2(10,10,10); 变量命令的一个限制是它不能声明复杂的,整型的或结构化的变量。 这些必须使用单数变量命令一次一个地声明。

目标函数 声明一个目标函数需要使用最小化函数或最大化函数。调用中最小化的目标函数必须是凸的,最大化的目标函数必须是凹的; 例如:

1.minimize( norm( x, 1 ) )maximize( geo_mean( x ) ) 至多有一个目标函数可以在CVX规范中声明,并且它必须有一个标量值。

如果没有指定目标函数,则该问题被解释为可行性问题,这与将目标函数设置为零来执行最小化相同。 在这种情况下,如果找到可行点,则cvx_optval或者是0,如果约束不可行,则为+ Inf。

约束 CVX支持以下约束类型:

等号约束,其中左侧和右侧都是仿射表达式。 小于 =约束,其中左边的表达式是凹的,右边的表达式是凸的。 不等于运算符〜=可能永远不能用在约束中; 在任何情况下,这样的约束都很少凸起。 CVX的最新版本现在允许不等链接在一起; 例如1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3