3

我完全意识到凸优化包,如线性代数包,应该是你使用的东西,而不是实现。但是,出于纯粹的教育目的——是否有任何好的资源——关于如何实现凸优化包的链接/书籍?(比如具有二次约束的二次程序?)

谢谢!

4

3 回答 3

2

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

于 2010-07-08T04:54:02.820 回答
1

Optima中有一篇相关文章,这是数学优化协会的通讯,名为“Rapid Development of an Open-source Minlp Solver with COIN-OR”。它描述了使用一些coin-or包构建非线性求解器。大多数硬币或东西都是用 C++ 编写的。

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

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

于 2011-09-24T02:33:32.973 回答
0

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

我为几个简化为凸优化的问题实现了求解器(http://cs229.stanford.edu/proj2017/) - cvx4ml 比 SkLearn 的类似解决方案运行得更快,我通过了斯蒂芬博伊德的 24 小时考试,所以我可以提供建议您可以做什么并描述您非常粗略的计划:

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

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

  7. 改进它以支持其他锥体

  8. 通过步骤“5”增强您的求解器

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

  1. 像 CVXPY 一样实现程序描述的解析,并将问题转换为圆锥形式。

ps 如果您对其中的某些主题感到草率,那么:

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

  • 在 youtube 中查看带有 S.Boyd 的 EE263、带有 S.Boyd 的 EE364A、带有 S.Boyd 的 EE364B。

于 2018-02-12T19:19:44.227 回答