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

📄 pso2.asv

📁 求解离散问题的pso aco 算法
💻 ASV
字号:


for i=1:20
    for hh=1:10
        pso_rmse(i,hh)=0;%%运算前每个粒子的指标归零,重新计算
    end
    for j=1:345%%二折交叉验证开始
        dm=10000;%%给距离比较系数赋一个大值,便于比较
        for b=346:690%%对前345个样本计算与后345个样本的距离
            d=sqrt(pso(i,1)*(feature(b,1)-feature(j,1))*(feature(b,1)-feature(j,1))+pso(i,2)*(feature(b,2)-feature(j,2))*(feature(b,2)-feature(j,2))+pso(i,3)*(feature(b,3)-feature(j,3))*(feature(b,3)-feature(j,3))+pso(i,4)*(feature(b,4)-feature(j,4))*(feature(b,4)-feature(j,4))+pso(i,5)*(feature(b,5)-feature(j,5))*(feature(b,5)-feature(j,5))+pso(i,6)*(feature(b,6)-feature(j,6))*(feature(b,6)-feature(j,6))+pso(i,7)*(feature(b,7)-feature(j,7))*(feature(b,7)-feature(j,7))+pso(i,8)*(feature(b,8)-feature(j,8))*(feature(b,8)-feature(j,8))+pso(i,9)*(feature(b,9)-feature(j,9))*(feature(b,9)-feature(j,9))+pso(i,10)*(feature(b,10)-feature(j,10))*(feature(b,10)-feature(j,10))+pso(i,11)*(feature(b,11)-feature(j,11))*(feature(b,11)-feature(j,11))+pso(i,12)*(feature(b,12)-feature(j,12))*(feature(b,12)-feature(j,12))+pso(i,13)*(feature(b,13)-feature(j,13))*(feature(b,13)-feature(j,13))+pso(i,14)*(feature(b,14)-feature(j,14))*(feature(b,14)-feature(j,14))+pso(i,15)*(feature(b,15)-feature(j,15))*(feature(b,15)-feature(j,15)));
            if d<dm%%最短距离算法
                x(j,2)=x(b,1);
                dm=d;
            end
        end
        pso_rmse(i,1)=pso_rmse(i,1)+(x(j,1)-x(j,2))*(x(j,1)-x(j,2));%%离差在循环中累加,共345次;
        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
    for j=346:690
        dm=10000;%%给距离比较系数赋一个大值,便于比较
        for b=1:345%%对后345个样本计算与前345个样本的距离
            d=sqrt(pso(i,1)*(feature(b,1)-feature(j,1))*(feature(b,1)-feature(j,1))+pso(i,2)*(feature(b,2)-feature(j,2))*(feature(b,2)-feature(j,2))+pso(i,3)*(feature(b,3)-feature(j,3))*(feature(b,3)-feature(j,3))+pso(i,4)*(feature(b,4)-feature(j,4))*(feature(b,4)-feature(j,4))+pso(i,5)*(feature(b,5)-feature(j,5))*(feature(b,5)-feature(j,5))+pso(i,6)*(feature(b,6)-feature(j,6))*(feature(b,6)-feature(j,6))+pso(i,7)*(feature(b,7)-feature(j,7))*(feature(b,7)-feature(j,7))+pso(i,8)*(feature(b,8)-feature(j,8))*(feature(b,8)-feature(j,8))+pso(i,9)*(feature(b,9)-feature(j,9))*(feature(b,9)-feature(j,9))+pso(i,10)*(feature(b,10)-feature(j,10))*(feature(b,10)-feature(j,10))+pso(i,11)*(feature(b,11)-feature(j,11))*(feature(b,11)-feature(j,11))+pso(i,12)*(feature(b,12)-feature(j,12))*(feature(b,12)-feature(j,12))+pso(i,13)*(feature(b,13)-feature(j,13))*(feature(b,13)-feature(j,13))+pso(i,14)*(feature(b,14)-feature(j,14))*(feature(b,14)-feature(j,14))+pso(i,15)*(feature(b,15)-feature(j,15))*(feature(b,15)-feature(j,15)));
            if d<dm%%最短距离算法
                x(j,2)=x(b,1);
                dm=d;
            end
        end
        pso_rmse(i,1)=pso_rmse(i,1)+(x(j,1)-x(j,2))*(x(j,1)-x(j,2));%%离差在循环中累加,共345次,与上面
        %%的345次累加完成对690个样本的离差和累加
        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,10)%%如果粒子当前结果优于自身最优位置
        for h=1:10
            pbest_rmse(i,h)=pso_rmse(i,h);%%自身最优位置的指标修改为当前的指标
        end
        for j=1:15
            pbest(i,j)=pso(i,j);%%自身最优位置修改为当前位置
        end
     end
     if pso_rmse(i,1)<=gbest_rmse(1,1) & pso_rmse(i,10)>=gbest_rmse(1,10)%%如果粒子当前结果优于整体最优位置
         for h=1:10
             gbest_rmse(1,h)=pso_rmse(i,h);%%整体最优位置的指标修改为当前的指标
         end
        for j=1:15
            gbest(1,j)=pso(i,j);%%整体最优位置修改为当前位置
        end
     end
end

