【问题标题】:Open source alternative to MATLAB's fmincon function? [closed]MATLAB 的 fmincon 函数的开源替代方案? [关闭]
【发布时间】:2010-09-08 04:10:30
【问题描述】:

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

【问题讨论】:

  • 你试过Jmodelica吗?它是除 OpenModelica 之外的 Modelica 语言的开源实现。我认为 Modelica 也有 Python 包装器。如果我没记错的话,Jmodelica 包附带了一个名为 Optimica 的优化工具。

标签: python matlab numpy numerical scientific-computing


【解决方案1】:

你的问题是凸的吗?线性?非线性?我同意 SciPy.optimize 可能会完成这项工作,但是 fmincon 是一种用于解决优化问题的火箭筒,如果您可以将其限制在以下类别之一中,您会更好(解决难度增加有效)

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

还有组合问题,例如混合整数线性规划 (MILP),但您没有提到任何类型的完整性约束,足以说明它们属于不同类别的问题。

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

如果您的问题不是凸的,您需要在寻找局部解决方案或全局解决方案之间做出选择。许多凸求解器“有点”在非凸域中工作。找到全局解决方案的良好近似值需要某种形式的模拟退火或遗传算法。找到全局解决方案将需要枚举所有本地解决方案或组合策略,例如 Branch and Bound。

【讨论】:

    【解决方案2】:

    Python优化软件:

    【讨论】:

    • 它实际上不是用 Python 编写的,但我会将这个工具添加到列表中,因为它有一个 Python API(称为GEKKO),可以让您从 Python 脚本(包括 IPOPT和 APPT)。有关详细信息,请参阅 APMonitor.com。它主要设计用于动态系统的控制和优化。
    【解决方案3】:

    开源 Python 包SciPy 有相当多的优化例程,包括一些用于约束多变量问题的例程(我相信 fmincon 就是这样)。安装 SciPy 后,在 Python 命令提示符处键入以下内容

    帮助(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 克隆,可能具有您需要的功能。

      【讨论】:

        【解决方案5】:

        对于 Python 中的数值优化,您可以查看 OpenOpt 求解器:

        http://openopt.org/NLP

        http://openopt.org/Problems

        【讨论】:

          【解决方案6】:

          我不知道它是否在其中,但有一个名为 Enthought 的 python 发行版可能包含您正在寻找的内容。它专为数据分析而设计,拥有 60 多个附加库。

          【讨论】:

          • 另外两个人添加的链接不确定他们的建议是否符合原始发布者的要求。为什么反对票。在这里发表评论会很好。
          【解决方案7】:

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

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

          它是开源的,但不在 GPL 下。

          【讨论】:

            【解决方案8】:

            有一个名为 SciLab 的程序是一个 MATLAB 克隆。

            我根本没用过,但是它是开源的,可能有你想要的功能。

            【讨论】:

              【解决方案9】:

              最新版本的Octave在优化包中实现了相当于Matlab fmincon函数的功能。

              https://octave.sourceforge.io/optim/function/fmincon.html

              【讨论】:

                【解决方案10】:

                Scilab 有一个 fmincon 实现(使用 IPOpt),现在定期更新:

                https://atoms.scilab.org/toolboxes/fmincon

                对于大规模优化,它优于 Matlab 的 fmincon。

                【讨论】:

                  猜你喜欢
                  • 2011-09-08
                  • 1970-01-01
                  • 2011-11-27
                  • 1970-01-01
                  • 2011-01-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-10-15
                  相关资源
                  最近更新 更多