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

📄 hj11.m

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

tic

%x0=[-3;-1;-3;-1];     %初始点
%n=4;            %参数个数n
x0=[-1.2;1.0];
n=2;
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.00001;       %截至精度
M=2000;          %最大迭代次数
%best=0
%better=0
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 k=1:M
    
    %if (l<e|yc<e)
    if (h<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
%bes仅仅在开始时没有值,经过一轮迭代后,就不用重新赋值
%故不需要总赋值
%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

end

ybest
xbest
k
toc


                
            
            
    
    
    
    
    
    
    


    

⌨️ 快捷键说明

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