遗传算法入门(上)代码中的进化学说与遗传学说

如果你对遗传算法感兴趣或者正在做有关GA的研究,不妨关注博客右侧专栏 → 智能计算-深入遗传算法 ,一步一步深入算法,分享算法每一个流程模块(如选择策略,交叉机制等等)的众多参考观点。代码和Demo咱从来不缺。

遗传算法入门系列文章:

(中篇)遗传算法入门(中)实例,求解一元函数最值(MATLAB版)
(下篇)遗传算法入门(下)实例,求解TSP问题(C++版)

写在之前

说明: 本想着用大量篇幅写一篇 “关于遗传算法的基本原理”作为本系列入门的第一篇,但是在找寻资料的过程中,看到网络上有大量的关于遗传算法的介绍,觉得写的都挺好,所以本文我就简单写点自己的理解。

推荐几篇关于遗传算法的介绍性文章:

遗传算法详解(GA)(个人觉得很形象,很适合初学者)

《遗传算法入门(上)代码中的进化学说与遗传学说》

算法所属领域

​ 相信每个人学习一门知识之前,都会想知道这门知识属于哪一门学科范畴,属于哪一类技术领域?

​ 首先对于这种问题,GA是没有绝对的归属的。算法的定义是解决问题的一种思想和指导理论。而遗传算法也是解决某一问题的一种思想,用某一编程语言实现这种思想的程序具有很多特点,其中一个便是智能性和进化性,即,不需要大量的人为干涉,程序本身能够根据一定的条件自我筛选,最终得出令人满意的结果。所以按照这种特性,把它列为人工智能领域下的学习门类毫无疑问是可以的 。遗传算法的思想是借鉴了达尔文的进化学说和孟德尔的遗传学说,把遗传算法说成是一门十足的仿生学一点都不过分。然而从应用的角度出发,遗传算法是求最优解问题的好方法,如信号处理中的优化、数学求解问题、工业控制参数最优解、神经网络中的激活函数、图像处理等等,所以把遗传算法说成优化范畴貌似也说的过去。为了方便理解,我们可以暂时将其定位为人工智能–智能优化 ,这也是很多书中描述遗传算法的惯用词汇。

遗传算法的思想解析

遗传算法(gentic algorithms简称GA)是模拟生物遗传和进化的全局优化搜索算法

​ 我们知道,在人类的演化中,达尔文的进化学说与孟德尔的遗传学说起着至关重要的理论指导。每个人作为一个个体组成一个人类种群,正是经历着物竞天择,才会让整个群体慢慢变的更好,即更加适应周围的环境。而每一代正是靠着基因交叉与变异才能繁衍出更加适应大自然规律的下一代个体。总之,在漫长的迭代进化中,一个不适应环境的群体,在物竞天择和交叉变异中慢慢变的适应了环境。

​ GA的思想完全模拟了生物的进化和遗传方式。我们在求解一个问题的最优解时,先人为的产生很多任意的解,组成一个解集(一个解是一个个体,一个解集是一个种群),这些解有好有坏。我们的最终目的是让这些解通过“物竞天择”慢慢演化成最终适合所求的最优解。如果说大自然中是周围的环境对种群中的个体做出选择,那么在求解问题时,就可以用一个问题的模型函数来对众多解做出选择,即:对于一个要解决的问题,我们通过数学建模的方式将其建立为一个纯数学函数 F=f(x,y,..) F = f ( x , y , . . ) , 该函数就能反应该问题的特性,例如我们需要求解汽车过隧道问题。可以将隧道抽象成一个倒立的抛物线函数,通过研究该抛物线的特性来研究隧道口的高度。如果我们在之前先产生一个解集,将解集中的所有解带入抛物线,得出一个结果集,则结果集中的每个结果肯定有好有坏,好的结果所对应的解就是好解,反之亦然。所以,这个模型函数就充当了自然界中的环境因素。在遗传算法中,这个模型函数称为目标函数 ,而在实际的算法运行中,因为考虑到算法的设计,往往会在目标函数上做一些不会改变函数特性,但是会改变函数形式的改进,例如 F(x)=x+1 F ( x ) = x + 1 改为 F(x)=5x+1 F ( x ) = 5 x + 1 ,改变前和改变后,函数都是线性函数,但改变后的函数变得更加陡峭。有些改变是为让函数在定义域内不再有负值等等。这些改变后的函数称为适应度函数 ,总之,适应度函数是为了不改变目标函数对个体选择的特性下为了更好的进行写代码而生的。

