我有一个需要优化的一维函数。我的初始值为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/

10-12 23:24