您可以通过使用不执行任何操作的自定义最小化程序来避免运行最小化程序。
参见“自定义最小化器”in the documentation of minimize() 的讨论:
**自定义最小化器**
例如,传递自定义最小化方法可能很有用
当使用此方法的前端时,例如`scipy.optimize.basinhopping`
或不同的图书馆。您可以简单地将可调用对象作为“方法”传递
范围。
可调用的被称为``method(fun, x0, args, **kwargs, **options)``
其中 ``kwargs`` 对应于传递给 `minimize` 的任何其他参数
(例如`callback`,`hess`等),除了`options` dict,它有
它的内容也作为“方法”参数逐对传递。另外,如果
`jac` 已作为 bool 类型传递,`jac` 和 `fun` 被破坏,因此
`fun` 只返回函数值,而 `jac` 被转换为函数
返回雅可比行列式。该方法应返回一个“OptimizeResult”
目的。
提供的“方法”可调用必须能够接受(并且可能忽略)
任意参数; `minimize` 接受的参数集可能
在未来的版本中展开,然后将这些参数传递给
方法。您可以在 scipy.optimize 教程中找到一个示例。
基本上,您需要编写一个自定义函数,返回一个OptimizeResult,并通过minimizer_kwargs 的method 部分将其传递给basinhopping,例如
from scipy.optimize import OptimizeResult
def noop_min(fun, x0, args, **options):
return OptimizeResult(x=x0, fun=fun(x0), success=True, nfev=1)
...
sol = basinhopping(..., minimizer_kwargs=dict(method=noop_min))
注意:我不知道跳过局部最小化如何影响盆地跳跃算法的收敛特性。