使用trust-ncg方法最小化函数建议值大于max_trust_radius

时间:2017-05-30 05:50:02

标签: python scipy scientific-computing

到目前为止,我理解使用方法Trust-ncg的最小化函数,"特定方法"参数" max_trust_radius"是新步骤优化的最大值。 但是,我经历了一种奇怪的行为。 我在博士学位数据中工作,我有一个调用最小化函数的代码(使用信任ncg方法) 传递参数

{
   'initial_trust_radius':0.1,
   'max_trust_radius':1,
   'eta':0.15,
   'gtol':1e-5,
   'disp': True
} 

我调用最小化函数:

res = minimize(bbox, x0, method='trust-ncg',jac=bbox_der, hess=bbox_hess,options=opt_par) 

其中

  • bbox是评估目标函数的函数
  • x0是最初的猜测
  • bbox_der是渐变函数
  • bbox_hess hessian function
  • opt_par是上面带有参数的字典。

Bbox调用模拟代码并获取数据。它有效:最小化来回,提出新值,bbox调用模拟。

一切顺利,直到我遇到一个奇怪的问题。 " x"向量包含8个值。我意识到其中一个迭代,最后一个值大于1。 根据max_trust_radius,我认为它应该小于1,但它是1.0621612802208713e + 00 该问题导致问题,因为bbox无法接收大于1的值,因为它调用模拟程序并且存在一个约束,它无法接收1或大于1。

我找到了scipy代码并试图查看我是否能够找到错误或错误但我不是。

我主要担心的是:

  • 我的理解是scipy最小化代码中存在一个错误,因为新值大于max_trust_radius。

  • 如何操作或控制值以避免值大于1?

  • 您是否建议调查此问题?

1 个答案:

答案 0 :(得分:0)

max_trust_radius控制您可以采取的步骤的大小:

max_trust_radius : float
                   Maximum value of the trust-region radius.
                   No steps that are longer than this value will be proposed.

由于你很可能在最小化期间​​采取了很多步骤,每一步都可以达到1长,所以你(假设||x0||=0)以{{||x|| > 1结束并不奇怪1}}。

如果您的问题严格受限,那么您需要应用支持参数边界的优化算法。 对于scipy.optimize.minimizeL-BFGS-BTNCSLSQP方法似乎支持bounds=关键字。