📄 c_antclusterknown.m
字号:
function [m_pattern]=C_AntClusterKnown(m_pattern,patternNum)
for i=1:14
for j=1:2
m_pattern(i,j)=round(2*rand());
end
end
patternNum=14;
centerNum=2; iterNum=100;
antNum=200;rho=0.1;q=0.5;
tao=ones(patternNum,centerNum);%14*2
tao=tao*0.01;
solution=zeros(antNum,patternNum+1);
for i=1:centerNum
%m_center(i).feature=m_pattern(i).feature;
m_center(i).index=i;
m_center(i).patternNum=0;
end
counter=0;
bestVal=inf;
while(counter<iterNum)
solution=0*solution;
if (counter==0)
for i=1:antNum
solution(i,1:patternNum)=randperm(patternNum);
for j=1:patternNum
if (solution(i,j)>centerNum)
solution(i,j)=fix(rand*centerNum+1);
end
%m_pattern(j).category=solution(i,j);
end
for j=1:centerNum
m_center(j)=CalCenter( m_center(j),m_pattern,patternNum);
end
m_antCenter(i).m_center=m_center;
for j=1:patternNum
solution(i,patternNum+1)=solution(i,patternNum+1)+GetDistance(m_pattern(j),m_center(solution(i,j)));
end
end
else
r=rand(antNum,patternNum);%200*14
for i=1:antNum
for j=1:patternNum
if (r(i,j)<q)
[C,R]=max(tao(j,:));%返回最大值和位置
solution(i,j)=R;
else temp=sum(tao(j,:));
tp=tao(j,:)/temp;
for m=2:centerNum
tp(m)=tp(m)+tp(m-1);
end
rp=rand;
for m=1:centerNum
if (rp<=tp(m))
solution(i,j)=m;
break;
end
end
end
m_pattern(j).category=solution(i,j);
end
for j=1:centerNum
m_center(j)=CalCenter( m_center(j),m_pattern,patternNum);
end
m_antCenter(i).m_center=m_center;
for j=1:patternNum
solution(i,patternNum+1)=solution(i,patternNum+1)+GetDistance(m_pattern(j),m_center(solution(i,j)));
end
end %fori=1:antnum
end %if (counter==0)
for i=1:antNum-1
for j=i+1:antNum
if (solution(i,patternNum+1)>solution(j,patternNum+1))
temp=solution(i,:);
solution(i,:)=solution(j,:);
solution(j,:)=temp;
temp2=m_antCenter(i);
m_antCenter(i)=m_antCenter(j);
m_antCenter(j)=temp2;
end
end
end
jp=0.2;
L=2;k=1;
tempSolution=solution;
while (k<=L)
r=rand(1,patternNum);
for j=1:patternNum
m_pattern(j).category=solution(k,j);
end
for i=1:patternNum
if (r(1,j)<jp)
dis=inf;
pj=0;
for j=1:centerNum
if(j~=m_pattern(i).category)
disTemp=GetDistance(m_pattern(i),m_antCenter(k).m_center(j));
if(dis>disTemp)
dis=disTemp;
pj=j;
end
end
end
m_pattern(i).category=pj;
end
end
for j=1:centerNum
m_antCenter(k).m_center(j)=CalCenter( m_antCenter(k).m_center(j),m_pattern,patternNum);
end
solution(k,patternNum+1)=0;
for j=1:patternNum
solution(k,patternNum+1)=solution(k,patternNum+1)+GetDistance(m_pattern(j),m_center(solution(k,j)));
end
if(solution(k,patternNum+1)>tempSolution(k,patternNum+1))
solution(k,:)=tempSolution(k,:);
end
if(solution(k,patternNum+1)<bestVal)
bestVal=solution(k,patternNum+1);
bestCluster=solution(k,:);
t=counter;
end
k=k+1;
end
if(bestVal==0)%counter-t>iterNum/2||
break;
end
tSum=zeros(patternNum,centerNum);
for m=1:L
for i=1:patternNum
for j=1:centerNum
if (solution(m,i)==j)
tSum(i,j)=tSum(i,j)+0.01/solution(m,patternNum+1);
end
end
end
end
tao=(1-rho)*tao+tSum;
counter=counter+1;
end %while 总循环
for i=1:patternNum
m_pattern(i).category=bestCluster(i);
end
disp(tao);
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -