有哪些简便好用的解凸优化的工具箱或者包?

比如说现在要求解一个LASSO回归问题,有没有可以直接输入优化的目标式子就能够解出来的工具箱呢?比方说直接输入min(sum((y-Ax)^2)+la…
关注者
173
被浏览
135,054

5 个回答

我简单介绍几个凸优化的工具包:

  1. Welcome to CVXPY 。cvxpy是Python的一个包,例子比较简单,上手很容易,直接可以拿来模仿着求解最优化问题。
  2. Home - CVXOPT 。cvxopt是Python的一个包,安装依赖稍多,上手稍微麻烦一点,不过功能很强大,而且有专门的文档介绍。具体怎么使用可以参考: [量化学堂-策略开发]使用cvxopt包实现马科维茨投资组合优化:以一个股票策略为例
  3. Python scipy.optimize.minimize Examples 。 Scipy是Python科学计算的一个常用包,里面的optimize方法可以求解一些简单的线性优化问题,遇到非线性问题求解比较费劲。
  4. Python Optimization Package 。APM是一个优化求解器。 可以解决线性规划,二次规划,整数规划,非线性优化,动态非线性方程组,多目标优化等问题。 功能比较强大。
  5. Debian Neuroscience Package Repository 。 Python中开发的数值优化框架,它具有简单和统一的OpenOpt语法。 功能也是比较强大。
  6. stanford.edu/~boyd/cvx/ .一款用于凸优化的matlab软件
  7. CVXGEN: Code Generation for Convex Optimization 快速求解小型的优化问题。 以最小的努力,将数学问题描述转化为高速求解器。

BigQuant - 人工智能量化投资平台

关于「简便好用的解凸优化的工具箱或者包」,我理解即可以用比较自然的数学语言定义目标函数、约束从而定义要求解的优化问题。

当然我想同时题主也不想过多损失计算上的「性能」。

结合这两点,本回答下还没有提到的,有两个非常好的工具箱/包。

一个是 YALMIP ,它确实可以作为「工具箱」在Matlab中使用,可以一个YALMIP模型方便调用所有市面上常见的商用和非商用求解器,包括凸优化、整数规划、非线性规划等等。

另外一个是 JuMP ,这个「包」基于Julia语言,相比YALMIP性能上更加接近原生的求解器,且主要是用宏来定义变量、约束,更符合数学语言的自然写法。我曾经在知乎上安利过并给出过多个实例(见下,不过一些语法是Julia 1.0版本之前的,现在要参考的话语法上有一些改动)

覃含章:JuMP: 用Julia进行优化建模及求解

如果是Python用户,想在Python里调用求解器主要可以尝试 Pyomo

Pyomo可以将AMPL模型导入到各类求解器当中,不过从「简便好用」的方面和「性能」方面来说都不是特别好,如果问题规模不是很大,问题不是很复杂的话可以用着试试,不然我可能没有前两个那么推荐。

其它答主也提到CVX是一个比较通用的包,在Matlab,Python,Julia等语言中都有wrapper,它特化于求解一般的凸优化问题(如果你是特定的线性规划/整数规划问题,更应该用特定的商用求解器去求解)。