2010-07-08 44 views
3

我完全认识到像线性代数包这样的凸包优化包应该是你使用的东西,而不是实现。然而,纯粹的教育目的 - 是否有任何良好的资源 - 如何实现凸优化包的链接/书? (像二次约束二次方程?)如何实现凸优化包?

谢谢!

回答

2

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

1

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

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

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

0

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

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

所以,你要创建自己的包,我会写一步一步的指示:

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

  7. 提高它支持筒等

  8. 步骤 “5”

增强你解算器,如果你想在CVXPY的水平,那么

  • 实现像CVXPY那样的程序描述解析并将问题转换为圆锥形式。
  • p.s.如果你对这个话题感到sl then不安,那么:

    • 阅读线性代数书,写了prof。从你的大学

    • 在YouTube上看到EE263与S.Boyd,EE364A与S.Boyd,EE364B与S.Boyd。