您好,欢迎访问三七文档
用外点法求解函数问题分析外点法为序列无约束最优化方法,其基本思想为将条件函数吸收到目标函数中进行求解。其在数学上的直观理解是拉格朗日乘子法:miixgMxfMXT12,0minmin;min,MXT;min为总代价,xf为价格,miixgM12,0min为罚款。即在经济学上总代价为价格和罚款的和。此时mixgxgxgxgiiii~1000,0min22,当,当称miixgMxfMXT1;为增广目标函数,通常取0002xgxgxgxgiiii当当算法实现步骤1.给定初始点0X,初始惩罚因子1r,维数n迭代精度和递增系数1C;2.构造外点惩罚函数),(kkrXP;3.选用无约束优化方法来求解惩罚函数极小点,即,),(min),(kkkrXPrXP4.检验是否满足迭代终止条件1kkXX或)()(1kkXfXf若满足转6,若不满足转5;5.令1krrCk,转2;6.输出最优解,迭代终止。注:程序所用语言为MATLAB,程序中无约束优化部分通过求导实现。M文件如下:ticclc%cÊdzõÖµ£¬epsΪÔÊÐíÎó²îÖµifnargin==1eps=1.0e-5;elseifnargin1error('')returnendsymsm[x1,x2]=solve('-1+2*m*(x1+x2-1)=0','1+2*m*(x2-1)+2*m*(x1+x2-1)=0');t=1;k=1;x1=limit(x1,m,t);x2=limit(x2,m,t);bound=max(eval(x2(1))-1,eval(x1(2)+x2(2))-1);while-boundepst=10*t;k=k+1;[x1,x2]=solve('-1+2*m*(x1+x2-1)=0','1+2*m*(x2-1)+2*m*(x1+x2-1)=0');x1=limit(x1,m,t);x2=limit(x2,m,t);bound=max(eval(x2(1))-1,eval(x2(2))-1,eval(x1(1)+x2(1))-1,eval(x1(2)+x2(2))-1);endx1=eval(x1);x2=eval(x2);f1=-x1(1)+x2(1);f2=-x1(2)+x2(2);iff1f2disp(sprintf('thefinalxis[%f%f]',x1(1),x2(1)));disp(sprintf('thefinalfunctionvalueis%f',f1));elsedisp(sprintf('thefinalxis[%f%f]',x1(2),x2(2)));disp(sprintf('thefinalfunctionvalueis%f',f2));enddisp(sprintf('thetimesusedtorecursionis%f',k))toc调用方式如下symsx1x2mT=-x1+x2+m*(x2-1)^2+m*(x1+x2-1)^2;waidian(T,eps);functions=waidian(T,eps)程序中无约束优化部分通过调用“牛顿法”完成代码如下;ticclearall;closeall;clcsymsx1x2m=1;x0=[1;0];eps=1.0e-5;T=-x1+x2+m*(x2-1)^2+m*(x1+x2-1)^2;c=10;k=1;while1s=newton1(T,x0,eps);%调用newton法x1=s(1);x2=s(2);ifm*(x2-1)^2+m*(x1+x2-1)^2epsm=c*m;k=k+1;symsx1x2T=-x1+x2+m*(x2-1)^2+m*(x1+x2-1)^2;elsedisp(sprintf('thefinalresultis[%f%f]',x1,x2));disp(sprintf('thefunctionvalueis%f',-x1+x2);disp(sprintf('thetimesusedtorecursionis%f',k));break;endendtoc实验结果如下:由上述结果可知当迭代8次时能够达到终止条件,此时,函数得到最优解1.求解完成。
本文标题:最优化大作业外点法
链接地址:https://www.777doc.com/doc-2316905 .html