到目前为止,我理解使用方法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?
您是否建议调查此问题?
答案 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.minimize
仅L-BFGS-B
,TNC
和SLSQP
方法似乎支持bounds=
关键字。