zoukankan      html  css  js  c++  java
  • 遗传算法matlab实现

    我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang
    以下运用MATLAB实现遗传算法:
     
    clc
    clear
     
    %参数
    a = 0 ;
    b = 4 ;
    eps = 0.01 ;
    lenchrom = ceil(log2((b - a)/eps + 1)) ;
    sizepop = 50 ;
    maxgen = 500 ;
    pcross = 0.9 ;
    pm = 0.05 ;
     
    fitness = ones(1,sizepop) ;
    chrom = zeros(sizepop,lenchrom) ;
    nx = zeros(sizepop,lenchrom) ;
     
     
    %初始化
    %随机产生一个种群
    for i = 1 : sizepop
        for j = 1 : lenchrom
            chrom(i,j) = round(rand) ;
        end
            x = a + (b - a) * (dot( 2 .^ ((lenchrom - 1) : -1 : 0 ) , chrom(i,:)) ) / ( 2 ^ lenchrom - 1) ;
            fitness(i) = fun(x); 
    end
     
    [bestfitness , bestindex] = max(fitness); 
    bestchrom = chrom(bestindex,:) ;
     
    for i = 1 : maxgen
        %select
        sumfitness = sum(fitness) ;
        fit = fitness ./ sumfitness ;
        tfit = zeros(sizepop) ;
        tfit(1) = fit(1) ;
        for j = 2 : sizepop
            tfit(j) = tfit(j - 1) + fit(j) ;
        end
        for k =  1 : sizepop
            pick = rand ;
            if pick < fit(1)
                father = 1 ;
            else
               for l = 1 : (sizepop - 1 )
                  if pick > tfit(l) && pick < tfit(l + 1)
                    father = l + 1 ;
                  end
               end
            end
            mother = ceil(rand * sizepop) ;            
            %cross
            pick = rand ;         
            if pcross > pick
                poscross = randperm(lenchrom,1) ;
                nx(k,1:poscross) = chrom(father,1:poscross) ;
                nx(k,(poscross + 1):lenchrom) = chrom(mother,(poscross + 1):lenchrom) ;
            else
                nx(k,:) = chrom(father,:) ;
            end
           %mutation
           index = randperm(sizepop,1) ; 
           pick = rand ;
           if pick < pm
               posm = randperm(lenchrom,1) ;
               chrom(index,posm) = ~chrom(index,posm) ;
           end
        end
        
        chrom = nx ;
        
        for j = 1 : sizepop
            x = a + (b - a) * (dot( 2 .^ ((lenchrom - 1) : -1 : 0 ) , chrom(j,:)) ) / ( 2 ^ lenchrom - 1) ;
            fitness(j) = fun(x) ;
        end
        
        [newbestfitness , newbestindex] = max(fitness) ;
        if newbestfitness > bestfitness
            bestfitness = newbestfitness ;
            bestindex = newbestindex ;
            bestchorm = chrom(bestindex,:) ;
        end
    end
     
    bestx = a + (b - a) * (dot( 2 .^ ((lenchrom - 1) : -1 : 0 ) , bestchrom) ) / ( 2 ^ lenchrom - 1)
    bestf = bestx * sin(bestx)
  • 相关阅读:
    文本文件、二进制文件
    trunc()
    字符集、编码
    windows注册表:扫盲
    decode() & sign()
    移动前端工作的那些事前端制作之自适应制作篇
    css hack知识详解
    IE6兼容性大全
    JS正则匹配入门基础!
    [转载]Javascript中批量定义CSS样式 cssText属性
  • 原文地址:https://www.cnblogs.com/xiaoyajiang/p/5950395.html
Copyright © 2011-2022 走看看