如何实现凸优化包?

时间:2010-07-08 00:37:28

标签: convex-optimization

我完全意识到Convex Optimization软件包,比如Linear Algebra软件包,应该是你使用的东西,而不是实现。但是,对于纯粹的教育目的 - 是否有任何好的资源 - 链接/书籍如何实现凸优化包? (对于具有二次约束的二次规划?)

谢谢!

3 个答案:

答案 0 :(得分:2)

任何关于凸优化的好教科书都会有你想要的东西。这里有一个免费但很好的资源:CO Book。请注意,正如您正确提到的,实现本书中提到的算法肯定需要线性代数库,您可能也可能不会选择实现这些库。

答案 1 :(得分:1)

article中有一个相关的Optimamathematical optimization society的简报,称为“使用COIN-OR开源Minlp解算器的快速开发”。它描述了使用一些coin-or包构建非线性求解器。大多数硬币或东西都是用c ++编写的。

对于python,您可以考虑使用numpy中提供的线性代数数据结构和算法。相关的scipy包具有一些非线性优化器,但没有特定于凸优化。

最后,您可以查看Boyd的GPL基于python的凸优化器cvxopt,以了解您之前的任务类型。

答案 2 :(得分:0)

这取决于你的目标,,但你应该去教授。你大学的数学优化,你现在或你毕业,你应该直接问他

我实现了几个问题的求解器,简化为凸优化(http://cs229.stanford.edu/proj2017/) - cvx4ml,它比SkLearn的类似解决方案更快,我通过24小时考试到Stephen Boyd,所以我可以给出建议你可以做什么并描述你的粗略计划:

所以你要创建自己的包我会写一步一步的说明:

  1. 您应该使用密集矩阵/向量创建库
  2. 您应该使用稀疏矩阵/向量
  3. 创建工作库
  4. 实施大约20种不同的算法来求解线性方程组(因为根据情况你需要不同的方法)
  5. 介绍如何在编程语言或您创建的系统中描述约束,函数域等的概念。
  6. 实施几个规范和双规范评估,一些分解技术,如LU,Cholesky。
  7. 为非负正牙锥实施自定义简单圆锥解算器。这取决于你要去做什么。 6.a - 基于内点法的写求解器。 6.b - 写支持分布式优化的求解器 6.c - 基于一些预测的次梯度方法写解算器。

  8. 改进它以支持其他视锥细胞

  9. 使用步骤“5”
  10. 增强您的求解程序

    如果你想达到CVXPY的水平,那么

    1. 实现解析程序描述,如CVXPY do,并将问题转换为圆锥形。
    2. P.S。如果您对某些主题感到邋,,那么:

      • 阅读编写教授的线性代数书。来自你的大学

      • 使用S.Bo​​yd,使用S.Bo​​yd的EE364A,使用S.Bo​​yd的EE364B,在youtube中查看EE263。