当前位置: 首页 > 后端技术 > Python

scipy

时间:2023-03-25 23:10:11 Python

1opt.basinhopping()使用跳盆法(basin-hopping)寻找函数func()的全局最小值。basin-hopping算法由两个阶段组成,结合了全局步进算法和每个阶段的局部最小化。旨在模拟原子簇能量最小化的自然过程,它适用于“类似漏斗但崎岖不平”的能量景观的类似问题1.1参考格式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,seed=None)1.2参数func:callable__f(x,_*args)_待优化的功能。Args可以用作可选的x0:array_likeminimizer_kwargs的初始猜测值。niter:整数,可选的迭代次数。T:float,可选参数T表示接受/拒绝标准。T越大,函数值允许的跳跃越大。为获得最佳结果,T应与局部最小值之间的间隔(函数值)相当。Stepsize:float,optional随机数位移的最大步长。minimizer_kwargs:dict,optional通过这个字典参数将额外的关键参数传递给优化函数scipy.optimize.minimize()。例如:method:str最小化方法(例如,“L-BFGS-B”)args:传递给要优化的函数的元组(func)的附加参数。take_step:callabletake_step(x),optional用于替换默认的分步执行规则。默认的分步规则是在轴上随机移动,但在某些情况下,其他规则可能效果更好。accept_test:callable,accept_test(f_new=f_new,__x_new=x_new,__f_old=fold,__x_old=x_old)__,optional定义一个判断是否接受当前步骤的测试。除了基于参数T的默认Metropolis测试之外,还使用了此附加测试。返回的结果可能是:True、False或“forceaccept”。如果为真,则用此测试覆盖迷人的T测试。callback:callable,callback(x,__f,__accept),optional为找到的所有最小值调用的回调函数。x和f是测试最小值的坐标和函数值,accept是是否接受最小值。interval:integer,optional更新步长的间隔。disp:bool,当optional为True时,表示打印状态信息。niter_success:integer,optional如果全局最小候选项的数量对于此迭代次数保持不变,则停止运行。seed:intor_np.random.RandomState_,可选随机种子1.3Returnsres:OptimizeResult优化结果表示为一个OptimizeResult对象。重要的属性包括:x:表示优化结果对应的参数数组。fun:表示最佳结果的值message:描述终止原因的消息。1.4例子求解二元函数的最小值:指定minimizer_kwargs方法使用的优化算法;x0代表函数func2d的初始参数;deffunc2d(x):f=np.cos(14.5*x[0]-0.3)+(x[1]+0.2)*x[1]+(x[0]+0.2)*x[0]df=np.zeros(2)df[0]=-14.5*np.sin(14.5*x[0]-0.3)+2.*x[0]+0.2df[1]=2.*x[1]+0.2returnf,dfminimizer_kwargs={"method":"L-BFGS-B","jac":True}x0=[0.5,0.1]ret=basinhopping(func2d,x0,minimizer_kwargs=minimizer_kwargs,niter=200)打印(RET)输出:娱乐:-1.0108761844426555lowest_optimization_result:Fun:-1.01087618444426555HESS_INV:<2x2LBFGSINVHESSESSPORTOUCTlbfGSINVHESSPRODUCTwithdtype=floot=floot=floot=floot=floot=jac:jac:jac:ardient:2.1567997579.95757.957and.[-5.957nody(-55)=_PGTOL'nfev:11nit:5status:0success:Truex:array([-0.19506755,-0.1])message:['请求的basinhopping迭代次数成功完成']minimization_failures:0nfev:2686nit:200x:array([-0.19506755,-0.1])b.添加参数边界bnds:指定函数func2d的参数变化区间,添加边界后,最小值与之前不同,此时只能找到区间内的最小值deffunc2d(x):f=np.cos(14.5*x[0]-0.3)+(x[1]+0.2)*x[1]+(x[0]+0.2)*x[0]df=np.zeros(2)df[0]=-14.5*np.sin(14.5*x[0]-0.3)+2.*x[0]+0.2df[1]=2.*x[1]+0.2returnf,dfbnds=[(0.05,0.5),(0,1)]minimizer_kwargs={"method":"L-BFGS-B","jac":True,'bounds':bnds}x0=[0.5,0.1]ret=basinhopping(func2d,x0,minimizer_kwargs=minimizer_kwargs,niter=200)print(ret)print("全局最小值:x=[%.4f,%.4f],f(x0)=%.4f"%(ret.x[0],ret.x[1],ret.fun))output:fun:-0.8972667196907541lowest_optimization_result:fun:-0.8972667196907541hess_inv:<2x2LbfgsInvHessProductwithdtype=float64>jac:array([-7.99192379e-11,2.00000000e-01])消息:b'CONVERGENCE:NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'nfev:7nit:5status:0success:Truex:array([0.23417129,0.])message:['requested成功完成的basinhopping迭代次数']minimization_failures:0nfev:1225nit:200x:array([0.23417129,0.])globalminimum:x=[0.2342,0.0000],f(x0)=-0.8973c。在同一个初始值下指定不同的优化算法,使用BFGS(拟牛顿法)的优化结果BFGS无法指定边界,所以此时的优化结果与a相同minimizer_kwargs={“方法”:“BFGS”,“jac”:真,'边界':bnds}输出:乐趣:-1.0108761844426555lowest_optimization_result:乐趣:-1.0108761844426555hess_inv:数组([[4.711-40426555]],[3841041-06,5.00306300e-01]])jac:array([-2.71034778e-10,-2.18089991e-10])消息:“优化成功终止。”nfev:9nit:6njev:9status:0success:Truex:array([-0.19506755,-0.1])message:['requestednumberofbasinhoppingiterationscompletedsuccessfully']minimization_failures:0nfev:1953nit:200njev:1953x:array5([-60.19,-0.1])d.2opt.minimize()最小化一个或多个变量的标量函数。2.1参考格式defminimize(fun,x0,args=(),method=None,jac=None,hess=None,hessp=None,bounds=None,constraints=(),tol=None,callback=None,options=无):2.2Parametersfun:可调用目标函数。x0:ndarray,shape(n,)初始参数,一维数组。args:元组,可选传递给目标函数及其派生函数(`fun`、`jac`和`hess`函数)的附加参数。method:str或callable,可选找到最优值的方法。如果不指定,将根据是否有边界或约束来选择``BFGS``、``L-BFGS-B``、``SLSQP``之一。jac:{callable,'2-point','3-point','cs',bool},optional计算梯度向量的方法。仅适用于CG、BFGS、Newton-CG、L-BFGS-B、TNC、SLSQP、dogleg、trust-ncg、trust-krylov、trust-exact和trust-constr.hess:{callable,'2-point','3-point','cs',HessianUpdateStrategy},optional计算Hessian矩阵的方法仅适用于Newton-CG,dogleg,trust-ncg,trust-krylov,trust-exactandtrust-constr.hessp:callable,optionalbounds:sequenceor`Bounds`,可选参数的范围。constraints:{Constraint,dict}或{Constraint,dict}列表,可选约束。tol:float,可选的用于终止优化过程的公差。选项:字典,可选的额外选项。所有的优化方法都可以使用如下格式:maxiter:int,最大迭代次数disp:bool,为True时,返回收敛信息。callback:callable,optional在每次迭代后调用。2.3返回res:OptimizeResult优化结果以OptimizeResult对象表示。重要的属性包括:x表示优化结果对应的参数数组。success表示是否计算出最优值消息描述终止原因。scipy.optimize.basinhoppingscipy.optimize.minimize()