randsearch.m

来自「多变量寻优的源码」· M 代码 · 共 77 行

M
77
字号
%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;       %初始值,
as=1.618;          %步长放大因子
af=0.618;
a=1;
m=0;
x1=x0;
e=0.00000001;       %截至精度
M=200;          %最大迭代次数
%best=0
%better=0

tic
for k=1:M
   
    d=rand(n,1)-0.5;     %随机产生1个点
    x1=x0+a*d;
    y1=fm(x1);
    y0=fm(x0);
    if y1<y0
        y=x0+a*(x1-x0);
        yy=fm(y);
        if yy<y0
            a=a*as;
            l=norm(y-x0);
            yc=abs(yy-y0);
            x0=y;
           
        end
    else 
        m=m+1;
        if m>3*n
            a=a*af;
            m=0;
            
        end
    end
    
    if (l<e|yc<e)
           break;
    end
    
end


tic
ybest
xbest
k



                
            
            
    
    
    
    
    
    
    


    

⌨️ 快捷键说明

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