ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:912.53KB ,
资源ID:9833381      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9833381.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最优化方法报告二.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最优化方法报告二.docx

1、最优化方法报告二最优化方法实验报告姓名: 班级:学号:一.从外罚,内罚,乘子法中选一编程乘子法(PHR算法)1. 算法原理乘子法是Powell和Hestenes于1969年针对等式约束优化问题同时独立提出的一种优化算法,后于1973年经Rockfellar推广到求解不等式约束优化问题。其基本思想是:从原问题的拉格朗日函数出发,再加上适当的罚函数,从而将原问题转化为求解一系列的无约束优化子问题。PHR算法 考虑同时带有等式和不等式约束的优化问题的乘子法min f(x)s.t. hi(x)=0,i=1,l gi(x)0,i=1,m其基本思想是:把解等式约束优化问题的乘子法推广到不等式约束优化问题,

2、及先引进辅助变量把不等式约束化为等式约束,然后再利用最优化性条件消去辅助变量。2. 算法步骤步0 选取初始值。给定x0R2,1Rl,1Rm,10,01.令k:=1.步1 求解子问题。以xk-1为初始点,求解无约束子问题min (x,k,k,k),的极小点xk,其中(x,)=f(x)- + + 步2 检验终止条件。若k,其中,则停止迭代,输出xk作为原问题的近似极小点;否则,转步3.步3 更新罚参数。若,令;否则,。步4 更新乘子向量。计算步5 令k:=k+1,转步1.3. matlab编程function x,mu,lambda,output=multphr(fun,hf,gf,dfun,dh

3、f,dgf,x0)% 功能: 用乘子法解一般约束问题: min f(x), s.t. h(x)=0, g(x)=0%输入: x0是初始点, fun, dfun分别是目标函数及其梯度;% hf, dhf分别是等式约束(向量)函数及其Jacobi矩阵的转置;% gf, dgf分别是不等式约束(向量)函数及其Jacobi矩阵的转置;%输出: x是近似最优点,mu, lambda分别是相应于等式约束和不% 等式约束的乘子向量;output是结构变量,输出近似极小值f, 迭% 代次数maxk=500; %最大迭代次数sigma=2.0; %罚因子eta=2.0; theta=0.8; %PHR算法中的实

