gpt4 book ai didi

python - 使用 scipy.optimize.brute 在给定的时间间隔内最小化一个函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:31 36 4
gpt4 key购买 nike

我试图在给定的时间间隔内最小化一个函数;在我的例子中,间隔是 [-pi/2, pi/2]

这是我在脚本中写的:

ranges = slice(-pi/2, pi/2, pi/200)
res = optimize.brute(g, (ranges,))

def g(x):
# z and a are global
(-(z+1) * (((a/4) * (3*cos(x/3) + cos(3*x/2)) +
(b/4) * (-3*sin(x/2)-3*sin(3*x/2)))**2 +
((a/4‌​) * (sin(x/3) + sin(3*x/2)) + (b/4)*
(cos(x/2) + 3*cos(3*x/2)))**2) + 4*(c*cos(x/2))**2)

结果res

array([-3.14159265])

我在绘制我的解决方案时遇到的问题是,一些最小化的解决方案在区间 [-pi/2, pi/2] 之外。有帮助吗?

最佳答案

“问题”出在默认的“完成函数”上:brute 可以选择提供一个完成最小化函数。它这样做是为了将蛮力法用作第一个猜测,然后可以使用更好的最小化函数“抛光”结果。

如果此函数设置为 None,则什么也不会发生,这可能正是您在这里想要的。不幸的是,在这种情况下,默认设置为 fmin,这是下坡单纯形 (Nelder-Mead) 方法,这将简单地忽略任何范围/网格规范。因此,对于像 sin(0.5 * x) 这样的函数,它将从 brute 函数找到的最低点开始 (-pi/2) 并从那里继续,找到 -pi 是(最近的)全局最小值。

解决方法很简单:

res = optimize.brute(g, (ranges,), finish=None)

会给你想要的。

必须链接到 scipy.optimize.brute documentation .

关于python - 使用 scipy.optimize.brute 在给定的时间间隔内最小化一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21309950/

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