MATLAB的fmincon函数的开源替代品吗?
是否可以使用MATLAB的fmincon函数的开源替代方案来进行约束线性优化?我正在重写一个使用Python / NumPy / SciPy的MATLAB程序,这是我没有找到与之等效的唯一函数。基于NumPy的解决方案将是理想的,但是任何语言都可以。
解决方案
回答
有一个名为SciLab的程序,它是MATLAB的克隆。
我根本没有使用过它,但是它是开源的,可能具有我们正在寻找的功能。
回答
GNU Octave是我们可能需要的另一个MATLAB克隆。
回答
我不知道它是否在那里,但是有一个名为Enthought的python发行版可能有我们想要的东西。它是专门为数据分析而设计的,具有60多个添加库。
回答
开源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
回答
问题凸出来了吗?线性的?非线性的?我同意SciPy.optimize可能会完成这项工作,但是fmincon是解决优化问题的一种火箭筒,如果将其限制在以下类别之一(会增加解决难度的水平),我们会更好有效率的)
线性程序(LP)
二次程序(QP)
凸二次约束二次程序(QCQP)
二阶圆锥程序(SOCP)
半定程序(SDP)
非线性凸问题
非凸问题
还存在组合性问题,例如混合整数线性程序(MILP),但我们没有提及任何种类的完整性约束,只需说它们属于另一类问题。
如果问题很凸显,那么CVXOpt软件包将对我们很有用。
如果问题不是凸出的,则需要在查找局部解决方案或者全局解决方案之间进行选择。许多凸求解器在非凸域中"排序"工作。要找到整体解的良好近似值,将需要某种形式的模拟退火或者遗传算法。要找到全局解决方案,将需要对所有本地解决方案进行枚举,或者需要采用组合策略,例如Branch and Bound。
回答
看看http://www.aemdesign.com/downloadfsqp.htm。
在那里,我们会发现提供与fmincon
相同功能的C代码。 (但是,使用其他算法。如果我们对详细信息感兴趣,可以阅读该手册。)
它是开源的,但不是在GPL下。
回答
对于Python中的数值优化,我们可以看一下OpenOpt求解器:
http://openopt.org/NLP
http://openopt.org/问题
回答
Python优化软件:
- OpenOpt http://openopt.org(我们可以根据需要选择基于numpy的功能,并由FuncDesigner自动区分)
- pyomo https://software.sandia.gov/trac/coopr/wiki/Package/pyomo
- CVXOPT http://abel.ee.ucla.edu/cvxopt/
- NLPy http://nlpy.sourceforge.net/