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

📄 liziqun_tanli.m

📁 在粒子群算法运行中,容易出现局部最优,为此设粒子本身有弹力,在聚集的同时散开,避免早熟现象的出现.
💻 M
字号:
function [X,V,t,Pg,Z]=liziqun_tanli(F,dF,X0,V0,M,n,d,epsilon,iter)
for i=1:n
    f0(i)=feval(F,X0(i,:));
end
Pi=X0;
Pg=X0(1,:);
for i=2:n
    if f0(i)<feval(F,Pg)
        Pg=X0(i,:);
    end
end
Z=zeros(1,5+iter);
a=feval(F,Pg);
Z(5)=a;
k=1;l=1;q1=2;q2=2;
for t=1:iter
    for i=1:n
        I(i)=k*f0(i);
        s(i)=I(i)/M(i);
    end
    for i=1:n
        for j=1:d
            u(i,j)=V0(i,j)+q1*rand()*(Pi(i,j)-X0(i,j))+q2*rand()*(Pg(j)-X0(i,j));
        end
        u(i,:)=u(i,:)/norm(u(i,:));
        V(i,:)=s(i)*u(i,:);
        X(i,:)=X0(i,:)+V(i,:);
    end
    for i=1:n
        f(i)=feval(F,X(i,:));
        if f(i)<feval(F,Pi(i,:))
            Pi(i,:)=X(i,:);
        end
    end
    Pg1=X(1,:);
    for i=2:n
        if f(i)<feval(F,Pg1)
            Pg1=X(i,:);
        end
    end
    b=feval(F,Pg1);
    Z(t+5)=b;
    if Pg1<Pg
        Pg=Pg1;
    end
        X0=X;
        V0=V;
    f0=f;
    if feval(F,Pg)<epsilon
        break;
    end
end
shg
 clf reset
 set(gcf,'color','white','menubar','none','numbertitle','off','name','Fractal Fern')
 x=[.5;.5];
 h=plot(x(1),x(2),'.');
 darkgreen=[0 2/3 0];
 set(h,'markersize',1,'color',darkgreen,'erasemode','none');
 axis([-3 3 0 10])
 axis off
 stop=uicontrol('style','toggle','string','stop','background','white');
 drawnow
 p=[.85 .92 .99 1.00];
 A1=[.85 .04;-.04 .85];b1=[0;1.6];
 A2=[.02 -.26;.23 .22];b2=[0;1.6];
 A3=[-.15 .28;.26 .24];b3=[0;.44];
 A4=[0 0;0 .16];
 cnt=1;
 tic
 while ~get(stop,'value')
     r=rand;
     if r<p(1)
         x=A1*x+b1;
     elseif r<p(2)
         x=A2*x+b2;
     elseif r<p(3)
         x=A3*x+b3;
     else
         x=A4*x;
     end
     set(h,'xdata',x(1),'ydata',x(2));
     cnt=cnt+1;
     drawnow
 end
 t=toc;
 s=sprintf('%8.0f points in %6.3f seconds',cnt,t);
 text(-1.5,-0.5,s,'fontweight','bold');
 set(stop,'style','pushbutton','string','close','callback','close(gcf)')

⌨️ 快捷键说明

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