遗传算法学习总结

原创 2016年08月29日 20:15:04

遗传算法是一种优化算法,实质是通过群体搜索,根据适者生存的原则进行逐代进化,最终得到最优解。

实现方法:
1.根据具体问题找到可行解的取值范围,类似于x∈(a,b),确定一种编码方式,通过数值串或字符串的方式表示每个可行解
2.确定适应度函数fitness(非负函数),用于判断每个解的好坏
3.确定进化的相关参数,种群规模、交叉概率、变异概率、进化终止条件(最大代数等)。

模型求解及算法
step1.设定参数:
种群大小:M=50
最大代数:G=1000
交叉率:Pc=1(交叉概率为1,保证种群充分进化)
变异率:Pm=0.1(变异发生可能性尽可能小)
step2.确定可行解的编码方式
step3.确定初始种群(可采用改良圈法求得一个较好的初始种群)
step4.确定目标函数(适应度函数)
step5.交叉操作
step6.变异操作
step7.选择(选择目标函数值最小的M个个体进化到下一代,保证父代的优良特性被遗传下来)

遗传算法求解一维无约束优化问题
matlab程序(网上找的,感觉很好用)

function [xv,fv] = myGA(fitness, a, b, M, G, Pc, Pm, eps)  
%   用遗传算法求解一维无约束优化问题  
%   待优化的目标函数 fitness  
%   自变量下界 a   
%   自变量上界 b   
%   种群个体数 M  
%   最大进化代数 G  
%   杂交概率 Pc  
%   变异概率 Pm  
%   自变量离散精度 eps  
%   目标变量取最大值时自变量的值: xm  
%   目标函数的最大值 fv  
%  
%   Example:  
%       function F = fitness(x)  
%       F = x^3-60*x^2+900*x+100;     
%   -------------------------------  
%       [xv,fv] = myGA(@fitness,0, 30, 50, 100, 0.9, 0.04, 0.01);  
%   --------------------------------------------------  
%       xv = 10  
%       fv = 4100  
%  
%   本程序在《精通MATLAB最优化计算》页315程序的基础上修改  

L = ceil(log2((b-a) / eps + 1));                %编码长度  
x = zeros(M, L);                               %种群  
nx = zeros(size(x));                            %滚动数组  
fx = zeros(M, 1);                              %适应度  
for i = 1:M  
    x(i,:) = Initial(L);  
end  

fv = -inf;  

for k = 1 : G  
    for i = 1 : M  
        fx(i) = fitness(Dec(a, b, x(i, :), L));  
        if (fx(i) > fv)  
            xv = Dec(a, b, x(i, :), L);  
            fv = fx(i);  
        end  
    end  

    sumfx = sum(fx);  
    Px = fx / sumfx;  

    PPx = zeros(M, 1);  
    PPx(1) = Px(1);                                 %概率叠加  
    for i = 2 : M  
        PPx(i) = PPx(i - 1) + Px(i);  
    end  

    selFather = 0;  
    for i = 1 : M  
        sita = rand();  
        for j = 1 : M  
            if (sita <= PPx(j))  
                selFather = j;                      %使用轮盘赌法进行选择父亲  
                break;  
            end  
        end  

        selMother = floor(rand() * M) + 1;         %母亲随机选择  
        posCut = floor(rand() * (L - 1)) + 1;       %交叉点  

        r1 = rand();  
        if (r1 <= Pc)  
            nx(i, 1 : posCut) = x(selFather, 1:posCut);  
            nx(i, (posCut + 1) : L) = x(selMother, (posCut + 1) : L);  
            r2 = rand();  
            if (r2 <= Pm)  
                posMut = floor(rand() * L) + 1;  
                nx(i, posMut) = ~nx(i, posMut);  
            end  
        else  
            nx(i, :) = x(selFather, :);  
        end  
    end  

    x = nx;  
end  

%--------------------------------------------------------  
%   初始化种群  
function  result = Initial(length)  
result = zeros(size(length()));  
for i = 1 : length  
    r = rand();  
    result(i) = round(r);  
end  

%----------------------------------------------------------  
%   编码转换  
function y = Dec(a, b, x, L)  
base = 2 .^ ((L - 1) : -1: 0);  
y = dot(base, x);  
y = a + y * (b - a) / (2 ^ L - 1);

当然如果matlab里有遗传工具箱gatool可以交互式操作就更方便些

机器学习基础(四十六)—— 遗传算法(GA)

遗传算法(Genetic Algorithms)也是受自然科学的启发。该类算法的运行过程是先随机生成一组解,称之为种群(population)。在优化过程中的每一步,算法会计算整个种群的成本函数,从而...
  • lanchunhui
  • lanchunhui
  • 2016年04月10日 14:44
  • 1599

遗传算法入门例子和总结

遗传算法的手工模拟计算示例 为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各     个主要执行步骤。         例:求下述二元函数的最大值:     (1)...
  • geqiandesuyan
  • geqiandesuyan
  • 2017年05月05日 20:47
  • 382

Genetic Algorithm遗传算法学习

参考资料:http://blog.csdn.net/b2b160/article/details/4680853/#comments(冒昧的用了链接下的几张图) 百度百科:http://baike....
  • Androidlushangderen
  • Androidlushangderen
  • 2015年03月03日 18:34
  • 4442

遗传算法学习心得

最近在学习遗传算法,刚刚掌握了基本遗传算法的一些东西,所以记录下来以便后续学习,也方便刚刚入门的同学学习。根据我学习的编写的程序,我将按照程序的步骤,来写这篇博客。 目录: 1、简介 2、遗传算法的组...
  • dulingtingzi
  • dulingtingzi
  • 2016年03月25日 21:05
  • 13198

遗传算法小结

转自 http://blog.sina.com.cn/s/blog_4b837cbf010008rm.html http://blog.csdn.net/qq1175421841/article/...
  • tsroad
  • tsroad
  • 2016年09月06日 11:22
  • 12703

遗传算法小结

这两天在本部做项目,到现在脑子还是一头雾水,不知如何进入。     开会后,分配了“遗传算法”,好歹也是咱数据挖掘的兄弟,那本书来研究研究。     学到了点小小小小的意思,放到这,千万别忘了。 ...
  • u012841718
  • u012841718
  • 2017年03月20日 20:50
  • 588

智控——遗传算法

一、概述    遗传算法是基于自然选择和基因遗传学原理的搜索算法,利用“优胜劣汰,适者生存”的概念应用到算法中,遗传算法是实现全局优化及搜索的算法,对其离散函数以及函数形式不明确的算法应用性较广。按照...
  • poiiy333
  • poiiy333
  • 2013年07月04日 21:59
  • 1683

手把手学习和理解遗传算法的最佳例子

英国格拉斯哥大学的在线交互式演示与学习小程序 EA_demo (http://userweb.eng.gla.ac.uk/yun.li/ga_demo/)允许用户直接在网页上一代一代地手动运行,以看遗...
  • u013363832
  • u013363832
  • 2014年02月02日 00:27
  • 3884

遗传算法的入门实现(2):利用正方形拼接firefox

这段程序没有参考网上的任何代码,属于自己独立完成,因此效果也不是很理想。但是不管怎样,我也花了不少心思研究,就当是述说一下自己的思路吧:(1)(1)首先为什么不用三角形来进行填充呢?因为三角形的绘制和...
  • pp634077956
  • pp634077956
  • 2016年12月04日 20:15
  • 2539

利用遗传算法优化神经网络:Uber提出深度学习训练新方式

在深度学习领域,对于具有上百万个连接的多层深度神经网络(DNN),现在往往通过随机梯度下降(SGD)算法进行常规训练。许多人认为,SGD 算法有效计算梯度的能力对于这种训练能力而言至关重要。但是,Ub...
  • Uwr44UOuQcNsUQb60zk2
  • Uwr44UOuQcNsUQb60zk2
  • 2017年12月23日 06:41
  • 193
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:遗传算法学习总结
举报原因:
原因补充:

(最多只允许输入30个字)