gpt4 book ai didi

python - 如何绘制优化的进度?

转载 作者:行者123 更新时间:2023-12-04 08:51:07 26 4
gpt4 key购买 nike

有没有办法绘制使用 scipy.optimize 的差分进化优化的函数的渐进值?在以下绘图部分不起作用:

from scipy.optimize import rosen, differential_evolution
bounds = [(0, 5), (0, 5), (0, 5), (0, 5), (0, 5)]
result = differential_evolution(rosen, bounds, disp=False)
print(result.x, result.fun)
import matplotlib.pyplot as plt
x, f = zip(*result)
plt.plot(x, f)

最佳答案

注意:我最初回答这个问题时认为您想要优化器采用的路径,而不是优化过程中的值。我已经更新了答案,以便同时显示两者,但您可能只对第二个情节感兴趣。differential_evolution 返回的对象不包含通往结果的路径,也不包含沿途的值。但是,您可以使用 callback提供 callback function 的参数每次迭代都会调用它。然后该回调可以记录进度。
例如:

progress = []
progress_err = []

def cb(x, convergence):
progress.append(x)
progress_val.append(rosen(x))

bounds = [(0, 5), (0, 5), (0, 5), (0, 5), (0, 5)]
result = differential_evolution(rosen, bounds, disp=False, callback=cb)

progress = np.array(progress)
progress_val = np.array(progress_val)
由于您似乎想要优化 5D Rosenbrock 函数,因此整个路径的可视化变得有点棘手。如果我选择仅可视化前两个坐标(+ 值,这是您实际询问的值),即
fig = plt.figure()
ax = fig.add_subplot(2,1,1)
ax.plot(progress[:, 0], progress[:, 1])
ax = fig.add_subplot(2,1,2)
ax.plot(progress_val)
plt.show()
我得到
A path and value during optimization
值(value),这就是我刚刚意识到你实际上要问的,是底部的情节。如果您不需要路径本身,请忽略代码中与 progress 相关的任何内容。 .
当然,您的结果可能看起来不同,因为我们的随机种子以及我们通往最佳状态的路径不同。

关于python - 如何绘制优化的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64101301/

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