高效灵活的数学优化建模语言: PyOptInterface

110 天前
 MetaGen

最近开发了一个新的数学优化建模语言 PyOptInterface ,性能超过了 Pyomo ,JuMP.jl 等一众开源的优化建模语言(相比 Pyomo 有 10 倍以上的性能提升),很适合大规模数学优化问题(线性规划、二次规划、混合整数线性规划等)的建模和求解。

欢迎对运筹优化领域感兴趣的 v 友试用。

项目源码: https://github.com/metab0t/PyOptInterface

项目文档地址: https://metab0t.github.io/PyOptInterface/

1235 次点击
所在节点    Python
7 条回复
beneo
110 天前
这么牛,一般人干不了这个
chizuo
110 天前
这个和 Gurobi 相比咋样呢?
MetaGen
110 天前
@chizuo

优化建模语言是负责建立模型的,是求解器接口的上层抽象,最终还是需要调用底层求解器(如 Gurobi 、COPT 、HiGHS 等)去求解。

不过在建模性能方面,PyOptInterface 也是比 Gurobi 自带的 Python 接口要快的。至于求解问题的速度,这个取决于调用的求解器,像 Gurobi 等商业求解器速度都比较快。
dayeye2006199
110 天前
你这性能,是创建问题实例的速度吗?
yenkn
110 天前
竟然也有做这个的 v 友,我之前也写过一个类似的库给 ipopt 做 codegen 然后 jit 编译成 python library ,用的是 sympy 来建模和自动微分,性能非常差,每次改完模型等很久,不过好在没有运行时的 overhead ,看到 op 这个工作简直相见恨晚;顺便提个小需求:可以把 codegen 结果生成独立的 C++ header/source 吗,这样 python 调试好的算法就可以直接部署了,也方便接入其他 C++ solver
MetaGen
110 天前
@dayeye2006199 是的,仅测量了创建模型的速度,因为求解问题的速度仅取决于求解器,和建模语言无关。
MetaGen
110 天前
@yenkn 碰上懂行的 v 友了,对于 ipopt 的支持我们也做了,只不过文档还没写,可以先看一下 https://github.com/metab0t/PyOptInterface/blob/master/tests/test_nlp.py 这个测试的例子。

我们的思路也是使用 jit 来生成计算函数值和计算导数的代码,使用了 CppAD 做自动求导+手写的 LLVM IR 或者 C 代码生成+llvmlite 或者 Tiny C Compiler 做代码即时编译。CppAD 的性能本身就很快,而且 PyOptInterface 使用了注册非线性函数+复用的方式,对于同样结构的非线性函数只需要编译一次,很适合具有大量相似非线性结构的优化问题。我猜测你提到的速度很慢一方面是 sympy 速度慢,另一方面是因为对大规模优化问题的所有约束直接自动微分+代码生成会有效率上的问题。

至于生成 C++ header/source 的需求,我没太明白意思,因为最终还是要调用求解器的底层 API ,没办法生成 dependency free 的代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1048113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX