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

📄 hj10.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;          %步长放大因子
x1=x0;
e=0.0000001;       %截至精度
M=2000;          %最大迭代次数
%best=0
%better=0

tic
for k=1:M
    
    if (l<e|yc<e)
           break;
    end
       
for i=1:n       %2n个搜索方向,函数值
    x(:,2*i-1)=x1+h*E(:,i);
    x(:,2*i)=x1-h*E(:,i);
    y(2*i-1)=fm(x(:,2*i-1));
    y(2*i)=fm(x(:,2*i));
end

ybest=y(1);        %最好点
ybetter=y(1);      % 次好点
xbest=x(:,1);
xbetter=x(:,1);
for i=2:2*n        %查找最好点、次好点,并记录相应的函数值
    if y(i)<ybetter
        if  y(i)<ybest
            ybetter=ybest;
            xbetter=xbest;
            ybest=y(i);
            xbest=x(:,i);
        else
            ybetter=y(i);
            xbetter=x(:,i);
        end
    end
end

xtemp=xbest+xbetter;     %根据最好点和次好点新产生的点
ytemp=fm(xtemp);

if ytemp<ybest
    xbest=xtemp;
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
tic
ybest
xbest
k



                
            
            
    
    
    
    
    
    
    


    

⌨️ 快捷键说明

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