📄 psowpsocpsoyuanjin.m
字号:
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,10);Numcpso=zeros(1,10);Numwpso=zeros(1,10);Numde=zeros(1,7);
Rate=[0.25,0.4,0.63,1 1.6 2.5 4 6.3 10 15.849];%-6,-4,-2,0,2,4,6,8,10,12dB
for t=1:10
a=[Rate(t) 0 0 0 0 0 0 0 0 0
0 4 0 0 0 0 0 0 0 0
0 0 4 0 0 0 0 0 0 0
0 0 0 4 0 0 0 0 0 0
0 0 0 0 4 0 0 0 0 0
0 0 0 0 0 4 0 0 0 0
0 0 0 0 0 0 4 0 0 0
0 0 0 0 0 0 0 4 0 0
0 0 0 0 0 0 0 0 4 0
0 0 0 0 0 0 0 0 0 4];
W=sqrt(a);
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=[-6 -4 -2 0 2 4 6 8 10 12];
plot(x,Numpso,'b-*',x,Numcpso,'r-o',x,Numwpso,'k:x')
fix(clock)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -