scipy中的最小化,找到N维标量函数的所有局部最小值的算法
Posted
技术标签:
【中文标题】scipy中的最小化,找到N维标量函数的所有局部最小值的算法【英文标题】:minimization in scipy, algorithm to find all local minima of a N dimensional scalar function 【发布时间】:2012-11-10 06:56:15 【问题描述】:有没有人知道一个强大的例程/算法(最好在 scipy/python 中)来定位 N 维向量空间的定义(“矩形”)区域中 N 个变量的标量实函数的“所有”局部最小值?
scipy 中的受约束和不受约束的最小化算法都只返回一个最小值(全局或局部)
【问题讨论】:
一个函数在有界区间内可以有无限个局部最小值。例如,f(x) = sin(1/x)
代表 0 < x < pi
。
显然......我的错。抱歉问了。
这是个好问题。我只是认为算法将它们全部生成是具有挑战性的——即使对于平滑函数也是如此。
我想一种方法是计算渐变的零的数量,然后切割成更小的部分,直到每个渐变中的一个零或一个零结束地区。我知道对于标量函数,有一个轮廓积分定理,可以计算轮廓内零点和极点之间的差异。但我忘记了它的名字。
Argument principle.
【参考方案1】:
Scipy 的 basinhopping 有一个 callback
参数,可用于保存所有找到的最小值。
例如:
all_minima = []
def save_minima(x, f, accepted):
all_minima.append(x)
basinhopping(func, x0, callback=save_minima)
显然,这不一定会返回所有局部最小值。但它确实会返回它找到的所有内容。
【讨论】:
以上是关于scipy中的最小化,找到N维标量函数的所有局部最小值的算法的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助编写一个函数来查找 N 维数组 C++ 中的最大值和最小值