📄 pso3.asv
字号:
i=0;
j=0;
k=0;
y=0;
e=0;
w=[];
v=0;
b=0;
sv=0;
train=[];
dm=10000;
a=0;
k=0;
z=0;
feature=[];
rand20=zeros(20,15);
best5=zeros(5,15);
train=[];
d=zeros(690,2);
rmse=zeros(20,10);
pso_rmse=zeros(20,10);
pbest=zeros(20,15);
pbest_rmse=[];
gbest=zeros(1,15);
gbest_rmse=[100,0];
n=[];
t=[];
p=[];
p1=[];
v1=zeros(20,15);
pso=zeros(20,15);
rmse=zeros(15,10);
iteration=50;
x=zeros(690,2);
feature=zeros(690,15);
MM=zeros(6,2);
for i=1:6
MM(i,2)=1e10;
end
for i=1:690
if strcmp(textdata(i,1),'a')
x(i,1)=1;
end
if strcmp(textdata(i,1),'b')
x(i,1)=2;
end
if strcmp(textdata(i,1),'?')
x(i,1)=(x(i-1,1)+x(i+1,1))\2;
end
if strcmp(textdata(i,4),'u')
feature(i,3)=1;
end
if strcmp(textdata(i,4),'y')
feature(i,3)=0.66;
end
if strcmp(textdata(i,4),'l')
feature(i,3)=0.33;
end
if strcmp(textdata(i,4),'t')
feature(i,3)=0;
end
if strcmp(textdata(i,4),'?')
feature(i,3)=(feature(i-1,3)+feature(i+1,3))/2;
end
if strcmp(textdata(i,5),'g')
feature(i,4)=1;
end
if strcmp(textdata(i,5),'p')
feature(i,4)=0.5;
end
if strcmp(textdata(i,5),'gg')
feature(i,4)=0;
end
if strcmp(textdata(i,5),'?')
feature(i,4)=(feature(i-1,4)+feature(i+1,4))/2;
end
if strcmp(textdata(i,6),'c')
feature(i,5)=1;
end
if strcmp(textdata(i,6),'d')
feature(i,5)=0.93;
end
if strcmp(textdata(i,6),'cc')
feature(i,5)=0.86;
end
if strcmp(textdata(i,6),'i')
feature(i,5)=0.79;
end
if strcmp(textdata(i,6),'j')
feature(i,5)=0.72;
end
if strcmp(textdata(i,6),'k')
feature(i,5)=0.64;
end
if strcmp(textdata(i,6),'m')
feature(i,5)=0.56;
end
if strcmp(textdata(i,6),'r')
feature(i,5)=0.48;
end
if strcmp(textdata(i,6),'q')
feature(i,5)=0.40;
end
if strcmp(textdata(i,6),'w')
feature(i,5)=0.32;
end
if strcmp(textdata(i,6),'x')
feature(i,5)=0.24;
end
if strcmp(textdata(i,6),'e')
feature(i,5)=0.16;
end
if strcmp(textdata(i,6),'aa')
feature(i,5)=0.08;
end
if strcmp(textdata(i,6),'ff')
feature(i,5)=0;
end
if strcmp(textdata(i,6),'?')
feature(i,5)=(feature(i-1,5)+feature(i+1,5))/2;
end
if strcmp(textdata(i,7),'v')
feature(i,6)=1;
end
if strcmp(textdata(i,7),'h')
feature(i,6)=0.875;
end
if strcmp(textdata(i,7),'bb')
feature(i,6)=0.75;
end
if strcmp(textdata(i,7),'j')
feature(i,6)=0.625;
end
if strcmp(textdata(i,7),'n')
feature(i,6)=0.5;
end
if strcmp(textdata(i,7),'z')
feature(i,6)=0.375;
end
if strcmp(textdata(i,7),'dd')
feature(i,6)=0.25;
end
if strcmp(textdata(i,7),'ff')
feature(i,6)=0.125;
end
if strcmp(textdata(i,7),'o')
feature(i,6)=0;
end
if strcmp(textdata(i,7),'?')
feature(i,6)=(feature(i-1,6)+feature(i+1,6))/2;
end
if strcmp(textdata(i,9),'t')
feature(i,8)=1;
end
if strcmp(textdata(i,9),'f')
feature(i,8)=0;
end
if strcmp(textdata(i,9),'?')
feature(i,8)=(feature(i-1,8)+feature(i+1,8))\2;
end
if strcmp(textdata(i,10),'t')
feature(i,9)=1;
end
if strcmp(textdata(i,10),'f')
feature(i,9)=0;
end
if strcmp(textdata(i,10),'?')
feature(i,9)=(feature(i-1,9)+feature(i+1,9))\2;
end
if strcmp(textdata(i,12),'t')
feature(i,11)=1;
end
if strcmp(textdata(i,12),'f')
feature(i,11)=0;
end
if strcmp(textdata(i,12),'?')
feature(i,11)=(feature(i-1,11)+feature(i+1,11))\2;
end
if strcmp(textdata(i,13),'g')
feature(i,12)=1;
end
if strcmp(textdata(i,13),'p')
feature(i,12)=0.5;
end
if strcmp(textdata(i,13),'s')
feature(i,12)=0;
end
if strcmp(textdata(i,13),'?')
feature(i,12)=(feature(i-1,12)+feature(i+1,12))/2;
end
if strcmp(textdata(i,16),'+')
feature(i,15)=1;
end
if strcmp(textdata(i,16),'-')
feature(i,15)=0;
end
if strcmp(textdata(i,16),'?')
feature(i,15)=(feature(i-1,15)+feature(i+1,15))\2;
end
end
for i=1:690
if data(i,1)>MM(1,1)
MM(1,1)=data(i,1);
end
if data(i,1)<MM(1,2)
MM(1,2)=data(i,1);
end
if data(i,2)>MM(2,1)
MM(2,1)=data(i,2);
end
if data(i,2)<MM(2,2)
MM(2,2)=data(i,2);
end
if data(i,7)>MM(3,1)
MM(3,1)=data(i,7);
end
if data(i,7)<MM(3,2)
MM(3,2)=data(i,7);
end
if data(i,10)>MM(4,1)
MM(4,1)=data(i,10);
end
if data(i,10)<MM(4,2)
MM(4,2)=data(i,10);
end
if data(i,13)>MM(5,1)
MM(5,1)=data(i,13);
end
if data(i,13)<MM(5,2)
MM(5,2)=data(i,13);
end
if data(i,14)>MM(6,1)
MM(6,1)=data(i,14);
end
if data(i,14)<MM(6,2)
MM(6,2)=data(i,14);
end
end
for i=1:690
feature(i,1)=(data(i,1)-MM(1,2))/(MM(1,1)+MM(1,2));
feature(i,2)=(data(i,2)-MM(2,2))/(MM(2,1)+MM(2,2));
feature(i,7)=(data(i,7)-MM(3,2))/(MM(3,1)+MM(3,2));
feature(i,10)=(data(i,10)-MM(4,2))/(MM(4,1)+MM(4,2));
feature(i,13)=(data(i,13)-MM(5,2))/(MM(5,1)+MM(5,2));
feature(i,14)=(data(i,14)-MM(6,2))/(MM(6,1)+MM(6,2));
end
for i=1:20
pbest_rmse(i,1)=100;
pbest_rmse(i,2)=0;
end
for i=1:20
pso_rmse(i,1)=i;
pso_rmse(i,2)=1e3;
pso_rmse(i,3)=0;
end
for i=1:690
if x(i,1)==1
train(1)=i;
break;
end
end
for i=1:690
if x(i,1)==2
train(2)=i;
break;
end
end
for i=1:20
pso(i,:)=0;
w(i)=round(rand()*15+0.5);
for j=1:w(i)
z=round(rand()*15+0.5);
while(pso(i,z)~=0)
z=round(rand()*15+0.5);
if(pso(i,z)==0)
pso(i,z)=1;
break;
end
end
if(pso(i,z)==0)
pso(i,z)=1;
end
end
end
for i=1:20
for j=1:690
for b=1:2
for k=1:15
d(j,b)=d(j,b)+pso(i,k)*(feature(train(b),k)-feature(j,k))*(feature(train(b),k)-feature(j,k));
end
d(j,b)=sqrt(d(j,b));
end
if d(j,1)<d(j,2)
x(j,2)=1;
end
if d(j,1)>d(j,2)
x(j,2)=2;
end
pso_rmse(i,1)=pso_rmse(i,1)+(x(j,1)-x(j,2))*(x(j,1)-x(j,2));
if x(j,1)==1&x(j,2)==1
pso_rmse(i,3)=pso_rmse(i,3)+1;
end
if x(j,1)==1&x(j,2)==2
pso_rmse(i,4)=pso_rmse(i,4)+1;
end
if x(j,1)==2&x(j,2)==1
pso_rmse(i,5)=pso_rmse(i,5)+1;
end
if x(j,1)==2&x(j,2)==2
pso_rmse(i,6)=pso_rmse(i,6)+1;
end
end
pso_rmse(i,1)=sqrt(pso_rmse(i,1)/690);
pso_rmse(i,2)=i;
pso_rmse(i,7)=pso_rmse(i,3)/(pso_rmse(i,3)+pso_rmse(i,4));
pso_rmse(i,8)=pso_rmse(i,6)/(pso_rmse(i,5)+pso_rmse(i,6));
pso_rmse(i,9)=(pso_rmse(i,7)+pso_rmse(i,8))/2;
pso_rmse(i,10)=(pso_rmse(i,6)+pso_rmse(i,3))/(pso_rmse(i,3)+pso_rmse(i,4)+pso_rmse(i,5)+pso_rmse(i,6));
if pso_rmse(i,1)<=pbest_rmse(i,1) & pso_rmse(i,10)>=pbest_rmse(i,2)
pbest_rmse(i,1)=pso_rmse(i,1);
pbest_rmse(i,2)=pso_rmse(i,10);
for j=1:15
pbest(i,j)=pso(i,j);
end
end
if pso_rmse(i,1)<=gbest_rmse(1) & pso_rmse(i,10)>=gbest_rmse(2)
gbest_rmse(1)=pso_rmse(i,1);
gbest_rmse(2)=pso_rmse(i,10);
for j=1:15
gbest(j)=pso(i,j);
end
end
end
rand20=pso;
rmse=pso_rmse;
for iteration=1:200
pso_rmse=zeros(20,10);
for i=1:20
d=zeros(690,2);
for j=1:690
for b=1:2
for k=1:15
d(j,b)=d(j,b)+pso(i,k)*(feature(train(b),k)-feature(j,k))*(feature(train(b),k)-feature(j,k));
end
d(j,b)=sqrt(d(j,b));
end
if d(j,1)<d(j,2)
x(j,2)=1;
end
if d(j,1)>d(j,2)
x(j,2)=2;
end
if x(j,1)==1&x(j,2)==1
pso_rmse(i,3)=pso_rmse(i,3)+1;
end
if x(j,1)==1&x(j,2)==2
pso_rmse(i,4)=pso_rmse(i,4)+1;
end
if x(j,1)==2&x(j,2)==1
pso_rmse(i,5)=pso_rmse(i,5)+1;
end
if x(j,1)==2&x(j,2)==2
pso_rmse(i,6)=pso_rmse(i,6)+1;
end
pso_rmse(i,1)=pso_rmse(i,1)+(x(j,1)-x(j,2))*(x(j,1)-x(j,2));
end
pso_rmse(i,1)=sqrt(pso_rmse(i,1)/690);
pso_rmse(i,2)=i;
pso_rmse(i,7)=pso_rmse(i,3)/(pso_rmse(i,3)+pso_rmse(i,4));
pso_rmse(i,8)=pso_rmse(i,6)/(pso_rmse(i,5)+pso_rmse(i,6));
pso_rmse(i,9)=(pso_rmse(i,7)+pso_rmse(i,8))/2;
pso_rmse(i,10)=(pso_rmse(i,6)+pso_rmse(i,3))/(pso_rmse(i,3)+pso_rmse(i,4)+pso_rmse(i,5)+pso_rmse(i,6));
if pso_rmse(i,1)<=pbest_rmse(i,1) & pso_rmse(i,10)>=pbest_rmse(i,2)
pbest_rmse(i,1)=pso_rmse(i,1);
pbest_rmse(i,2)=pso_rmse(i,10);
for j=1:15
pbest(i,j)=pso(i,j);
end
end
if pso_rmse(i,1)<=gbest_rmse(1) & pso_rmse(i,10)>=gbest_rmse(2)
gbest_rmse(1)=pso_rmse(i,1);
gbest_rmse(2)=pso_rmse(i,10);
for j=1:15
gbest(j)=pso(i,j);
end
end
end
for i=1:20
w=0.5+rand()/2;
c1=-2*iteration/50+2.5;
c2=2*iteration/50+0.5;
for j=1:15
v1(i,j)=v1(i,j)*w+c1*rand()*(pbest(i,j)-pso(i,j))+c2*rand()*(gbest(j)-pso(i,j));
if v1(i,j)>6
v1(i,j)=6;
end
if v1(i,j)<-6
v1(i,j)=-6;
end
sv=1/(1+exp(-v1(i,j)));
if rand()<sv
pso(i,j)=1;
else
pso(i,j)=0;
end
end
end
end
d=zeros(690,2);
ant_rmse=zeros(15,10);
ant=zeros(15,15);
n=[];
t=[];
p=[];
p1=[];
best5=zeros(5,15);
ant_rmse_oca=[];
rmse_oca=[100,0];
ant_iteration=50;
for i=1:15
ant_rmse_oca(i,1)=i;
ant_rmse_oca(i,2)=1e3;
ant_rmse_oca(i,3)=0;
end
for j=1:19
for i=1:19
if rmse(i,1)>rmse(i+1,1)
for y=1:10
k=rmse(i,y);
rmse(i,y)=rmse(i+1,y);
rmse(i+1,y)=k;
end
end
end
end
for i=1:5
for j=1:15
best5(i,j)=rand20(rmse(i,2),j);
end
end
for i=1:15
for j=1:5
if(j==1)n(i)=0;
end
n(i)=n(i)+best5(j,i);
end
end
for i=1:15
t(i)=15/rmse(1,1);
ant(i,i)=1;
end
for ant_iteration=1:50
for j=1:15
k=0;
for z=1:15
k=k+t(z)*n(z);
end
p(j)=(t(j)*n(j))/k;
p1(j,1)=p(j);
p1(j,2)=j;
end
for i=1:15
for j=1:14
if p1(j,1)<p1(j+1,1)
for z=1:2
k=p1(j,z);
p1(j,z)=p1(j+1,z);
p1(j+1,z)=k;
end
end
end
end
ant=zeros(15,15);
for i=1:15
ant(i,i)=1;
end
for i=1:15
for j=1:15
if ant(i,p1(j,2))==0
ant(i,p1(j,2))=1;
end
d=zeros(690,2);
ant_rmse=zeros(15,10);
for j=1:690
for b=1:2
for k=1:15
d(j,b)=d(j,b)+ant(i,k)*(feature(train(b),k)-feature(j,k))*(feature(train(b),k)-feature(j,k));
end
d(j,b)=sqrt(d(j,b));
end
if d(j,1)<d(j,2)
x(j,2)=1;
end
if d(j,1)>d(j,2)
x(j,2)=2;
end
if x(j,1)==1&x(j,2)==1
ant_rmse(i,3)=ant_rmse(i,3)+1;
end
if x(j,1)==1&x(j,2)==2
ant_rmse(i,4)=ant_rmse(i,4)+1;
end
if x(j,1)==2&x(j,2)==1
ant_rmse(i,5)=ant_rmse(i,5)+1;
end
if x(j,1)==2&x(j,2)==2
ant_rmse(i,6)=ant_rmse(i,6)+1;
end
ant_rmse(i,1)=ant_rmse(i,1)+(x(j,1)-x(j,2))*(x(j,1)-x(j,2));
end
ant_rmse(i,1)=sqrt(ant_rmse(i,1)/690);
ant_rmse(i,2)=i;
ant_rmse(i,7)=ant_rmse(i,3)/(ant_rmse(i,3)+ant_rmse(i,4));
ant_rmse(i,8)=ant_rmse(i,6)/(ant_rmse(i,5)+ant_rmse(i,6));
ant_rmse(i,9)=(ant_rmse(i,7)+ant_rmse(i,8))/2;
ant_rmse(i,10)=(ant_rmse(i,6)+ant_rmse(i,3))/(ant_rmse(i,3)+ant_rmse(i,4)+ant_rmse(i,5)+ant_rmse(i,6));
if ant_rmse(i,1)<ant_rmse_oca(i,2)&ant_rmse(i,10)<ant_rmse_oca(i,3)
ant_rmse_oca(i,2)=ant_rmse(i,1);
ant_rmse_oca(i,3)=ant_rmse(i,10);
end
if ant_rmse_oca(i,2)<0.25&ant_rmse_oca(i,3)>0.95
break;
end
end
end
for j=1:15
if ant_rmse_oca(j,2)>=ant_rmse_oca(j+1,2)&ant_rmse_oca(j,3)<=ant_rmse_oca(j+1,3)
end
end
end
for i=1:15
t(i)=0.5*t(i)+ant_rmse_oca(1,2)*ant(ant_rmse_oca(1,1),i);
end
end
disp('PSO运行结果为:'+gbest_rmse(1:2));
disp(gbest(1,:));
disp('ACO运行结果为:'+ant_rmse_oca(1,2:3));
disp(ant(ant_rmse_oca(1,1),:));
disp('程序结束');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -