• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: Matlab
  • 标签: matlab  遗传算法  

资源简介

matlab实现的遗传算法,包含遗传算法的编码,选择,交叉,变异,适应度函数

资源截图

代码片段和文件信息

% %
%编码方式: 基本二进制编码
%Input:     FitFunc:    Any function
%           pCrossover: probability of crossover default 0.5
%           pMutation:  probability of mutation  default 0.04
%           GroupNum:   number of individuals of the virtual group default 30
%           MaxIter:    maximum iterations
%           MaxRepeat:  (optional)determine the convergence standard 判断收敛
%parent.fitness
%parent.chrom


function Result = MyGA(FitFunc pCrossover pMutation GroupNum MaxIter MaxRepeat)
    %Default parameters
    if nargin < 6
        MaxRepeat = 10;
        if nargin < 5
            MaxIter = 1000;
            if nargin < 4
                GroupNum = 50;
                if nargin < 3
                    pMutation = 0.04;
                    if nargin < 2
                        pCrossover = 0.5;
                    end
                end
            end
        end
    end

    Result  =  [];
    epsilon =  1e-5;
    iter    =  0;
    iRepeat =  1;
    bit     =  22;     %precision
    thisMax =  0;
   
    parent  =  InitGroup(GroupNum FitFunc bit);   %Generate initial population
    while iter < MaxIter
        children1 = Crossover(parent pCrossover/iter^0.1);  %Return crossovered chromes
        children.chrom = [];
        children.fitness = [];
        children.chrom = Mutation([parent.chrom; children1] pMutation/iter^0.1);
        children.fitness = CalcFit(children.chrom FitFunc bit);
        children = select(children GroupNum);
        parent = children;
        iter = iter + 1;
        %parent.chrom;
        %[m I] = max(parent.fitness)
        if (thisMax-max(parent.fitness))/max(parent.fitness) < epsilon
            iRepeat = iRepeat + 1;
        else 
            iRepeat = 1;
        end
        thisMax = max(parent.fitness);
        disp(thisMax)
        for i = 1:size(parent.chrom)
            if parent.fitness(i) == thisMax
                j = i;
                plot(Decoding(parent.chrom(i:)bit)parent.fitness(i)‘go‘);
            end
        end
        Result = [Result; thisMax];  
    end
    plot(Decoding(parent.chrom(j:)bit)parent.fitness(j)‘ro‘);
end

%Encoding method: 普通二进制编码
function parent = InitGroup(GroupNum Fit

评论

共有 条评论