⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hock.m

📁 用于Hooke—Jeeve模式搜索算法
💻 M
字号:
%HJ模式搜索的改进版
%主要改进在于对好点的搜索,模式移动不变
%改进,即使记录变化的量


x0=[-3;-1;-3;-1];     %初始点
n=4;            %参数个数n
E=eye(n);       %搜索方向
x=zeros(n,2*n); %搜索点
y=zeros(1,2*n); %d对应搜索点的值
h=1;      %初始步长
l=1;            %作为点间距离
yc=1;       %初始值,
a=1.618;          %步长放大因子
b=0.618;
x1=x0;
e=0.001;       %截至精度
M=2000;          %最大迭代次数
%best=0
%better=0
y1=fm(x1);

tic
for k=1:M
    
    if (l<e|yc<e)
           break;
    end
 
 while(1)
    
    if b<e
        break;
    end
    
     for i=1:n       %2n个搜索方向,函数值
        x2=x1+h*E(:,i);
        if fm(x2)<y1
            i=i-1;
           break;
        end
        x2=x1-h*E(:,i);
        if fm(x2)<y1
           i=i-1;
           break;
        end
     end
     if i==n
         b=0.618*b;
     else
         break;
     end
 end
 
j=0;
while(j<10*n)             
%for j=1:100
   j=j+1;
   xp=xbest+a*(xbest-x1);    %模式移动
   yp=fm(xp);
   if  yp<ybest;
       x1=xbest;
       xbest=xp;
       y1=ybest;
       ybest=yp;
       l=norm(xbest-x1);     %点间距离
       yc=abs(ybest-y1);     %y的改变量
       %l=norm(xp-xbest);         
       %if (abs(ybest-yp)<e)
       %    break;
       % end
   else
       %l=norm(xp-xbest);
       if (l<e|yc<e)
           break;
       end
       
       if a<=0.3
           a=1.618;
           x1=xbest;
           %l=0.382*l;
           h=0.382*l;     %取0。382效果最好,或大或小,均不好
           break;
       else
           a=0.5*a;
       end
   end
end

%l=norm(xp-xbest);        %只要模式移动100次还没停止,就退出
  %if (l<e|abs(ybest-yp)<e)
   %    break;
   %end
end

ybest
xbest
k
toc


                
            
            
    
    
    
    
    
    
    


    

⌨️ 快捷键说明

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