wolfesearch.asv

来自「这次上传的绝对是好东西」· ASV 代码 · 共 54 行

ASV
54
字号

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Wolfe-Powell Line Search
function [alphak,fk,gk,wfnum,wgnum]=wolfe(segma1,sigma2,rho2,rho1,n,mxk,dk,fk,gk,nprob)
         %fk1=objfcn(n,m,xk,nprob);
         %gk1=gradfcn(n,m,xk,nprob);
         wfnum=0;wgnum=0;
         %step 0
         fk1=fk;gk1=gk;
         alphak1=1;
         fk2=objfcn(n,m,xk+alphak*dk,nprob);wfnum=wfnum+1;
         gk2=gradfcn(n,m,xk+alphak*dk,nprob);wgnum=wgnum+1;
             if fk2-fk1<=sigma1*gk1'*dk
                 if gk2'*dk>=sigma2*gk1'*dk
                     alphak=alphak1;
                 end
                 %step 0
             else
                 %step 1%%%%%%%%%%%%%%%%%%%%%
                 i=0;
                 while 1
                     fk2=objfcn(n,m,xk+rho1^i*dk,nprob);wfnum=wfnum+1;
                     if fk2-fk1<=sigma1*gk1'*dk
                         i=i-1;
                         if fk2-fk1>sigma1*gk1'*dk
                             i=i+1;
                             break;
                         end
                     else
                         i=i+1;
                     end
                 end  
                 alphak1=rho1^i;
                 %step 1%%%%%%%%%%%%%%%%%%%%%%%
                 while 1
                     gk2=gradfcn(n,m,xk+alphak1*dk,nprob);wgnum=wgnum+1;
                     if gk2'*dk>=sigma2*gk1'*dk
                         alphak=alphak1;
                         break;
                     else
                         betak1=rho1^(-1)*alphak1;
                         j=0;
                         while 1 
                             alphak=alphak1+rho2^j*(betak1-alphak1);
                             fk2=objfcn(n,m,xk+alphak*dk,nprob);wfnum=wfnum+1;
                             if fk2-fk1<=sigma1*alphak*gk1'*dk;
                                 break;
                             else
                                 j=j+1;
                             end
                         end
                     end
                 end
             end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?