8分钟
basinhopping算法
常规的最优化算法很容易陷入局部极值点。basinhopping
算法是一个寻找全局最优点的算法。
scipy.optimize.basinhopping(func, x0, niter=100, T=1.0, stepsize=0.5,
minimizer_kwargs=None,take_step=None, accept_test=None, callback=None,
interval=50, disp=False, niter_success=None)
func
:可调用函数。为待优化的目标函数。最开始的参数是待优化的自变量;后面的参数由minimizer_kwargs
字典给出x0
:一个向量,设定迭代的初始值niter
:一个整数,指定迭代次数T
:一个浮点数,设定了“温度”参数。stepsize
:一个浮点数,指定了步长minimizer_kwargs
:一个字典,给出了传递给scipy.optimize.minimize
的额外的关键字参数。take_step
:一个可调用对象,给出了游走策略accept_step
:一个可调用对象,用于判断是否接受这一步callback
:一个可调用对象,每当有一个极值点找到时,被调用interval
:一个整数,指定stepsize
被更新的频率disp
:一个布尔值,如果为True
,则打印状态信息niter_success
:一个整数。Stop the run if the global minimum candidate remains the same for this number of iterations.
返回值:一个OptimizeResult
对象。其重要属性为:
x
:最优解向量success
:一个布尔值,表示是否优化成功message
:描述了迭代终止的原因
假设我们要求解最小值的函数为:f(x,y)=(1-x)²+100(y-x²)² ,于是有:
def fun(p):
x,y=p.tolist()#p 为数组,形状为 (2,)
return f(x,y)
学员评价