问题描述
有没有一种方法可以绘制使用scipy.optimize的差分演化进行优化的函数的累进值?在下面的绘图部分不起作用:
{{1}}
解决方法
注意:我最初回答这个问题是因为您希望优化器采用 path ,而不是优化过程中的值。我已经更新了答案,使它可以同时显示两个答案,但是您可能只对第二个图感兴趣。
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)]
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,2)
ax.plot(progress_val)
plt.show()
我明白了
该值(我刚刚意识到您实际上要问的是底部图)。如果您不需要路径本身,请忽略与progress
有关的代码中的任何内容。
当然,您的结果看起来可能会有所不同,因为我们的随机种子以及因此我们通往最佳状态的途径是不同的。