CVX使用基础教程-结合官网教程翻译

CVX使用基础

cvx_begincvx_end

所有的CVX模型必须以命令cvx_begin开头且以命令cvx_end终止。所有变量声明,目标函数和约束都应介于两者之间。cvx_begin命令可能还包含一个或多个修饰符:

cvx_begin guiet
当模型在解答时阻止任何屏幕输出。

cvx_begin sdp
调用半正定规划模式.

cvx_begin gp
调用几何规划模式.

适当时可以组合使用这些修饰符。例如,cvx_begin sdp quiet调用SDP模式并关闭求解器的屏幕输出。

变量

所有的变量必须先使用variable或者variables命令声明后才可以在约束条件以及目标函数中使用。variable命令包括变量名、一个可选的列表维度以及一个或多个关键词,这些关键词提供有关变量内容或结构的附加信息。

变量可以是实数或者复数标量、向量、矩阵、n维数组,下面的命令生成了共326个变量:一个标量X,一个20*10的矩阵Y(包含200个标量变量),一个5*5*5的数组Z(包含125个标量变量)。

variable X
variable Y(20,10)
variable Z(5,5,5)

变量声明还可以包含一个或多个关键字,以表示变量的各种结构或条件。例如,要声明一个复杂变量,请使用complex关键字,如下所示:

variable w(50) complex

可以分别使用nonnegativesemidefinite关键字指定非负变量和对称/ Hermitian正半定(PSD)矩阵,如下所示。其中x是一个非负向量,z是一个实对称PSD矩阵,Q是一个复杂的Hermitian PSD矩阵。对于第三种情况hermitian semidefinite将是等效选择

variable x(10) nonnegative
variable Z(5,5) semidefinite
variable Q(5,5) complex semidefinite

对于MIDCPs,integerbinary关键词被用来声明整数和二进制变量,如下所示:

variable p(10) integer
variable q binary

可以使用多种关键字来帮助构造具有矩阵结构(比如对称性或bandedness)的变量,比如下面的代码段声明了Y是一个50*50的对称矩阵变量,Z是一个100*100的Hermitian Toeplitz矩阵(hermitian关键字同时指定矩阵是复杂的)。

variable Y(50,50) symmetric
variable Z(100,100) hermitian toeplitz

当前支持的结构关键字如下所示:

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

下划线实际上可以省略,因此,例如lower triangular也是可以接受的。这些关键字是不言自明的,以下几个是例外

banded(lb, ub)
the matrix is banded with a lower bandwidth lb and an upper bandwidth ub. If both lb and ub are zero, then a diagonal matrix results. ub can be omitted, in which case it is set equal to lb. For example, banded(1,1) (or banded(1)) is a tridiagonal matrix.

upper_hankel
The matrix is Hankel (i.e., constant along antidiagonals), and zero below the central antidiagonal, i.e., for i+j>n+1.

当提供多个关键字时,结果矩阵结构由交集确定。 例如,symmetrictridiagonal是有效组合。 就是说,当存在更合理的替代方法(在这种情况下为diagonal)时,CVX确实拒绝了symmetriclower_tridiagonal的组合。 此外,如果关键字完全冲突,从而使emph {no}非零矩阵满足所有关键字,则会导致错误。

矩阵特定的关键字也可以应用于n维数组:数组的每个二维切片都将具有指定的结构,如下所示构造了8个10*10的复杂Hermitian PSD矩阵,存储在R的二维切片中。

variable R(10,10,8) hermitian semidefinite

尽管变量语句非常灵活,但是它只能用于声明单个变量。如果要声明很多变量,可能会很不方便。因此提供了variables语句用于声明多个变量,如下所示:

variables x1 x2 x3 y1(10) y2(10,10,10);

variables命令的一个限制是它不能声明复数,整数或结构化变量。必须使用单变量命令一次声明一次。

目标函数

声明一个目标函数需要适当地使用minimize或者maximize函数。(为了使英语更好的用户受益,还提供了最小化和最大化同义词。)最小化调用中的目标函数必须是凸的; 最大化调用的目标函数必须是凹形的;比如:

minimize( norm( x, 1 ) )
maximize( geo_mean( x ) )

在CVX规范中最多可以声明一个目标函数,并且该函数必须具有标量值。

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

约束条件

CVX支持以下约束类型:

  • 等式==约束,左右两侧均为仿射表达式。
  • 小于等于<=约束,其中左侧表达式为凸形,而右侧表达式为凹形。
  • 大于等于>=约束,其中左侧表达式为凹形,而右侧表达式为凸形。

不等式符号~=从不使用在约束条件中,无论如何,这种约束很少是凸的。最新版本的CVX现在允许您将不等式连接在一起:比如l <= x <= u。先前的版本不支持这种操作。

请注意,单项等于=(它是一个赋值)和双等号==(它表示相等)之间的重要区别。

严格的不等式<和>也可以接受,但是它们与非严格不等式的解释相同。我们强烈建议不要使用它们,将来的CVX版本可能会将它们完全删除。这带你在Strict inequalities中有完整的讨论。

不等式和等式约束以元素方式应用,对应于Matlab中的行为。比如,AB是一个 m ∗ n m*n mn的矩阵,那么A<=B等价于A(i, j) <= B(i, j)。当一侧或另一侧为标量时,该值将被复制;例如,将A>0解释为A(i,j)> = 0

不等式的元素处理在 semidefinite programming mode下发生了变化。

CVX此外支持一组成员的约束,参照下面[一组成员](###Set membership)

函数

基本的CVX函数库包括各种凸,凹和仿射函数,它们接受CVX变量或表达式作为参数。许多常见的Matlab函数,例如sumtracediag, sqrt, maxmin,可根据需要重新实现以支持CVX;其他是Matlab中找不到的新函数。基本库中完整的函数列表可以在Reference guide中查看。同样也支持添加您自己的新函数,可参考Adding new functions to the atom library.

基本库中的一个函数示例是二次线性函数quad_over_lin
f : R n × R → R , f ( x , y ) = { x T x / y y > 0 + ∞ y ≤ 0 f:R^n \times R \rightarrow R, \quad f(x,y)= \begin{cases} x^Tx/y &y>0 \\ +\infty &y \leq 0 \end{cases} f:Rn×RR,f(x,y)={ xTx/y+

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值