【发布时间】:2013-10-15 04:31:36
【问题描述】:
我正在尝试使用scipy.optimize 函数来查找具有多个参数的复杂函数的全局最小值。 scipy.optimize.minimize 似乎做得最好,即“Nelder-Mead”方法。但是,它往往会进入参数域之外的区域(将负值分配给只能为正的参数),因此在这种情况下会返回错误。有没有办法限制参数的界限在scipy.optimize.minimize 函数内 本身?或者可能在其他 scipy.optimize 函数中?
我找到了以下建议:
当参数超出允许范围时,返回一个非常大的数字(远离要拟合的数据)。这将(希望)严重惩罚这种参数选择,以至于
curve_fit将选择其他一些可接受的参数集作为最佳参数。
given in this previous answer,但在我的情况下,该过程将花费大量计算时间。
【问题讨论】:
-
当输入超出允许范围时,让成本函数返回一个很大的成本是一个非常糟糕的主意,因为搜索函数将花费大部分精力来搜索无限大小的不合格答案空间。使用来自
scipy.minimize的constraint参数指定一个方法,该方法将告诉算法将其搜索限制在何处。在此处搜索“约束”:docs.scipy.org/doc/scipy/reference/generated/…