MATLAB的fmincon函数的开源替代品是什么?

37

是否有一个开源的替代MATLAB的 fmincon 函数用于约束线性优化?我正在重写一个MATLAB程序,使用Python / NumPy / SciPy,但这是唯一找不到等效函数的地方。基于NumPy的解决方案最理想,但任何语言都可以。


你尝试过Jmodelica吗? 它是一种Modelica语言的开源实现,除了OpenModelica之外。 我认为Modelica也有Python包装器。 如果我没记错的话,Jmodelica包附带一个优化工具叫做Optimica。 - Foad S. Farimani
10个回答

33

你的问题是凸优化问题吗?线性问题?非线性问题?我同意SciPy.optimize可能能够解决这个问题,但fmincon是一种用于解决优化问题的重型武器,如果你能将其限制在以下某一类别中(按照难度递增的顺序),那么你会更好地解决问题:

  • 线性规划(LP)
  • 二次规划(QP)
  • 凸约束二次规划(QCQP)
  • 二阶锥规划(SOCP)
  • 半定规划(SDP)
  • 非线性凸问题
  • 非凸问题

还有一些组合问题,例如混合整数线性规划(MILP),但你没有提到任何积分约束,可以说它们属于不同类别的问题。

如果你的问题是凸优化问题,CVXOpt包将对你非常有用。

如果你的问题不是凸优化问题,你需要在找到局部解和全局解之间做出选择。许多凸优化求解器“有点”能够在非凸域中工作。要找到全局解的良好近似值,需要使用模拟退火或遗传算法等形式。要找到全局解,需要枚举所有局部解或使用分支定界等组合策略。


17

1
这个工具实际上不是用Python编写的,但我会将其添加到列表中,因为它有一个名为GEKKO的Python API,可以让您从Python脚本中访问一些非常强大的求解器(包括IPOPT和APOPT)。请参阅APMonitor.com获取详细信息。它主要设计用于控制和优化动态系统。 - Bill

14

开源Python软件包SciPy具有相当大的优化函数集,其中包括一些用于带约束多元问题的函数(我认为这就是fmincon所做的)。安装了SciPy后,在Python命令提示符下输入以下内容:

help(scipy.optimize)

生成的文档内容广泛,包括我认为可能对您有用的以下内容。

   Constrained Optimizers (multivariate)

   fmin_l_bfgs_b -- Zhu, Byrd, and Nocedal's L-BFGS-B constrained optimizer
                      (if you use this please quote their papers -- see help)

   fmin_tnc      -- Truncated Newton Code originally written by Stephen Nash and
                      adapted to C by Jean-Sebastien Roy.

   fmin_cobyla   -- Constrained Optimization BY Linear Approximation

4

GNU Octave 是另一个类似于 MATLAB 的克隆版本,可能有你需要的功能。


3

1

请查看http://www.aemdesign.com/downloadfsqp.htm

在那里,您将找到提供与fmincon相同功能的C代码。(但是,使用不同的算法。如果您对细节感兴趣,可以阅读手册。)

它是开源的,但不属于GPL。


1

有一个叫做SciLab的程序,它是MATLAB的克隆版。

我自己没有使用过它,但它是开源的,也许有你正在寻找的函数。


1

我不确定它是否在那里,但有一个叫做Enthought的 Python 发行版可能有你要找的内容。它专门为数据分析而设计,拥有超过 60 个其他库。


1
另外两个人添加了链接,但不确定他们的建议是否符合原帖作者的要求。为什么会有负评?在这里留下一条评论会很好。 - wcm

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接