我完全意识到凸优化包,如线性代数包,应该是你使用的东西,而不是实现。但是,出于纯粹的教育目的——是否有任何好的资源——关于如何实现凸优化包的链接/书籍?(比如具有二次约束的二次程序?)
谢谢!
我完全意识到凸优化包,如线性代数包,应该是你使用的东西,而不是实现。但是,出于纯粹的教育目的——是否有任何好的资源——关于如何实现凸优化包的链接/书籍?(比如具有二次约束的二次程序?)
谢谢!
任何关于凸优化的好教科书都会有你正在寻找的东西。一个这样的免费但很好的资源在这里:CO Book。请注意,正如您正确提到的,实现本书中提到的算法肯定需要线性代数库,您可能会也可能不会选择实现它。
Optima中有一篇相关文章,这是数学优化协会的通讯,名为“Rapid Development of an Open-source Minlp Solver with COIN-OR”。它描述了使用一些coin-or包构建非线性求解器。大多数硬币或东西都是用 C++ 编写的。
对于 python,您可以考虑使用numpy中可用的线性代数数据结构和算法。相关的scipy包有一些非线性优化器,但没有专门针对凸优化的。
最后,您可以查看 Boyd 的 GPL 的基于 python 的凸优化器cvxopt以了解您面临的任务类型。
这取决于你要去什么,但你应该去教授。在你现在或你毕业的大学的数学优化中,你应该直接问他。
我为几个简化为凸优化的问题实现了求解器(http://cs229.stanford.edu/proj2017/) - cvx4ml 比 SkLearn 的类似解决方案运行得更快,我通过了斯蒂芬博伊德的 24 小时考试,所以我可以提供建议您可以做什么并描述您非常粗略的计划:
所以你要创建自己的包我会写一步一步的说明:
为非负正交锥实现自定义简单圆锥求解器。这取决于你要做什么。6.a - 编写基于内点法的求解器。6.b - 编写支持分布式优化的求解器 6.c - 编写基于一些投影次梯度方法的求解器。
改进它以支持其他锥体
如果你想达到 CVXPY 的水平,那么
ps 如果您对其中的某些主题感到草率,那么:
阅读写教授的线性代数书。从你的大学
在 youtube 中查看带有 S.Boyd 的 EE263、带有 S.Boyd 的 EE364A、带有 S.Boyd 的 EE364B。