CVXR 是斯坦福大学 CVX* 系列的一个凸优化求解器,面向 R 的封装接口,专注于凸优化问题的求解。
凸优化,因为它易于求解全局最优解的特性,在许多场景下都有应用,比如 投资组合优化
使用凸优化求解的前提是,问题的定义需要满足 DCP 规则(Disciplined convex programming)
DCP 规则
曲率 | 含义 |
---|---|
常数 | f(x) 独立于 x |
仿射 | f(θx+(1−θ)y)=θf(x)+(1−θ)f(y),∀x,y,θ∈[0,1] |
凸问题 | f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y),∀x,y,θ∈[0,1] |
凹问题 | f(θx+(1−θ)y)≥θf(x)+(1−θ)f(y),∀x,y,θ∈[0,1] |
未知 | 无法确定曲率 |
DCP规则要求问题目标具有以下两种形式之一:
- 最小化(凸)
- 最大化(凹)
DCP规则下唯一有效的约束是
- 仿射==仿射
- 凸<=凹
- 凹> =凸
DCP规则下的四则运算:
基本运算符号包含:+
, -
, *
, %*%
, /
。
- 加减法:如果 A + B 为凸 则 A、B 各自为凸。
- 乘法:A * B 和 A%*%B 其中 A 或者 B 必须为 常数
- 出发:A/B 中的 B 必须是标量
对于目标函数和约束条件的 DCP 规则检查可以通过 is_dcp(object)
方法进行检测。
组合优化案例
常用函数列表
向量操作
矩阵操作
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。