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

📄 c_antcluster.m

📁 蚁群算法
💻 M
字号:
function [m_pattern]=C_AntCluster(m_pattern,patternNum)
     disType=DisSelDlg(); %获得距离计算类型
     m_min=inf;
     m_max=0;
     %计算最大最小距离
     for i=1:patternNum-1
         for j=i+1:patternNum
             temp=GetDistance(m_pattern(i),m_pattern(j),disType);
             if(m_min>temp)
                 m_min=temp;
             end
             if(m_max<temp)
                 m_max=temp;
             end
         end
     end
     %初始化参数
     r=m_min+(m_max-m_min)/2;
     counter=1;
     a=1;
     b=1;
     pc=0.8;
     %各个元素自成一类
     for i=1:patternNum
         m_center(i).index=i;
         m_parttern(i).category=i;
         m_center(i).feature=m_pattern(i).feature;
         m_center(i).patternNum=1;
     end
     centerNum=patternNum;
     %初始化参数
     tao=zeros(patternNum,patternNum);
     h=ones(patternNum,patternNum);
     distance=ones(patternNum,patternNum);
     p=zeros(1,centerNum);
     while(counter<100&&centerNum==1)
         %计算类间距离
         for i=1:centerNum-1
            temp(i)=0;
            for j=i+1:centerNum
                distance(i,j)=GetDistance(m_center(i),m_center(j),disType);
                if(distance(i,j)<r)
                    tao(i,j)=1;
                else
                    tao(i,j)=0;
                end
                h(i,j)=1;
                temp(i)=temp(i)+(tao(i,j)^a)*(h(i,j)^b);
            end
         end
         flag=1;
         for i=1:centerNum-1
             for j=i+1:centerNum
                 p(i,j)=(tao(i,j)^a)*(h(i,j)^b)/temp(i);
                 if(p(i,j)>pc)%归并j类到i类
                     pi=i;
                     pj=j;
                     flag=0;
                     break;
                 end
             end
             if(flag==0)
                 break;
             end
         end
         if(flag==0)
             break;
         end
     end
     %归并类
     if (flag==0)
         for i=1:patternNum
             if(m_pattern(i).category==pj)
                 m_pattern(i).category=pi;
             else if (m_pattern(i).category>pj)
                     m_pattern(i).category=m_pattern(i).category-1;
                 end
             end
             centerNum=centerNum-1;
             else  %无归并时退出
                 break;
         end
         %重新计算聚类中心
         for i=1:centerNum
             m_center(i)=CalCenter(m_center(i),m_pattern,patternNum);
         end
     end
                 
                 
                    
      
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
     
                 
         

⌨️ 快捷键说明

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