为什么Nelder-Mead中的每次迭代都在scipy这么慢?

时间:2016-12-01 12:11:32

标签: performance scipy minimize simplex

我正在尝试使用在scipy.minimize(method ='Nelder-Mead')中实现的Nelder-Mead来最小化函数。该函数有大约30个输入,但我已经顺序优化(即优化前5个,保持剩余25个固定,然后逐渐增加变量数量以最小化)。 (我没有使用基于渐变的,因为我的目标函数中存在模拟噪声,因为太小的步长和渐变不可靠而使其不平滑)。

然而,迭代非常缓慢。如果我计算单个功能评估的步骤,则需要大约60秒,但优化中的每次迭代都非常慢,至少慢于10分钟。我正在使用回调函数选项来衡量所花费的时间。

每次迭代都做了什么?它在初始单纯形中实际上需要N ^ 2步吗?在算法的每一步中做了什么?我知道它与Matlab实现有所不同,Matlab实现每次迭代只需要一步(如果缩小或扩展单纯形,有时会多一些)。或者仅仅是调用回调函数的时间问题?

是的,我在Jupyter笔记本中运行它。但我已经运行了3天以上,只完成了221次迭代,并且优化了20个变量;平均每次迭代超过20分钟。

0 个答案:

没有答案
相关问题