[데이터 클러스터링] 유전 알고리즘 클러스터링 설계 기반 MATLAB 소스 코드

1. 소개

1
유전 알고리즘 소개 유전 알고리즘은 자연 진화를 시뮬레이션하는 최적화 된 검색 알고리즘입니다. 피트니스 함수에만 의존하여 최적의 솔루션을 찾을 수 있기 때문에 문제의 솔루션 공간에 대한 지식이 필요하지 않으며 피트니스 함수는 연속 미분 등의 조건에 의해 제약을받지 않으므로 다중 문제 해결에 사용됩니다. -차원, 고도로 비선형적인 복잡한 최적화 문제가 널리 사용되고 심층 연구되었습니다.
유전 알고리즘은 패턴 인식, 신경망, 기계 학습, 산업 최적화 제어, 적응 제어, 생물학 및 사회 과학에 사용됩니다.
2 유전 알고리즘의 원리
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입

둘째, 소스 코드

clc
tic
%%参数初始化
maxgen=100; %进化代数,即迭代次数,初始预定值选为100
sizepop=200; %种群规模,初始预定值选为100
pcross=0.9; %交叉概率选择,0和1之间,一般取0.9
pmutation=0.01; %变异概率选择,0和1之间,一般取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);
%把12个0~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; 

세, 실행 결과

여기에 사진 설명 삽입
여기에 사진 설명 삽입

네, 비고

QQ1575304183을 추가하는 대신 코드를 작성하거나 작성하십시오.

과거 리뷰 >>>>>>

[데이터 분석] 시변 매개 변수 확률 적 변동성 벡터 자기 회귀 모델 (TVP-VAR)

[신호 처리] ICA 알고리즘 신호 분리 기반 Matlab 소스 코드

[데이터 분석] 퍼지 이진 의사 결정 트리 MATLAB 소스 코드

추천

출처blog.csdn.net/qq_34763204/article/details/113617588