​ 我们早在设计算法的一开始就对每个解进行了编码,编码的方式有很多,并不难理解,如适应度函数 F(x,y,z)=x2+y2+z2 F ( x , y , z ) = x 2 + y 2 + z 2 , 我们随机生成了一个解(个体) 567 567 ,其中 x=5 x = 5 , y=5 y = 5 , z=7 z = 7 ,将其带入函数,可以得出一个适应度值,这个值的大小可以反应该解是否是好的解。 567 567 这一个解称之为一个个体, 你也可以形象的称之为一个染色体 ,而三个数字中的每一个数字称之为基因,正如许多基因组成一个染色体(人体)一样。在上述中,将函数的每个变量对应个体中的每个基因的方式,我们称之为实数编码 ,当然我们可以通过某一对应法则,将十进制的基因变成二进制,如上述的个体 567 567 ,通过某一对应法则变成 0101|0110|0111 0101 | 0110 | 0111 ,对于这种形式的编码称之为二进制编码 ,而此时的基因变成0或1 。

​ 自然界中,对于一个由个体(人)组成的种群(人类),通过环境的选择会慢慢变的更好,其变好的根本依据来源于遗传学说中的基因的交叉和变异。正是交叉和变异的存在,才为产生新的,更好的个体提供了可能性。而在遗传算法中,人为的模拟了交叉与变异。理解了编码和基因后,正如自然界中基因的交叉和变异一样,我们通过算法以某一随机概率通过一定策略让两个解(染色体/个体)中的部分基因进行交换,例如:父代个体**A( 567 567 ),父代个体B( 123 123 ) ,交叉后生成新的子代个体**A( 527 527 ) , 子代个体B( 163 163 )。我们也同样以某一随机概率通过一定策略让某个个体中的部分发生突变,这并不难理解。

种群中的个体通过遗变异和变异(遗传学说)作为产生新个体的依据,通过适应度函数(环境)控制的选择(物竞天择)对个体进行筛选,经过上百次的循环(繁殖),最终会产生非常接近符合适应度函数(使用环境)的个体(物种),而最好个体中的基因便是最好的变量,即最好的解 。

为什么要用遗传算法?

为什么要用遗传算法? 通过分析遗传算法的思想,我们知道遗传算法说明白了就是用来求解某适应度函数的某些特定值(如最大值,最小值)。你可能会说,既然给定了纯数学的适应度函数公式,我们完全可以用数学上诸如极限、微积分、解线性方式等方法求解最大值。但是理论往往只是理论,在实际生产中,如工业、医疗、各种业中,我们通过数学建模抽象出的适应度函数往往是不可导、不连续的,这些复杂的函数根本无法用数学中的推论解决。 而遗传算法根本不用考虑是否连续,是否可导,只要简单的随机给定一个不管是好还是坏的种群,一点击运行代码,即可求出最终的最优解。这也是遗传算法得意被众多人研究和得以被广泛应用的根本之所在 。

科研现状

节选本人当年写的《遗传算法综述》

