[原] 快速上手:在R中使用CVXR

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) 方法进行检测。

组合优化案例

常用函数列表

向量操作

矩阵操作

参考资料

  • Fu, Anqi, Balasubramanian Narasimhan, and Stephen Boyd. 2017. “CVXR: An R Package for Disciplined Convex Optimization.” Working Paper.
  • Convex Programming Based Spectral Clustering
  • cvxr_portfolio-optimization
  • 知乎: 如何快速判断目标函数的凸性?
  • Convex Optimization – Boyd and Vandenberghe

你可能感兴趣的:(r,optimization)