我正在尝试使用 scipy.minimize(method='Nelder-Mead') 中实现的 Nelder-Mead 来最小化一个函数。该函数有大约 30 个输入,但我一直在按顺序优化(即优化前 5 个,保持其余 25 个固定,然后逐渐增加要最小化的变量数量)。(我没有使用基于梯度的,因为我的目标函数中存在模拟噪声,对于太小的步长和不可靠的梯度来说,它是不平滑的)。
但是,迭代非常缓慢。如果我对单个函数评估的步骤进行计时,大约需要 60 秒,但优化中的每次迭代都很慢,至少慢于 10 分钟。我正在使用回调函数选项来衡量所花费的时间。
它在每次迭代中做了什么?在初始单纯形中实际上需要 N^2 步吗?算法的每一步都做了什么?我知道它与 Matlab 实现不同,每次迭代只需要一个步骤(如果它正在缩小或扩展单纯形,有时会更多)。还是只是回调函数何时被调用的问题?
顺便说一句,我在 Jupyter 笔记本中运行它。但是我已经运行了 3 天以上,只完成了 221 次迭代和 20 个变量需要优化;平均每次迭代超过 20 分钟。