随着应用领域的扩展,遗传算法的研究出现了几个引人注目的新动向: 一是基于遗传算法的机器学习,这一新的研究课题把遗传算法从历来离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。这一新的学习机制对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。二是遗传算法正日益和神经网络、模糊推理以及混沌理论等其它智能计算方法相互渗透和结合,这对开拓21世纪中新的智能计算技术将具有重要的意义。三是并行处理的遗传算法的研究十分活跃。这一研究不仅对遗传算法本身的发展,而且对于新一代智能计算机体系结构的研究都是十分重要的。四是遗传算法和另一个称为人工生命的崭新研究领域正不断渗透。所谓人工生命即是用计算机模拟自然界丰富多彩的生命现象,其中生物的自适应、进化和免疫等现象是人工生命的重要研究对象,而遗传算法在这方面将会发挥一定的作用。五是遗传算法和进化规划(Evolution Programming,EP)以及进化策略(Evolution Strategy,ES)等进化计算理论日益结合。EP和ES几乎是和遗传算法同时独立发展起来的,同遗传算法一样,它们也是模拟自然界生物进化机制的智能计算方法,即同遗传算法具有相同之处,也有各自的特点。目前,这三者之间的比较研究和彼此结合的探讨正形成热点。

额……..,我突然发现我的综述对现状的描写实在过多,而且里面有大量其他论文引用,大家真需要看的话,去下载我的《遗传算法综述》吧,下面只列出一些标题性的内容,不在粘贴过多的解释了

  • 遗传操作的改进。体现在选择、交叉和变异的改进上。 ………………………………..
  • 参数的自适应选取大多体现在种群规模N、交叉概率Pc和变异概率Pm的动态自适应选取上。……………
  • 混合遗传算法是指GA与其他算法的融合。……………………………………
  • 小生境技术。对于多模态函数优化问题和多峰函数优化问题,往往要求搜索多个全局最优解和有意义的局部最优解,传统的GA容易陷入局部极值。…………………………….

  • 分布并行遗传算法。……………………………….

应用现状

节选本人当年写的《遗传算法综述》

(1)函数优化

​ 函数优化是遗传算法的经典应用领域,也是对遗传算法进行性能评价的常用算例。许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高纬函数、单峰函数和多峰函数等。对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果。

(2)组合优化问题

​ 优化问题包括函数优化和组合优化两种。函数优化是遗传算法的经典领域,也是对遗传算法进行性能评价的常用算例。对于组合优化,随着问题规模的扩大,搜索空间急剧扩大,这类复杂问题,人们已经意识到把精力放在寻找其满意解上。实践证明,遗传算法对于组合优化中的NP完全问题非常有效。

(3)自动控制

​ 在自动控制领域中许多与优化相关的问题需要求解,遗传算法的应用日益增加,并显示了良好的效果。例如用遗传算法进行航空控制系统的优化、基于遗传算法的参数辨识、利用遗传算法进行人工神经网络的结构优化设计和权值学习,都显示了遗传算法在这些领域中应用的可能性。

(4)机器学习

​ 学习能力是高级自适应系统所具备的能力之一,基于遗传算法的机器学习,特别是分类器系统,在很多领域中都得到了应用。遗传算法被用于学习模糊控制规则,可以更好地改进模糊系统的性能;基于遗传算法的机器学习不但可以用来调整人工:神经网络的连接权,也可用于人工神经网络结构的优化设计 。这一新的研究方向把遗传算法从历史离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。这一新的学习机制对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。

(5)图像处理

图像处理是计算机视觉中的一个重要研究领域。在图像处理过程中,如扫描、特征提取、图像分割等不可避免地会存在一些误差,从而影响图像的效果。如何使这些误差最小化是计算机视觉达到实用化的重要要求。遗传算法可用于图像处理中的优化计算,目前已在模式识别(包括汉字识别 )、图像恢复、图像边缘特征提取等方面得到了应用。

(6)人工生命

人工生命是用计算机、机械等人工媒体模拟或构造出的具有自然生物系统特有行为的人造系统。自组织能力和自学习能力是人工生命的两大主要特征。人工生命与遗传算法有着密切的联系,基于遗传算法的进化模型是研究人工生命现象的重要基础理论。虽然人工生命的研究尚处于初期阶段,但遗传算法已在其进化模型、学习模型、行为模型、自组织模型等方面显示出了初步的应用能力,并且必将会得到更为深入的应用和发展。人工生命与遗传算法相辅相成,遗传算法为人工生命的研究提供一个有效的工具,人工生命的研究也必将促进遗传算法的进一步发展。

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/zyqblog/article/details/79385938
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