gpt4 book ai didi

python - scipy 的方法 "COBYLA"的最小化函数是否接受边界?

转载 作者:太空狗 更新时间:2023-10-30 00:41:28 24 4
gpt4 key购买 nike

我在 scipy 的 optimize.minimize 函数(v.0.11 为 cygwin 构建)中使用算法 'COBYLA'。我观察到在这种情况下似乎没有使用参数 bounds 。例如,简单的例子:

from scipy.optimize import minimize

def f(x):
return -sum(x)

minimize(f, x0=1, method='COBYLA', bounds=(-2,2))

返回:

status: 2.0
nfev: 1000
maxcv: 0.0
success: False
fun: -1000.0
x: array(1000.0)
message: 'Maximum number of function evaluations has been exceeded.'

而不是 x 的预期 2

有没有人发现同样的问题?是否存在已知错误或文档错误?在 scipy 0.11 文档中,COBYLA 算法不排除此选项。事实上,函数 fmin_cobyla 没有 bounds 参数。感谢您的任何提示。

最佳答案

您可以以约束的形式制定边界

import scipy
#function to minimize
def f(x):
return -sum(x)
#initial values
initial_point=[1.,1.,1.]
#lower and upper bound for variables
bounds=[ [-2,2],[-1,1],[-3,3] ]

#construct the bounds in the form of constraints
cons = []
for factor in range(len(bounds)):
lower, upper = bounds[factor]
l = {'type': 'ineq',
'fun': lambda x, lb=lower, i=factor: x[i] - lb}
u = {'type': 'ineq',
'fun': lambda x, ub=upper, i=factor: ub - x[i]}
cons.append(l)
cons.append(u)

#similarly aditional constrains can be added

#run optimization
res = scipy.optimize.minimize(f,initial_point,constraints=cons,method='COBYLA')
#print result
print res

请注意,最小化函数会将设计变量提供给该函数。在这种情况下,给出了 3 个输入变量以及 3 个上限和下限。结果产生:

   fun: -6.0
maxcv: -0.0
message: 'Optimization terminated successfully.'
nfev: 21
status: 1
success: True
x: array([ 2., 1., 3.])

关于python - scipy 的方法 "COBYLA"的最小化函数是否接受边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12781622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com