PDFO(Powell's Derivative-Free Optimizatiosolvers,Powell无导数优化求解器)为 MichaelJ.D.Powell 的无导数优化求解器提供跨平台的调用接口。这些求解器包括 COBYLA,UOBYQA,NEWUOA,BOBYQA,LINCOA,最初由M.J.D.Powell采用 Fortra77 实现。它们可求解黑箱优化,用于机器学习超参数调节。
Powell的求解器旨在仅使用函数值而不使用目标函数或非线性约束函数的导数来求解连续变量的一般非线性优化问题 。实际应用中,此类函数通常是基于仿真模拟的黑箱。因此,相应的优化问题通常被归类为黑盒优化或基于仿真模拟的优化。UOBYQA和NEWUOA可求解无约束问题,除了相当小的问题外,NEWUOA通常表现更好;BOBYQA可求解无约束和界约束问题;LINCOA可求解决无约束、界约束和线性约束问题;COBYLA可求解一般的非线性优化问题。由显式公式定义的问题往往可以用其他方法更有效地处理。PDFO当前的版本支持 MATLAB 和 Pytho 。它依赖MEX和F2PY来编译Powell的 Fortra 代码,并将其封装为用户友好的函数。MATLAB或Pytho用户可在直接调用Powell的求解器而无需了解其Fortra实现。HasD.Mittelma 的优化软件决策树收录了PDFO,建议将其用于“只用函数值求解一般非线性问题”。这里,“一般非线性问题”包括无约、界约束,线性约束和非线性约束问题。更多信息请访问PDFO主页 (https://pdfo.et)。安装PDFO的Pytho版本可通过pip安装:pipistallpdfoMATLAB版本可从码云 (https://gitee.com/pdfo/pdfo)或 PDFO主页 (https://pdfo.et)下载源代码,用其中提供的setup脚本安装。代码示例Pythofrompdfoimportpdfo,Bouds,LiearCostrait,NoliearCostrait#IfSciPy(versio1.1orabove)isistalled,theBouds,LiearCostrait,#adNoliearCostraitcaalterativelybeimportedfromscipy.optimize.importumpyaspdefchrose(x):#thesubroutiedefiigtheobjectivefuctioretursum((1-x[:-1])**2+4*(x[1:]-x[:-1]**2)**2)deflc_ieq(x):#thesubroutiedefiigtheolieariequalitycostraitsreturx[:-1]**2-x[1:]deflc_eq(x):#thesubroutiedefiigtheoliearequalitycostraitsretursum(x**2)-1if__ame__=='__mai__':prit('\MiimizethechaiedRosebrockfuctiowiththreevariablessubjecttooliearcostraits:\')x0=[0,0,0]#startigpoitlb=[0,0,0]ub=[p.if,p.if,p.if]#ub=[Noe,Noe,Noe]orub=Noeworksequallywellbouds=Bouds(lb,ub)#boudcostraits:lb<=x<=ub#Boudcostraitscaalsobewritteas:bouds=[(lb[0],ub[0]),(lb[1],ub[1]),(lb[2],ub[2])]A=[[0.5,-1,0],[0,0.5,-1]]li_lb=[-p.if,-p.if]li_ub=[0,0]li_co=LiearCostrait(A,li_lb,li_ub)#iequalitycostraits:li_lb<=A*x<=li_uboli_lb=[0,0]oli_ub=[p.if,p.if]oli_co_ieq=NoliearCostrait(lc_ieq,oli_lb,oli_ub)#iequalitycostraits:oli_lb<=lc_ieq(x)<=oli_uboli_co_eq=NoliearCostrait(lc_eq,0,0)#equalitycostrait:lc_eq(x)=0#Noliearcostraitscaalsobedefiedasdictioaries:#oli_co_ieq={'type':'ieq','fu':lc_ieq}#iequalitycostrait:lc_ieq(x)>=0#oli_co_eq={'type':'eq','fu':lc_eq}#iequalitycostrait:lc_eq(x)=0res=pdfo(chrose,x0,bouds=bouds,costraits=[li_co,oli_co_ieq,oli_co_eq])prit(res)MATLABfuctiorosebrock_example()fpritf('\MiimizethechaiedRosebrockfuctiowiththreevariablessubjecttooliearcostraits:\');x0=[0;0;0];%startigpoit%lieariequalitycostraitsA*x<=bA=[0.5,-1,0;0,0.5,-1];b=[0;0];%liearequalitycostraitsAeq*x=beqAeq=[];beq=[];%boudcostraitslb<=x<=ublb=[0;0;0];ub=[];%ub=[if;if;if]worksequallywell%oliearcostraitsolco=@lc;%seefuctiolcgivebelow%Thefollowigsytaxisideticaltofmico:[x,fx,exitflag,output]=pdfo(@chrose,x0,A,b,Aeq,beq,lb,ub,olco)%Alteratively,theproblemcabepassedtopdfoasastructure:%p.objective=@chrose;p.x0=x0;p.Aieq=A;p.bieq=b;p.lb=lb;p.olco=@lc;%[x,fx,exitflag,output]=pdfo(p)returfuctiof=chrose(x)%thesubroutiedefiigtheobjectivefuctiof=sum((x(1:ed-1)-1).^2+4*(x(2:ed)-x(1:ed-1).^2).^2);returfuctio[cieq,ceq]=lc(x)%thesubroutiedefiigtheoliearcostraits%Thesameasfmico,oliearcostraitscieq(x)<=0adceq(x)=0arespecified%byafuctiowithtworeturs,thefirstbeigcieqadthesecodbeigceq.cieq=x(2:ed)-x(1:ed-1).^2;ceq=x'*x-1;retur
评论