📄 zyfclass.m
字号:
%%无监督的人工免疫分类器UAIC
%%mwp
function main()
clc; clear all;
Time=input('输入执行次数后按回车开始运行:');
S=3; %S表示训练样区个数
k=100; %k表示每个样区的训练样本个数
n=3; %n每个样本的特征值个数
m=23; %每个特征值用m位二进制表示
r=0.05; %抑制率
c=0.05; %克隆率
load SAriver3 %读入样本数据
SA=sarsamples;
l=n*m; %l表示编码序列的长度
pm=0.1; %pm表示变异概率
pc=0.5; %pc表示交叉概率
T=0.005; %T表示终止条件阈值
gmax=100;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Datime=date;
Datime(size(Datime,2)-4:size(Datime,2))=[];%%记录测试日期
CPUT=floor(cputime);%%记录CPU时间
Method='UAIC';
center=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for time=1:Time
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%初始化抗体群
% load pick
% pick1=index1;
% pick2=index2;
% SA1=SA(pick1,:);%取出第一个样区的所有样本点
% sa=ceil(rand(1,100)*52686+1-0.5);
% for i=1:k
% sa1(i,:)=SA1(sa(i),:); %sa1表示某个样区的样本,任取一百个训练样本
% end
% SA1=SA(pick2,:);%取出第二个样区的所有样本点
% sa=ceil(rand(1,1000)*12848+1-0.5);
% for i=1:k
% sa1(i,:)=SA1(sa(i),:); %sa1表示某个样区的样本,任取一百个训练样本
% end
SA1=SA;
% for i=1:10
% sa1(1+(i-1)*10:10*i,:)=SA1(45613+(i-1)*256:45622+(i-1)*256,:); %sa1表示某个样区的样本,任取一百个训练样本
% end
% for i=1:10
% sa1(1+(i-1)*10:10*i,:)=SA1(38234+(i-1)*256:38243+(i-1)*256,:); %sa1表示某个样区的样本,任取一百个训练样本
% end
for i=1:10
sa1(1+(i-1)*10:10*i,:)=SA1(6016+(i-1)*256:6025+(i-1)*256,:); %sa1表示某个样区的样本,任取一百个训练样本
end
% load pickriver3
% sample1=b;
% for i=1:k
% sa1(i,:)=SA1(sample1(i),:); %sa1表示某个样区的样本,任取一百个训练样本
% end
[sx,sy]=size(sa1);
C=mean(sa1,1); %C表示某个样区的中心,初始化样区中心
POP=coding(l,sa1); %对某个样区内的样本进行二进制编码,初始化种群
fit=fitcom(C,sa1); %计算亲和度函数值
aa=[];bb=[];
[aa,bb]=sort(-fit); %将亲和度从大到小排序
fit=-aa;
Smax=sa1(bb(1),:);
Pmax=POP(bb(1),:); %选出适应度值最大的个体
NM=ceil(sx*r);
ME=[];
MEpop=[];
for i=1:sx-NM
MEpop(i,:)=POP(bb(i),:);
end%抗体抑制
cloneover=MEpop;
[cloneover] = Mclone_sub(Pmax,cloneover,c,pm,pc,sx);%%对所选择出的抗体进行克隆然后交叉变异
newPOP=cloneover;%产生新的种群
fitf=sum(fit);
newsa=decoding(newPOP,sy);
newC=mean(newsa,1);
fitt=fitcom(newC,newsa);
fita=sum(fitt);
it=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while abs(fitf-fita)>T
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cc=[];dd=[];
[cc,dd]=sort(-fitt); %将亲和度从大到小排序
Fit=-cc;
Nmax=newsa(dd(1),:);
Nmax=newPOP(dd(1),:); %选出适应度值最大的个体
NN=ceil(sx*r);
NE=[];
NEpop=[];
for i=1:sx-NN
NEpop(i,:)=newPOP(dd(i),:);
end%抗体抑制
Ncloneover=NEpop;
[Ncloneover] = Mclone_sub(Nmax,Ncloneover,c,pm,pc,sx);%%对所选择出的抗体进行克隆然后交叉变异
newPOP=Ncloneover;
newsa=decoding(newPOP,sy);
newC=mean(newsa,1);
%%更新抗体群
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fitf=sum(Fit);
fitt=fitcom(newC,newsa);
fita=sum(fitt);
it=it+1;
% disp(sprintf('time: %d generation: %d center: %d ',time,it,newC));
disp(sprintf('time: %d generation: %d fitf: %d fita: %d',time,it,fitf,fita));
% disp(sprintf('time: %d center: %d',time,newC));
end %迭代结束标志
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Times=time;
center=[center;newC];
eval(['save ' Method Datime num2str(CPUT) ' gmax center Times CPUT Datime fitf fita']) ;
end %%运行次数结束标志
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -