我有一个需要优化的一维函数。我的初始值为20,界限为(0,50)
x0=[20]
bounds=(0,50)
sol1=minimize(f,x0,method="SLSQP",bounds=bounds)
但是,这会产生IndexError。SLSQP Error: the length of bounds is not compatible with that of x0.
我在这里犯什么错误?
最佳答案
正如评论中指出的那样,您可以将边界放入列表中。一个最小的示例如下所示:
from scipy.optimize import minimize
def f(x):
return (x - 3) ** 2
x0 = [10]
bounds = [(0, 50)]
res = minimize(f, x0, method='SLSQP', bounds=bounds)
然后
res.x
将给出预期的array([3.])
。正如@sascha在评论中指出的那样,对于此类问题,您也可以使用
minimize_scalar
:只需将上面的导入更改为
from scipy.optimize import minimize_scalar
和使用
res2 = minimize_scalar(f, method='bounded', bounds=bounds)
然后
res2.x
返回3.0
只需将上面的
f
替换为您的实际功能即可。关于python - 为一维优化问题指定边界SciPy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53208330/