• 遗传算法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)
  • 相关阅读:
    WebService 访问代理及安全性验证设置
    精益求精,抑或得过且过
    用Eclipse开发Android应用程序(1): 开始之前
    用Eclipse开发Android应用程序(3): 开发第一个Android应用程序HelloWorld(下篇)
    [转]C#中调用打印机编程实例
    检索 COM 类工厂中 CLSID 为 ???的组件时失败,原因是出现以下错误: 80080005。
    用Eclipse开发Android应用程序(2): 开发环境搭建
    GridView RowCommand事件操作Demo Code
    USB三模(EDGE、DCHSPA+和LTE)数据棒
    [用 OProfile 彻底了解性能]
  • 原文地址:https://www.cnblogs.com/xiaoyajiang/p/5950395.html
Copyright © 2020-2023  润新知