课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
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)