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

📄 psigmod.m

📁 介绍粒子群算法的多用户检测。里面有四个程序。
💻 M
字号:
function [X,trace]=pso_sigmod(cycle_T,y,R,iR,A,M)
Population=20;
maxg=10;
c1=2;
c2=2;
vmax=4;


for run=1:1
   
    suiji=rand(M-1,Population);
    a(1,1:Population)=randsrc(1,Population);
    b=double(suiji>=1/2);
    b1=reshape(b,1,(M-1)*Population);
    ind=find(b1==1);
    data=randsrc(1,length(ind));
    b1(ind)=data;
    a(2:M,1:Population)=reshape(b1,M-1,Population);

%     a=ones(M,Population);
    v=rand(M,Population)*vmax;
    fit=utilityfair(y,R,iR,A,a);    
    [best,bestindex]=max(fit);
    pgmax=a(:,bestindex);
    pimax=a;
    fitmax=fit;
    fgmax=max(fit);
    trace(cycle_T,1)=fgmax;
    for diedai=2:maxg
        for i=1:Population
                    m=1;
                    v(m,i)=v(m,i)+c1*rand(1)*(pimax(m,i)-a(m,i))+c2*rand(1)*(pgmax(m)-a(m,i));
                    if v(m,i)>vmax
                        v(m,i)=vmax;
                    end
                    if v(m,i)<-vmax
                        v(m,i)=-vmax;
                    end
                    if rand(1)<1/(1+exp(-v(m,i)))
                        a(m,i)=1;
                    else
                        a(m,i)=-1;
                    end
        
            for m=2:M
                    v(m,i)=v(m,i)+c1*rand(1)*(pimax(m,i)-a(m,i))+c2*rand(1)*(pgmax(m)-a(m,i));
                    if v(m,i)>vmax
                        v(m,i)=vmax;
                    end
                    if v(m,i)<-vmax
                        v(m,i)=-vmax;
                    end
                    temp=rand(1)*2*vmax-vmax;
                    if 2/(1+exp(-v(m,i)))-1<-abs(temp)
                        a(m,i)=-1;
                    elseif 2/(1+exp(-v(m,i)))-1>abs(temp)
                        a(m,i)=1;
                    else a(m,i)=0;
                    end
             end
         end

        fitnew=utilityfair(y,R,iR,A,a);
        for i=1:Population
            if fitnew(i)>fitmax(i)
                fitmax(i)=fitnew(i);
                pimax(:,i)=a(:,i);
            end
            if fitnew(i)>fgmax
                pgmax=a(:,i);
                fgmax=fitnew(i);
            end
        end
        trace(cycle_T,diedai)=fgmax;
    end
end
X=pgmax;

⌨️ 快捷键说明

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