机器学习之基于matlab的神经网络粒子群优化算法的实现

实现算法的论文,代码源码,测试函数,请见本人的git账户:
https://github.com/qiu997018209/MachineLearning

以下是mymain.m文件内容

 clear 
% mex cec13_func.cpp -DWINDOWS
func_num=1;
D=10;
VRmin=-100;
VRmax=100;
N=40;
Max_Gen=5000;
runs=1
fhd=str2func('cec14_func');



for i=1
    func_num=i;
    for j=1:runs

    [gbest,gbestval,pop]=myfunc(fhd,D,N,Max_Gen,VRmin,VRmax,func_num);
    xbest(i,:)=gbest
    fbest(i,j)=gbestval
   % plot(pbest(:,1)
   % plot(x,y)
    %plot(x,yy)
   % hold(a1,a2);
    %axis([500 5000,10^2 10^5]);
    %title(['适应度曲线  ' '终止代数=' num2str(Max_Gen)]);
     %xlabel('进化代数');ylabel('适应度');
    end
    f_mean(i)=mean(fbest(i,j))

end

以下是myfunc.m文件内容


function[gbest,gbestval,pop]=myfunc(fhd,D,N,Max_Gen,VRmin,VRmax,varargin);
%------给定初始化条件----------------------------------------------
%问题要么在邻域部分,要么在速度更新。我在只更换速度公式的时候是可以得到一个明显的改善的

clc;
rand('state',sum(100*clock));
c=[0.5+log(2),0.5+log(2)];
%c=[2 2];
%w=1/(2*log(2));
w=0.9-(1:Max_Gen).*(0.5./Max_Gen)
Vmax=50;
Vmin=-50;
%------初始化种群的个体------------
%pbest 个体最佳,lbest 邻域最佳,gbest,全局最佳,VRmax,粒子范围,Vmin速度范围。
pop=VRmin+(VRmax-VRmin).*rand(N,D);
vel=0.5*(Vmin+(Vmax-Vmin).*rand(N,D)-pop);
%vel=Vmin+2.*Vmax.*rand(N,D)
e=feval(fhd,pop',varargin{:});


%% 个体极值和群体极值
pbest=pop; %个体最佳
pbestval=e;%个体最佳适应度值
[gbestval bestindex]=min(e);
gbest=pbest(bestindex,:);%全局最佳
%gbestrep=repmat(gbest,N,1);
n(1)=gbestval;

k=3;
%拓扑结构
for i=1:N;
   a1=[1:i-1,i+1:N];
   a1= a1(randperm(N-1));
   a2=a1(1:k);
   a3(i,:)=[a2,i];
   a4=a3(i,:);
   [lbestval(i),a5]=min(pbestval(a3(i,:)));
    a6=a4(a5);
   lbest(i,:)=pbest(a6,:);%邻域
end
%在更换速度公式的时候,可以更换变量
%gbestrep=repmat(gbest,N,1);
%aa=c(1).*rand(N,D).*(pbest-pop)+c(2).*rand(N,D).*(gbestrep-pop);
%vel=w(j).*vel+aa;


%% 迭代寻优

for j=2:Max_Gen;
    %更新速度
       l=pop+c(2)*rand(N,D).*(lbest-pop);%邻域
       p=pop+c(1)*rand(N,D).*(pbest-pop);%个体最佳
       G=(p+l+pop)/3;
       %aa=c(1).*rand(N,D).*(pbest-pop)+c(2).*rand(N,D).*(gbestrep-pop);
       %vel=w(j).*vel+aa;
       R=abs(G-pop);
       vel=w(j).*vel+G+(-1+rand(N,D)*2).*R
       vel=(vel>Vmax).*Vmax+(vel<=Vmax).*vel;
       vel=(vel=Vmin).*vel;
      %更新位置 
       pop=vel+pop;
       pop=((pop>=VRmin)&(pop<=VRmax)).*pop...
            +(popVRmax).*(VRmax-0.25.*(VRmax-VRmin).*rand(N,D));
      %pop=((pop>=VRmin)&(pop<=VRmax)).*pop...
          %+(popVRmax).*(VRmax);
       vel=((pop>=Vmin)&(pop<=Vmax)).*vel+(popVmax).*0;
      %获取适应值
       e=feval(fhd,pop',varargin{:});
       %更新pbest,历史最佳
       t=(e       %更新lbest,局部最佳
       for i=1:N;
        a7=a3(i,:);
       [lbestval(i),m1]=min(pbestval(a3(i,:)))
       a8=a7(m1);
       lbest(i,:)=pbest(a8,:);
       end
      %得到全局最佳
       [gbestval id]=min(pbestval);
        n(j)=gbestval;
        gbest=pbest(id,:);
        gbestrep=repmat(gbest,N,1)
        %变更拓扑结构
       if isequal(n(j-1),n(j));
          for i=1:N;
          a1=[1:i-1,i+1:N];
          a1= a1(randperm(N-1));
          a2=a1(1:k);
          a3(i,:)=[a2,i];
          a4=a3(i,:);
          [lbestval(i),a5]=min(pbestval(a3(i,:)));
           a6=a4(a5);
           lbest(i,:)=pop(a6,:);
          end
       end
end



end

















你可能感兴趣的:(机器学习之基于matlab的神经网络粒子群优化算法的实现)