rmse=pso_rmse;%%由于20组粒子的初始位置是随机得到,所以ACO中的20组初始指标直接使用该20组粒子的指标
rand20=pso;%%由于20组粒子的初始位置是随机得到,所以ACO中的20组初始位置值直接使用该20组粒子的初始位置

for iteration=1:50%%迭代50次
    pso_rmse=zeros(20,10);%%每迭代一次粒子的指标归零
    for i=1:20%%下面的算法与初始值时的二折算法一样,故不作标注
        for hh=1:10
            pso_rmse(i,hh)=0;
        end
        for j=1:345
            dm=10000;
            for b=346:690
                d=sqrt(pso(i,1)*(feature(b,1)-feature(j,1))*(feature(b,1)-feature(j,1))+pso(i,2)*(feature(b,2)-feature(j,2))*(feature(b,2)-feature(j,2))+pso(i,3)*(feature(b,3)-feature(j,3))*(feature(b,3)-feature(j,3))+pso(i,4)*(feature(b,4)-feature(j,4))*(feature(b,4)-feature(j,4))+pso(i,5)*(feature(b,5)-feature(j,5))*(feature(b,5)-feature(j,5))+pso(i,6)*(feature(b,6)-feature(j,6))*(feature(b,6)-feature(j,6))+pso(i,7)*(feature(b,7)-feature(j,7))*(feature(b,7)-feature(j,7))+pso(i,8)*(feature(b,8)-feature(j,8))*(feature(b,8)-feature(j,8))+pso(i,9)*(feature(b,9)-feature(j,9))*(feature(b,9)-feature(j,9))+pso(i,10)*(feature(b,10)-feature(j,10))*(feature(b,10)-feature(j,10))+pso(i,11)*(feature(b,11)-feature(j,11))*(feature(b,11)-feature(j,11))+pso(i,12)*(feature(b,12)-feature(j,12))*(feature(b,12)-feature(j,12))+pso(i,13)*(feature(b,13)-feature(j,13))*(feature(b,13)-feature(j,13))+pso(i,14)*(feature(b,14)-feature(j,14))*(feature(b,14)-feature(j,14))+pso(i,15)*(feature(b,15)-feature(j,15))*(feature(b,15)-feature(j,15)));
                if d<dm
                    x(j,2)=x(b,1);
                    dm=d;
                end
            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
        for j=346:690
            dm=10000;
            for b=1:345
                d=sqrt(pso(i,1)*(feature(b,1)-feature(j,1))*(feature(b,1)-feature(j,1))+pso(i,2)*(feature(b,2)-feature(j,2))*(feature(b,2)-feature(j,2))+pso(i,3)*(feature(b,3)-feature(j,3))*(feature(b,3)-feature(j,3))+pso(i,4)*(feature(b,4)-feature(j,4))*(feature(b,4)-feature(j,4))+pso(i,5)*(feature(b,5)-feature(j,5))*(feature(b,5)-feature(j,5))+pso(i,6)*(feature(b,6)-feature(j,6))*(feature(b,6)-feature(j,6))+pso(i,7)*(feature(b,7)-feature(j,7))*(feature(b,7)-feature(j,7))+pso(i,8)*(feature(b,8)-feature(j,8))*(feature(b,8)-feature(j,8))+pso(i,9)*(feature(b,9)-feature(j,9))*(feature(b,9)-feature(j,9))+pso(i,10)*(feature(b,10)-feature(j,10))*(feature(b,10)-feature(j,10))+pso(i,11)*(feature(b,11)-feature(j,11))*(feature(b,11)-feature(j,11))+pso(i,12)*(feature(b,12)-feature(j,12))*(feature(b,12)-feature(j,12))+pso(i,13)*(feature(b,13)-feature(j,13))*(feature(b,13)-feature(j,13))+pso(i,14)*(feature(b,14)-feature(j,14))*(feature(b,14)-feature(j,14))+pso(i,15)*(feature(b,15)-feature(j,15))*(feature(b,15)-feature(j,15)));
                if d<dm
                    x(j,2)=x(b,1);
                    dm=d;
                end
            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,10)
            for h=1:10
                pbest_rmse(i,h)=pso_rmse(i,h);
            end
            for j=1:15
                pbest(i,j)=pso(i,j);
            end
        end
        if pso_rmse(i,1)<=gbest_rmse(1,1) & pso_rmse(i,10)>=gbest_rmse(1,10)
            for h=1:10
                gbest_rmse(1,h)=pso_rmse(i,h);
            end
            for j=1:15
                gbest(1,j)=pso(i,j);
            end
        end
    end
    
    for i=1:20%%对于每个粒子进行粒子群算法的迭代
        w=0.5+rand()/5;%%懒惰因子的计算
        c1=2;%%学习因子计算
        c2=2;%%学习因子计算
        for j=1:15
            v1(i,j)=v1(i,j)*w+c1*rand()*(pso(i,j)-pbest(i,j))+c2*rand()*(pso(i,j)-gbest(1,j));%%速度计算
            if v1(i,j)>6
                v1(i,j)=4.5;
            end
            if v1(i,j)<-6
                v1(i,j)=-4.5;
            end
            sv=1/(1+exp(-v1(i,j)));
            if rand()<sv
                pso(i,j)=1;
            else
                pso(i,j)=0;
            end
        end
    end
end
    

disp('PSO运行结果为:'+gbest_rmse(1,:));
disp(gbest(1,:));

disp('程序结束');

⌨️ 快捷键说明

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