首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制优化的进度图?

如何绘制优化的进度图?
EN

Stack Overflow用户
提问于 2020-09-28 11:27:00
回答 1查看 922关注 0票数 2

是否有一种方法来绘制函数的累进值,并对其进行优化,优化其微分演化?在下面的绘图部分中,不工作:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-29 08:03:31

注意:我最初回答了这个问题,认为您需要的是优化器的路径,而不是优化过程中的值。我更新了答案,以便两者都显示出来,但您可能只对第二幅图感兴趣。

differential_evolution返回的对象不包含指向结果的路径,也不包含沿途的值。但是,您可以使用callback参数来提供在每次迭代中调用的回调函数。然后,该回调可以记录进度。

例如:

代码语言:javascript
复制
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函数,整个路径的可视化变得有点棘手。如果我选择只显示前两个坐标(+值,这是您实际要问的),即

代码语言:javascript
复制
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()

我得到了

这个价值,也就是我刚刚意识到的你真正想要的,是最底层的情节。如果您不需要路径本身,则忽略代码中与progress相关的任何内容。

当然,你的结果可能看上去不一样,因为我们的随机种子,以及我们通向最佳状态的道路,是不同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64101301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档