4、参数k=0; ink=0; %k, ink分别是外迭代和内迭代次数epsilon=1e-5; %终止误差值x=x0; he=feval(hf,x); gi=feval(gf,x);n=length(x); l=length(he); m=length(gi);%选取乘子向量的初始值mu=0.1*ones(l,1); lambda=0.1*ones(m,1);btak=10; btaold=10; %用来检验终止条件的两个值while(btakepsilon & kepsilon if(k=2 & btak theta*btaold) sigma=eta*sigma; end %更新乘子向量 f

5、or (i=1:l), mu(i)=mu(i)-sigma*he(i); end for (i=1:m) lambda(i)=max(0.0,lambda(i)-sigma*gi(i); end end k=k+1; btaold=btak; x0=x;endf=feval(fun,x);output.fval=f;output.iter=k;output.inner_iter=ink;output.bta=btak;%xstar=0.5*(sqrt(7)-1);0.25*(sqrt(7)+1);%err1=norm(x-xstar)4. 算例运行情况利用程序求解约束优化问题取初始点为x0=(

6、3,3)T,该问题有精确解, .解:目标函数文件f1.m,function f=f1(x)f=(x(1)-2.0)2+(x(2)-1.0)2;等式约束函数文件h1.mfunction he=h1(x)he=x(1)-2.0*x(2)+1.0;不等式约束函数文件g1.mfunction gi=g1(x)gi=-0.25*x(1)2-x(2)2+1;目标函数的梯度文件df1.m,function g=df1(x)g = 2.0*(x(1)-2.0), 2.0*(x(2)-1.0);等式约束(向量)函数的Jacobi矩阵(转置)文件dh1.m,function dhe = dh1(x)dhe = 1

7、.0, -2.0;不等式约束(向量)函数的Jacobi矩阵(转置)文件dg1.mfunction dgi = dg1(x)dgi = -0.5*x(1), -2.0*x(2);在matlab命令窗口输入:x0=3,3;x,mu,lambda,output=multphr(f1,h1,g1,df1,dh1,dg1,x0)结果:x = 0.8229 0.9114mu = -1.5945lambda = 1.8465output = fval: 1.3934 iter: 23 inner_iter: 82 bta: 9.5419e-0065. 存在的问题与改进思路每次迭代都需要更新罚参数和乘子向量,

8、导致运算量变大,但这是为了消除外罚函数法中增广目标函数的病态性质,所以只能尝试引进其他迭代方法二凸二次规划的有效集方法编程1. 算法原理2. 算法步骤步0 选取初值。给定初始可行点,令k:=0.步1 解子问题。确定相应的有效集。求解子问题可以得到极小点dk和拉格朗日乘子向量k。若,转步3;否则,转步2.步2 检验终止准则。计算拉格朗日乘子其中令若(k)t0,则xk是全局极小点,停算;否则,若(k)t0,则令Sk:=Skt,转步1.步3 确定步长k。令,其中令xk+1:=xk+kdk.步4 若k=1,则令Sk:=Sk;否则,若k=0,(i=l+1,.,m)%输入: x0是初始点, H, c分别是

9、目标函数二次型矩阵和向量;% Ae=(a_1,.,a_l), be=(b_1,.,b_l); % Ai=(a_l+1,.,a_m), bi=(b_l+1,.,b_m).%输出: x是最优解, lambda是对应的乘子向量;output是结构% 变量, 输出极小值f(x), 迭代次数k等信息, exitflag是算法终止类型% 初始化epsilon=1.0e-9; err=1.0e-6;k=0; x=x0; n=length(x); kmax=1.0e3;ne=length(be); ni=length(bi); lamk=zeros(ne+ni,1);index=ones(ni,1);for

10、(i=1:ni) if(Ai(i,:)*xbi(i)+epsilon), index(i)=0; endend%算法主程序while (k0), Aee=Ae; end for(j=1:ni) if(index(j)0), Aee=Aee; Ai(j,:); end end gk=H*x+c; m1,n1 = size(Aee); dk,lamk=qsubp(H,gk,Aee,zeros(m1,1); if(norm(dk)ne) y,jk=min(lamk(ne+1:length(lamk); end if(y=0) exitflag=0; else exitflag=1; for(i=1:

11、ni) if(index(i) & (ne+sum(index(1:i)=jk) index(i)=0; break; end end end k=k+1; else exitflag=1; %求步长 alpha=1.0; tm=1.0; for(i=1:ni) if(index(i)=0)&(Ai(i,:)*dk0) tm1=(bi(i)-Ai(i,:)*x)/(Ai(i,:)*dk); if(tm1tm) tm=tm1; ti=i; end end end alpha=min(alpha,tm); x = x+alpha*dk; %修正有效集 if(tm0) rb = Ae*ginvH*c

12、 + be; lambda = pinv(Ae*ginvH*Ae)*rb; x = ginvH*(Ae*lambda-c);else x = -ginvH*c; lambda = zeros(m,1);end4. 算例运行情况利用程序求解下列二次规划问题:,s.t. -2x1-x2-3,x1-x2-1,-x1-2x2-2,x10,x20.该问题有精确解,最优值f(x*)=.解:在matlab命令窗口输入下列命令: H=1 -1;-1 2; c=-6 -2; Ai=-2 -1;1 -1;-1 -2;1 0;0 1; bi=-3 -1 -2 0 0; x0=0 0; x,lambda,exitfl

13、ag,output=qpact(H,c,Ai,bi,x0)运行结果:x = 1.3333 0.3333lambda = 2.4444 0.1111exitflag = 0output = fval: -8.1111 iter: 75. 存在的问题与改进思路问题:有效集算法是一个非常有效的求解凸二次规划的方法,美中不足的是在调整Jk的过程中,当时,则以作为搜索方向,虽然保证了dk为下降方向,但不能保证为最速下降方向。改进思路:可以将投影梯度算法的方法引进来,将在xk点的投影方向作为搜索方向三某一算法的改进有效集算法是一个非常有效的求解凸二次规划的方法,美中不足的是在调整Jk的过程中,当时,则以作为搜索方向,虽然保证了dk为下降方向,但不能保证为最速下降方向。可以将投影梯度算法的方法引进来,将在xk点的投影方向作为搜索方向.从而对有效集作如下修改:设xk是问题的一个可行解,且有效指标集为Jk(xk)=EI(xk),求解相应的等式约束问题假设所得的解为且相应的lagrange乘子向量k,首先检验(此算法改进摘抄于豆丁网论文 毕业论文 二次规划的改进有效集算法,向老师忏悔,没有学透,无法自主开发有效的算法改进)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1