几何程序(GP)是特殊的数学程序,可以使用变量的变化将其转换为凸形式。GP 的凸形式可以表示为 DCP,但 CVX 还提供了一种特殊模式,允许GP以其原生形式指定。CVX将自动执行必要的转换,计算数值解,并将结果转换回原始问题。
要使用 GP 模式,您必须使用 cvx_begin gp 或 cvx_begin GP 命令开始 CVX 规范,而不是简单地cvx_begin。例如,在示例库中gp/max_volume_box.m 找到以下代码,该代码确定受各种面积和比率约束的最大体积箱子:
cvx_begin gp
variables w h d
maximize( w * h * d )
subject to
2*(h*w+h*d) <= Awall;
w*d <= Afloor;
alpha <= h/w >= beta;
gamma <= d/w <= delta;
cvx_end
如示例所示,CVX 支持使用加法、乘法、除法(如果适用)和幂来构造单项式和多项式。此外,CVX支持广义几何程序(GGP)的构造,允许使用广义多项式。有关广义几何程序参考教程。
我们强烈建议使用 Mosek 9.0 或更高版本(包括 CVX 2.2 及更高版本附带的版本)来求解几何程序。它对指数锥的原生支持确保了最佳的可靠性、准确性和速度。对于其他求解器,CVX 必须使用逐次逼近法中描述的逐次逼近技术。这意味着求解GP可能很慢,但对于中小型问题,该方法效果很好。
在本节的其余部分中,我们将介绍在 GP 模式下构造模型时应用的特定规则。
顶级规则
CVX 支持三种类型的几何程序:
最小化和最大化之间的不对称性-特别是后者只允许单项式目标-是GP和GGP不可避免的现象。
约束
在几何程序中可以指定三种类型的约束:
与DCP一样,不允许使用不相等的约束;虽然严格的不等式<,>得到支持,但它们被视为非严格的不等式,因此应避免。
表达式
广义几何编程的基本构建成分是单项式、多项式和广义多项式。有效的单项式是
有效的多项式是
有效的广义多项式是
完全可以在 CVX 中创建和操作单项式、多项式和/或广义多项式数组。例如,两个单项式矩阵的乘积产生一个矩阵,其条目是多项式(或特殊情况下是单项式)。



