最近开发了一个新的数学优化建模语言 PyOptInterface ,性能超过了 Pyomo ,JuMP.jl 等一众开源的优化建模语言(相比 Pyomo 有 10 倍以上的性能提升),很适合大规模数学优化问题(线性规划、二次规划、混合整数线性规划等)的建模和求解。
欢迎对运筹优化领域感兴趣的 v 友试用。
1
beneo 148 天前
这么牛,一般人干不了这个
|
2
chizuo 148 天前
这个和 Gurobi 相比咋样呢?
|
3
MetaGen OP @chizuo
优化建模语言是负责建立模型的,是求解器接口的上层抽象,最终还是需要调用底层求解器(如 Gurobi 、COPT 、HiGHS 等)去求解。 不过在建模性能方面,PyOptInterface 也是比 Gurobi 自带的 Python 接口要快的。至于求解问题的速度,这个取决于调用的求解器,像 Gurobi 等商业求解器速度都比较快。 |
4
dayeye2006199 148 天前 via Android
你这性能,是创建问题实例的速度吗?
|
5
yenkn 148 天前
竟然也有做这个的 v 友,我之前也写过一个类似的库给 ipopt 做 codegen 然后 jit 编译成 python library ,用的是 sympy 来建模和自动微分,性能非常差,每次改完模型等很久,不过好在没有运行时的 overhead ,看到 op 这个工作简直相见恨晚;顺便提个小需求:可以把 codegen 结果生成独立的 C++ header/source 吗,这样 python 调试好的算法就可以直接部署了,也方便接入其他 C++ solver
|
6
MetaGen OP @dayeye2006199 是的,仅测量了创建模型的速度,因为求解问题的速度仅取决于求解器,和建模语言无关。
|
7
MetaGen OP @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 的代码。 |