你的问题是凸优化问题吗?线性问题?非线性问题?我同意SciPy.optimize可能能够解决这个问题,但fmincon是一种用于解决优化问题的重型武器,如果你能将其限制在以下某一类别中(按照难度递增的顺序),那么你会更好地解决问题:
还有一些组合问题,例如混合整数线性规划(MILP),但你没有提到任何积分约束,可以说它们属于不同类别的问题。
如果你的问题是凸优化问题,CVXOpt包将对你非常有用。
如果你的问题不是凸优化问题,你需要在找到局部解和全局解之间做出选择。许多凸优化求解器“有点”能够在非凸域中工作。要找到全局解的良好近似值,需要使用模拟退火或遗传算法等形式。要找到全局解,需要枚举所有局部解或使用分支定界等组合策略。
Python优化软件:
OpenOpt http://openopt.org (这个软件基于numpy,同时使用FuncDesigner进行自动微分)
Pyomo https://software.sandia.gov/trac/coopr/wiki/Package/pyomo
开源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
请查看http://www.aemdesign.com/downloadfsqp.htm。
在那里,您将找到提供与fmincon
相同功能的C代码。(但是,使用不同的算法。如果您对细节感兴趣,可以阅读手册。)
它是开源的,但不属于GPL。
我不确定它是否在那里,但有一个叫做Enthought的 Python 发行版可能有你要找的内容。它专门为数据分析而设计,拥有超过 60 个其他库。
Scilab现在有一个使用IPOpt的fmincon实现,而且还经常更新:
https://atoms.scilab.org/toolboxes/fmincon
对于大规模优化,它的表现优于Matlab的fmincon。