【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】

一、简介

1 遗传算法简介
遗传算法是一种模拟自然进化的优化搜索算法。由于它仅依靠适应度函数就可以搜索最优解,不需要有关问题解空间的知识,并且适应度函数不受连续可微等条件的约束,因此在解决多维、高度非线性的复杂优化问题中得到了广泛应用和深入研究。
遗传算法在模式识别、神经网络、机器学习、工业优化控制、自适应控制、生物科学、社会科学等方面都得到应用。
2 遗传算法原理
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第1张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第2张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第3张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第4张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第5张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第6张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第7张图片

二、源代码

clc
tic
%%参数初始化
maxgen=100; %进化代数,即迭代次数,初始预定值选为100
sizepop=200; %种群规模,初始预定值选为100
pcross=0.9; %交叉概率选择,01之间,一般取0.9
pmutation=0.01; %变异概率选择,01之间,一般取0.01
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
%种群,种群由sizepop条染色体(chrom)及每条染色体的适应度(fitness)组成
avgfitness=[];
%记录每一代种群的平均适应度,首先赋给一个空数组
bestfitness=[];
%记录每一代种群的最佳适应度,首先赋给一个空数组
bestchrom=[];
%记录适应度最好的染色体,首先赋给一个空数组
%初始化种群
for i=1:sizepop
%随机产生一个种群
individuals.chrom(i,:)=4000*rand(1,12);
%120~4000的随机数赋给种群中的一条染色体,代表K=4个聚类中心
x=individuals.chrom(i,:);
%计算每条染色体的适应度
individuals.fitness(i)=fitness(x);
end
%%找最好的染色体
[bestfitness bestindex]=max(individuals.fitness);
%找出适应度最大的染色体,并记录其适应度的值(bestfitness)和染色体所在的位置(bestindex)
bestchrom=individuals.chrom(bestindex,:);
%把最好的染色体赋给变量bestchrom
avgfitness=sum(individuals.fitness)/sizepop;
%计算群体中染色体的平均适应度

trace=[avgfitness bestfitness];
%记录每一代进化中最好的适应度和平均适应度

for i=1:maxgen
i
%输出进化代数
individuals=Select(individuals,sizepop);
avgfitness=sum(individuals.fitness)/sizepop;
%对种群进行选择操作,并计算出种群的平均适应度
individuals.chrom=Cross(pcross,individuals.chrom,sizepop);
%对种群中的染色体进行交叉操作
individuals.chrom=Mutation(pmutation,individuals.chrom,sizepop);
%对种群中的染色体进行变异操作
for j=1:sizepop
x=individuals.chrom(j,:);%解码
[individuals.fitness(j)]=fitness(x);
end
%计算进化种群中每条染色体的适应度
[newbestfitness,newbestindex]=max(individuals.fitness);
[worestfitness,worestindex]=min(individuals.fitness);
%找到最小和最大适应度的染色体及它们在种群中的位置
if bestfitness<newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
%代替上一次进化中最好的染色体
individuals.chrom(worestindex,:)=bestchrom;
individuals.fitness(worestindex)=bestfitness;
%淘汰适应度最差的个体
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitness bestfitness];
%记录每一代进化中最好的适应度和平均适应度
end
   
    % 交叉概率决定是否进行交叉
    pick=rand;
    while pick==0
        pick=rand;
    end
    if pick>pcross
        continue;
    end
    pick=rand;
    while pick==0    
        pick=rand;        
    end
    for i=1:sizepop    
        pick=pick-sumf(i);        
        if pick<0        
            index=[index i];            
            break;  
        end
    end
end
individuals.chrom=individuals.chrom(index,:);
individuals.fitness=individuals.fitness(index);
ret=individuals; 

三、运行结果

【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第8张图片
【数据聚类】基于matlab遗传算法之聚类设计【含Matlab源码 201期】_第9张图片

四、备注

完整代码或者代写添加QQ1564658423
往期回顾>>>>>>
【数据分析】基于matlab时变参数随机波动率向量自回归模型(TVP-VAR)【含Matlab源码 099期】
【数据分析】基于matlab自回归模型之时变参数随机波动率向量(TVP-VAR)【含Matlab源代码 153期】
【故障检测问题】基于matlab免疫算法之故障检测问题【含Matlab源码 196期】
【数据聚类】基于matlab粒子群算法之聚类设计【含Matlab源码 199期】
【数据聚类】基于matlab模拟退火算法聚类设计【含Matlab源码 200期】

你可能感兴趣的:(matlab,数据分析)