📄 psigmod.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 + -