DOs*_*ero 5 python mathematical-optimization ipopt gekko scipy-optimize
我一直在寻找可以直接处理矩阵变量的 Python 非线性约束优化包(用于处理不一定是凸的问题)。更具体地说,我正在处理优化问题,其中优化变量是矩阵,并且方程两边都是矩阵,存在等式约束。这种优化问题的一个例子是正交 Procrustes 问题 ( https://en.wikipedia.org/wiki/Orthogonal_Procrustes_problem )。
在我的搜索中,我遇到了 SciPy、pyOpt、Ipopt 和 GEKKO,但它们似乎都不直接支持矩阵变量(从我能找到的文档中)。我考虑过在必要时进行一些操作以将矩阵转换为向量,反之亦然(通过numpy.reshape或类似的方式),但我想尽可能避免这种选择。原因是我的问题相当大,不断重塑数组会严重损害优化过程的效率。
有什么建议么?
这里有一个关于矩阵的问题:
min(sum(sum(B))
s.t. AX=B
sum(sum(A))=5
sum(sum(X))=2
Run Code Online (Sandbox Code Playgroud)
它使用Python GEKKO 中的 m.Array 方法将A、X、 和B作为 2D 矩阵进行配置,但它们也可以是更高维的。
min(sum(sum(B))
s.t. AX=B
sum(sum(A))=5
sum(sum(X))=2
Run Code Online (Sandbox Code Playgroud)
您提到了非凸性,因此您可能需要使用多启动或其他方法在 Gekko 中找到全局解决方案,或者在不同的 Python 包中使用全局优化器。如果您的一些约束是线性方程或具有常数矩阵的二次目标,则axbor对象是有价值的。qobj您可以将它们用于大规模和稀疏系统。APMonitor和 Gekko 论文还回顾了其他一些用于优化的 Python 包。