092信赖域法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
092信赖域法

一、算法理论 信赖域方法与线搜索技术一样, 也是优化算法中的一种保证全局收敛的重要技术. 它们的功能都是在优化算法中求出每次迭代的位移, 从而确定新的迭代点.所不同的是: 线搜索技术是先产生位移方向(亦称为搜索方向), 然后确定位移的长度(亦称为搜索步长)。而信赖域技术则是直接确定位移, 产生新的迭代点。 信赖域方法的基本思想是:首先给定一个所谓的“信赖域半径”作为位移长度的上界,并以当前迭代点为中心以此“上界”为半径确定一个称之为“信赖域”的闭球区域。然后,通过求解这个区域内的“信赖域子问题”(目标函数的二次近似模型) 的最优点来确定“候选位移”。若候选位移能使目标函数值有充分的下降量, 则接受该候选位移作为新的位移,并保持或扩大信赖域半径, 继续新的迭代。否则, 说明二次模型与目标函数的近似度不够理想,需要缩小信赖域半径,再通过求解新的信赖域内的子问题得到新的候选位移。如此重复下去,直到满足迭代终止条件。 信赖域方法解决无约束线性规划 的基本算法结构。设是第次迭代点,记,,是Hesse阵的第次近似,则第次迭代步的信赖域子问题具有如下形式: , 其中是信赖域半径,是任一种向量范数,通常取-范数或-范数。 定义为在第步的实际下降量:, 定义对应的预测下降量:. 定义他们的比值为: 一般的,我们有。因此,若,则,不能作为下一个迭代点,需要缩小信赖半径重新求解问题。若比较接近于,说明二次模型与目标函数在信赖与范围内有很好的相似,此时可以作为新的迭代点,同时下一次迭代时可以增大信赖半径,对于其他情况,信赖半径可以保持不变。 二、算法框图 三、算法程序 function [xk,val,k]=trustm(x0) n=length(x0); x=x0; dta=1; eta1=0.1; eta2=0.75; dtabar=2.0; tau1=0.5; tau2=2.0; epsilon=1e-6; k=0; Bk=Hess(x); while(k150) gk=gfun(x); if(norm(gk)epsilon) break; end [d,val,lam,ik]=trustq(gk,Bk,dta); deltaq=-qk(x,d); deltaf=fun(x)-fun(x+d); rk=deltaf/deltaq; if(rk=eta1) dta=tau1*dta; else if (rk=eta2norm(d)==dta) dta=min(tau2*dta,dtabar); else dta=dta; end end if(rketa1) x0=x; x=x+d; Bk=Hess(x); end k=k+1; end xk=x; val=fun(xk); function [d,val,lam,k]=trustq(gk,Bk,dta) n=length(gk); gamma=0.05; epsilon=1.0e-6; rho=0.6; sigma=0.2; mu0=0.05; lam0=0.05; d0=ones(n,1); u0=[mu0,zeros(1,n+1)]; z0=[mu0,lam0,d0]; k=0; z=z0; mu=mu0; lam=lam0; d=d0; while (k=150) dh=dah(mu,lam,d,gk,Bk,dta); if(norm(dh)epsilon) break; end A=JacobiH(mu,lam,d,Bk,dta); b=beta(mu,lam,d,gk,Bk,dta,gamma)*u0-dh; B=inv(A); dz=B*b; dmu=dz(1); dlam=dz(2); dd=dz(3:n+2); m=0; mk=0; while (m20) dhnew=dah(mu+rho^m*dmu,lam+rho^m*dlam,d+rho^m*dd,gk,Bk,dta); if(norm(dhnew)=(1-sigma*(1-gamma*mu0)*rho^m)*dh) mk=m; break; end m=m+1; end alpha=rho^mk; mu=mu+alpha*dmu; lam=lam+alpha*dlam; d=d+alpha*dd; k=k+1; end val=gk*d+0.5*d*Bk*d; %%%%%%%%%%%%%%%%%%%%%%%%%% function p=phi(mu,a,b) p=a+b-sqrt((a-b)^2+4*mu); %%%%%%%%%%%%%%%%%%%%%%%%%% function dh=dah(mu,lam,d,gk,Bk,dta) n=length(d); dh(1)=mu; dh(2)=phi

文档评论(0)

liangyuehong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档