使用Hessian矩阵(scipy)进行有界优化

时间:2015-05-28 07:47:12

标签: python numpy optimization scipy

我正在尝试优化少量变量的函数(从2到10)。我想要做的是计算有界超立方体上函数的最小值

[0,1] x [0,1] x ... x [0,1]

函数,其梯度和粗体的计算相对简单,快速和准确。

现在,我的问题是:

使用scipy,我可以使用scipy.optimize.minimize(..., method='Newton-CG')scipy.optimize.minimize(..., method='TNC')来计算函数的最小值,但是:

  • 第一种方法使用Hessian矩阵,但我无法设置我正在优化的变量的界限
  • 第二种方法允许我在变量上设置边界,但该方法不使用Hessian。

是否有任何方法可以同时使用这两种方法?

2 个答案:

答案 0 :(得分:1)

以下是两种选择:

Mystic,一个框架,通过使用外部约束(我认为,拉格朗日乘数)来实现约束优化。该软件包使用scipy.optimize,因此应该可以使用Scipy的方法和其他约束。

Ipopt及其python绑定PyIpoptCyIpopt。您可以查看openopt

通常为曲线拟合而开发,lmfit提供了添加外部约束的可能性。它包括scipy的大多数求解器。

答案 1 :(得分:1)

l-bfgs-b进行有限优化。像任何准牛顿方法一样,它近似于Hessian。但这通常比使用真正的Hessian更好。