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

📄 pso3.asv

📁 求解离散问题的pso aco 算法
💻 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 + -