fmincon
MATLAB 的约束线性优化函数是否有开源替代方案?我正在重写一个 MATLAB 程序以使用 Python / NumPy / SciPy,这是我唯一没有找到与之等效的函数。基于 NumPy 的解决方案将是理想的,但任何语言都可以。
10 回答
你的问题是凸的吗?线性?非线性?我同意 SciPy.optimize 可能会完成这项工作,但是 fmincon 是一种用于解决优化问题的火箭筒,如果您可以将其限制在以下类别之一中,您会更好(解决难度增加有效率的)
- 线性规划 (LP)
- 二次规划 (QP)
- 凸二次约束二次规划 (QCQP)
- 二阶锥程序 (SOCP)
- 半定程序 (SDP)
- 非线性凸问题
- 非凸问题
还有组合问题,例如混合整数线性规划 (MILP),但您没有提到任何类型的完整性约束,足以说明它们属于不同类别的问题。
如果你的问题是凸的,CVXOpt 包对你很有用。
如果您的问题不是凸的,您需要在寻找局部解决方案或全局解决方案之间做出选择。许多凸求解器“有点”在非凸域中工作。找到全局解决方案的良好近似需要某种形式的模拟退火或遗传算法。找到全局解决方案将需要列举所有本地解决方案或组合策略,例如分支定界。
Python优化软件:
OpenOpt http://openopt.org (这个是基于 numpy 的,由 FuncDesigner 自动区分)
Pyomo https://software.sandia.gov/trac/coopr/wiki/Package/pyomo
开源 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
GNU Octave是另一个 MATLAB 克隆,它可能具有您需要的功能。
有一个名为SciLab的程序是一个 MATLAB 克隆。
我根本没有使用它,但它是开源的,可能具有您正在寻找的功能。
我不知道它是否在那里,但是有一个名为Enthought的 python 发行版可能有你正在寻找的东西。它专为数据分析而设计,拥有 60 多个附加库。
看看http://www.aemdesign.com/downloadfsqp.htm。
在那里,您将找到提供与fmincon
. (但是,使用不同的算法。如果您对细节感兴趣,可以阅读手册。)
它是开源的,但不在 GPL 下。
最新版本的 Octave 在优化包中实现了与 Matlab fmincon 函数等效的功能。
Scilab 有一个 fmincon 的实现(使用 IPOpt),现在定期更新:
https://atoms.scilab.org/toolboxes/fmincon
对于大规模优化,它优于 Matlab 的 fmincon。