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)
  • 相关阅读:
    JQ_浏览器窗口改变触发
    5. 通过PHP反序列化进行远程代码执行
    2. 文件包含(150)
    1. md5 collision(50)
    4.xpath注入详解
    2.HTTP头注入
    1.5 xss漏洞修复
    1.4 DVWA亲测XSS漏洞
    1.如何绕过WAF(Web应用防火墙)
    1.3 xss原理分析与剖析(4)
  • 原文地址:https://www.cnblogs.com/xiaoyajiang/p/5950395.html
Copyright © 2011-2022 走看看