您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 17遗传算法改进的模糊C-均值聚类MATLAB源代码
欢迎访问GreenSim团队主页→邮箱:greensim@163.com第1页遗传算法改进的模糊C-均值聚类MATLAB源代码模糊C-均值算法容易收敛于局部极小点,为了克服该缺点,将遗传算法应用于模糊C-均值算法(FCM)的优化计算中,由遗传算法得到初始聚类中心,再使用标准的模糊C-均值聚类算法得到最终的分类结果。function[BESTX,BESTY,ALLX,ALLY]=GAFCM(K,N,Pm,LB,UB,D,c,m)%%此函数实现遗传算法,用于模糊C-均值聚类%GreenSim团队——专业级算法设计&代写程序%欢迎访问GreenSim团队主页→输入参数列表%K迭代次数%N种群规模,要求是偶数%Pm变异概率%LB决策变量的下界,M×1的向量%UB决策变量的上界,M×1的向量%D原始样本数据,n×p的矩阵%c分类个数%m模糊C均值聚类数学模型中的指数%%输出参数列表%BESTXK×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体%BESTYK×1矩阵,记录每一代的最优个体的评价函数值%ALLXK×1细胞结构,每一个元素是M×N矩阵,记录全部个体%ALLYK×N矩阵,记录全部个体的评价函数值%%第一步:M=length(LB);%决策变量的个数%种群初始化,每一列是一个样本farm=zeros(M,N);fori=1:Mx=unifrnd(LB(i),UB(i),1,N);farm(i,:)=x;end%输出变量初始化ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值k=1;%迭代计数器初始化%%第二步:迭代过程whilek=K%%以下是交叉过程newfarm=zeros(M,2*N);Ser=randperm(N);%两两随机配对的配对表欢迎访问GreenSim团队主页→邮箱:greensim@163.com第2页A=farm(:,Ser(1));B=farm(:,Ser(2));P0=unidrnd(M-1);a=[A(1:P0,:);B((P0+1):end,:)];%产生子代ab=[B(1:P0,:);A((P0+1):end,:)];%产生子代bnewfarm(:,2*N-1)=a;%加入子代种群newfarm(:,2*N)=b;fori=1:(N-1)A=farm(:,Ser(i));B=farm(:,Ser(i+1));P0=unidrnd(M-1);a=[A(1:P0,:);B((P0+1):end,:)];b=[B(1:P0,:);A((P0+1):end,:)];newfarm(:,2*i-1)=a;newfarm(:,2*i)=b;endFARM=[farm,newfarm];%%选择复制SER=randperm(3*N);FITNESS=zeros(1,3*N);fitness=zeros(1,N);fori=1:(3*N)Beta=FARM(:,i);FITNESS(i)=FIT(Beta,D,c,m);endfori=1:Nf1=FITNESS(SER(3*i-2));f2=FITNESS(SER(3*i-1));f3=FITNESS(SER(3*i));iff1=f2&&f1=f3farm(:,i)=FARM(:,SER(3*i-2));fitness(:,i)=FITNESS(:,SER(3*i-2));elseiff2=f1&&f2=f3farm(:,i)=FARM(:,SER(3*i-1));fitness(:,i)=FITNESS(:,SER(3*i-1));elsefarm(:,i)=FARM(:,SER(3*i));fitness(:,i)=FITNESS(:,SER(3*i));endend%%记录最佳个体和收敛曲线X=farm;Y=fitness;ALLX{k}=X;欢迎访问GreenSim团队主页→邮箱:greensim@163.com第3页ALLY(k,:)=Y;minY=min(Y);pos=find(Y==minY);BESTX{k}=X(:,pos(1));BESTY(k)=minY;%%变异fori=1:NifPmrand&&pos(1)~=iAA=farm(:,i);BB=GaussMutation(AA,LB,UB);farm(:,i)=BB;endenddisp(k);k=k+1;end%%绘图BESTY2=BESTY;BESTX2=BESTX;fork=1:KTempY=BESTY(1:k);minTempY=min(TempY);posY=find(TempY==minTempY);BESTY2(k)=minTempY;BESTX2{k}=BESTX{posY(1)};endBESTY=BESTY2;BESTX=BESTX2;plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)ylabel('函数值')xlabel('迭代次数')
本文标题:17遗传算法改进的模糊C-均值聚类MATLAB源代码
链接地址:https://www.777doc.com/doc-5401244 .html