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

📄 psowpsocpso.asv

📁 pso应用基本程序
💻 ASV
字号:
clear
fix(clock)
dim=10;
  N=29; %粒子数
iter=30; %迭代次数
R3=(1/31)*[31 -1 -9 7 -1 7 7 -9 -1 -1
           -1 31 7 -9 -1 7 -9 7 -1 -1
           -9 7 31 -1 7 -1 -1 -1 7 -9
            7 -9 -1 31 7 -1 -1 -1 7 7
           -1 -1 7 7 31 7 -9 -9 -1 -1
           7 7 -1 -1 7 31 -1 -1 -9 7
           7 -9 -1 -1 -9 -1 31 -1 7 7
          -9 7 -1 -1 -9 -1 -1 31 7 7
           -1 -1 7 7 -1 -9 7 7 31 -1
           -1 -1 -9 7 -1 7 7 7 -1 31]; %10个用户
Numpso=zeros(1,7);Numcpso=zeros(1,7);Numwpso=zeros(1,7);Numde=zeros(1,7);


Rate=[1 1.6 2.5 4 6.3 10 15.849];%0,2,4,6,8,10,12dB


for    t=1:7
    
    W=sqrt(eye(dim)*Rate(t));  
    H=zeros(dim,dim);
    H=W'*R3*W;       
    input=zeros(dim,N);
    for i=1:N%第一个是传统检测器输出值    
        for j=1:dim
            input(j,i)=rand(1)-0.5;   
        end
    end
    
    for i=1:30   %1000
        b0=sign(rand(1,dim)-0.5);
        if b0==0
            b0=-1
        end
        b0=b0';
        %产生噪声n(10,1)方差为1
        n=randn(1,dim);
        n=n';
        %产生输出Y
         Y=H*b0+n;          %%Y=R*W*b0+n;


%此段程序是关于基本粒子群优化算法
        E1=zeros(1,N);
        v1=zeros(dim,N);
        c1=zeros(dim,N);
        c1=input;
        v1=2*0.15*rand(dim,N)-0.15;  %%v1=rand(10,N)-0.5;
        for l=1:iter %终止条件迭代次数30    
            for i1=1:N
                b1=c1(:,i1);         
                E1(i1)=0.5*b1'*H*b1-b1'*Y; % 评价各个粒子的函数值 E1(i1)=0.5*b1'*H*b1-Y'*b1;
            end
            %初始局部最小函数值即单个粒子所达到的最小函数值p及其对应位置bp
            if l==1    
                p1=zeros(1,N);
                bp1=zeros(dim,N);
                p1=E1;
                bp1=c1;     
                [g1 i2]=min(E1);%初始全局最小函数值g及其所对应的位置bg
                bg1=zeros(dim,1);             
                bg1=c1(:,i2); 
            end
            for i3=1:N
                if E1(i3)<p1(i3)
                    p1(i3)=E1(i3);
                    bp1(:,i3)=c1(:,i3);
                end
            end
            for i4=1:N
                if p1(i4)<g1
                    g1=p1(i4);
                    bg1=bp1(:,i4);               %m=i4;
                end
            end
            %根据下式改变每个粒子的速度与位置
            for i5=1:N
                
                b1=c1(:,i5);
                v1(:,i5)=v1(:,i5)+2*rand(dim,1).*(bp1(:,i5)-b1)+ 2*rand(dim,1).*(bg1-b1);
                for i6=1:dim
                    for j2=1:N
                        if v1(i6,j2)<-0.15  %-0.5
                            v1(i6,j2)=-0.15; %-0.5
                        end
                        if v1(i6,j2)>0.15  %0.5
                            v1(i6,j2)=0.15;  %0.5
                        end
                    end
                end
                b1=b1+v1(:,i5);
                if b1<-0.5
                   b1=-0.5;
                end
                if b1>0.5
                   b1=0.5;
                end
                c1(:,i5)=b1;
            end       
        end
        pso=sign(bg1);
        Numpso(t)=Numpso(t)+sum(ne(pso,b0));
                
   %此段程序是关于压缩因子粒子群优化算法
        E1=zeros(1,N);
        v1=zeros(dim,N);
        c1=zeros(dim,N);
        c1=input;
        v1=2*0.1*rand(dim,N)-0.1;  %%v1=rand(10,N)-0.5;
        for l=1:iter %终止条件迭代次数30    
            for i1=1:N
                b1=c1(:,i1);         
                E1(i1)=0.5*b1'*H*b1-b1'*Y; % 评价各个粒子的函数值 E1(i1)=0.5*b1'*H*b1-Y'*b1;
            end
            %初始局部最小函数值即单个粒子所达到的最小函数值p及其对应位置bp
            if l==1    
                p1=zeros(1,N);
                bp1=zeros(dim,N);
                p1=E1;
                bp1=c1;     
                [g1 i2]=min(E1);%初始全局最小函数值g及其所对应的位置bg
                bg1=zeros(dim,1);             
                bg1=c1(:,i2); 
            end
            for i3=1:N
                if E1(i3)<p1(i3)
                    p1(i3)=E1(i3);
                    bp1(:,i3)=c1(:,i3);
                end
            end
            for i4=1:N
                if p1(i4)<g1
                    g1=p1(i4);
                    bg1=bp1(:,i4);               %m=i4;
                end
            end
            %根据下式改变每个粒子的速度与位置
            for i5=1:N
                
                b1=c1(:,i5);
                v1(:,i5)=0.7298*(v1(:,i5)+2.05*rand(dim,1).*(bp1(:,i5)-b1)+ 2.05*rand(dim,1).*(bg1-b1));
                for i6=1:dim
                    for j2=1:N
                        if v1(i6,j2)<-0.1  %-0.5
                            v1(i6,j2)=-0.1; %-0.5
                        end
                        if v1(i6,j2)>0.1  %0.5
                            v1(i6,j2)=0.1;  %0.5
                        end
                    end
                end
                b1=b1+v1(:,i5);
                if b1<-0.5
                   b1=-0.5;
                end
                if b1>0.5
                   b1=0.5;
                end
                c1(:,i5)=b1;
            end       
        end
        cpso=sign(bg1);
        Numcpso(t)=Numcpso(t)+sum(ne(cpso,b0));

%此段程序是关于惯性权重粒子群优化算法
        E1=zeros(1,N);
        v1=zeros(dim,N);
        c1=zeros(dim,N);
        c1=input;
        v1=2*0.1*rand(dim,N)-0.1;  %%v1=rand(10,N)-0.5;
        for l=1:iter %终止条件迭代次数30    
            for i1=1:N
                b1=c1(:,i1);         
                E1(i1)=0.5*b1'*H*b1-b1'*Y; % 评价各个粒子的函数值 E1(i1)=0.5*b1'*H*b1-Y'*b1;
            end
            %初始局部最小函数值即单个粒子所达到的最小函数值p及其对应位置bp
            if l==1    
                p1=zeros(1,N);
                bp1=zeros(dim,N);
                p1=E1;
                bp1=c1;     
                [g1 i2]=min(E1);%初始全局最小函数值g及其所对应的位置bg
                bg1=zeros(dim,1);             
                bg1=c1(:,i2); 
            end
            for i3=1:N
                if E1(i3)<p1(i3)
                    p1(i3)=E1(i3);
                    bp1(:,i3)=c1(:,i3);
                end
            end
            for i4=1:N
                if p1(i4)<g1
                    g1=p1(i4);
                    bg1=bp1(:,i4);               %m=i4;
                end
            end
            %根据下式改变每个粒子的速度与位置
            for i5=1:N
                
                b1=c1(:,i5);
                v1(:,i5)=0.7*v1(:,i5)+2*rand(dim,1).*(bp1(:,i5)-b1)+ 2*rand(dim,1).*(bg1-b1);
                for i6=1:dim
                    for j2=1:N
                        if v1(i6,j2)<-0.1  %-0.5
                            v1(i6,j2)=-0.1; %-0.5
                        end
                        if v1(i6,j2)>0.1  %0.5
                            v1(i6,j2)=0.1;  %0.5
                        end
                    end
                end
                b1=b1+v1(:,i5);
                if b1<-0.5
                   b1=-0.5;
                end
                if b1>0.5
                   b1=0.5;
                end
                c1(:,i5)=b1;
            end       
        end
        wpso=sign(bg1);
        Numwpso(t)=Numwpso(t)+sum(ne(wpso,b0));

          end 
                              end
               Numpso=Numpso/300,
               Numcpso=Numcpso/300,
               Numwpso=Numwpso/300,
       x=[0 2 4 6 8 10 12];
              plot(x,Numpso,'b-*',x,Numcpso,'r-o',x,Numwpso,'m:x')
          fix(clock)



⌨️ 快捷键说明

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