`

遗传算法绘制Firefox图标

阅读更多

从前,一群扇贝在海岸边悠哉游哉地生活着。它们衣食不愁,连房子也有了着落,担忧的只有一件事:每隔一段时间,总有人来挖走它们之中的一部分。有意思的是,这个人的家族以Firefox的图标作为纹章,所以他总是选择那些花纹长得比较不像Firefox图标的扇贝。经过几十万代的繁衍后,扇贝壳上的图案逐渐变得与Firefox图标相差无几。

  这个故事确有其事———它们生活在我的电脑中,是一个遗传算法程序的一部分。程序的目的就是用100个半透明三角形画出Firefox图标。

  遗传算法是一种解决问题的方法。它模拟大自然中种群在选择压力下的演化,从而得到问题的一个近似解。在上世纪五十年代,生物学家已经知道基因在自然演化过程中的作用了。他们希望能在新出现的计算机上模拟这个过程,用以尝试定量研究基因与进化之间的关系。这就是遗传算法的滥觞。

  首先,我们把100个半透明三角形组成的东西看成一个生物个体(比如扇贝),可以说它的样子是由这些三角形的具体位置和颜色决定的。所以,我们可以把一个一个的半透明三角形看做是这些扇贝的“基因”。而组成扇贝的这100个基因就组成了每个扇贝个体的“染色体”。

  扇贝当然要繁衍后代。生物界中的繁衍无非就是父母的基因组合产生新的个体。所以,我们在程序中选择两个原有的扇贝,然后从这两个扇贝的染色体中随机选取一共100个基因组成新个体的染色体。为了产生新的基因,使基因的种类更多样化,在组合的时候,新的扇贝的基因有一定的概率发生变异。这就是说,其中透明三角形的位置或者颜色有可能发生随机改变。

  为了使扇贝的样子向Firefox图标靠近,我们要给它们加上一点选择压力:把每一代扇贝中最不像Firefox的淘汰出去。这个选择过程可以通过像素比较来完成。

  最后,在自然界中,种群的演化是一个无休止的过程,但程序总要停下来给出一个结果。那么,什么时候终止演化输出结果呢?这就要订立一个终止条件。一旦满足这个条件,程序就输出当前最好的结果并停止。最简单的终止条件就是,如果种群经过了很多代之后仍然没有显著改变适应性的变异的话,我们就停止并输出结果。

  好了,现在是万事俱备只欠东风了。定义好基因,写好繁衍、变异、评价适应性、淘汰和终止的代码之后,只需要随机产生一个适当大小的种群,然后让它这样一代代地繁衍、变异和淘汰下去,到最后我们就会获得一个让人惊喜的结果。

  遗传算法能在相对较短的时间内给出一个足够好、能凑合的答案,它从问世伊始就越来越受到大家的重视,对它的研究也是方兴未艾。当然,它也有缺点,比如说早期的优势基因可能会很快通过交换基因的途径散播到整个种群中,这样有可能导致早熟(premature)。这个问题是难以完全避免的。

  这也从一个侧面说明,我们不一定需要一个智能才能得到一个构造精巧的系统。无论如何,如果我们要将遗传算法的发明归功于一个人的话,我会将它归功于达尔文,进化论的奠基人。如果我们不知道自然演化的过程,我们也不可能在电脑中模拟它,更不用说将它应用于实际了。

  向达尔文致敬!  

“扇贝实验”中的子代输出结果。每个图形下面的数字代表其代数。很显然,最初那些由随机三角形组成的“生物”,在“繁殖”了12万代之后,看起来已经与Firefox图标相差无几了。

from http://tech.sina.com.cn/

分享到:
评论

相关推荐

    利用遗传算法实现Firefox图标的绘制。_GA_Firefox.zip

    利用遗传算法实现Firefox图标的绘制。_GA_Firefox

    通过遗传算法使用150个半透明三角形绘制Firefox图标。(需要OpenCV环境)_GA-Firefox-.zip

    通过遗传算法使用150个半透明三角形绘制Firefox图标。(需要OpenCV环境)_GA-Firefox-

    带有约束条件的遗传算法程序

    遗传算法在优化函数中的应用 遗传算法(Genetic Algorithm)是一种基于自然选择和遗传学机理的搜索算法,广泛应用于函数优化、组合优化、机器学习等领域。下面我们将通过一个具体的 MATLAB 源程序,来了解遗传算法...

    遗传算法实例(python实现)

    遗传算法是一种基于生物进化原理的优化方法,它模拟了自然选择和遗传的过程,用于寻找问题的全局最优解。在这个实例中,我们使用Python语言来实现遗传算法,目标是找到函数`f(x) = 10 * sin(5x) + 7 * cos(4x)`在...

    基于遗传算法的BP神经网络MATLAB代码

    遗传算法优化 BP 神经网络MATLAB代码 在本资源中,我们将讨论如何使用遗传算法优化 BP 神经网络的参数,以提高神经网络的收敛速度。该资源提供了一个基于遗传算法的 BP 神经网络 MATLAB 代码实例,用于解决非线性...

    遗传算法的优化处理,输出优化前后染色体的变化情况以及优化迭代收敛曲线,matlab2021a测试

    遗传算法是一种基于生物进化原理的全局优化方法,它模拟了自然选择、遗传和突变等生物进化过程,用于解决复杂的优化问题。在这个“遗传算法的优化处理”案例中,我们重点探讨如何在MATLAB 2021a环境中实现遗传算法,...

    遗传算法解决TSP问题

    遗传算法是一种基于生物进化原理的优化方法,常用于解决复杂问题,如旅行商问题(Traveling Salesman Problem,简称TSP)。TSP是图论中的一个经典问题,它询问的是:给定一个城市列表和每对城市之间的距离,如何找到...

    基于MATLAB的遗传算法及其在稀布阵列天线中的应用,基于matlab的遗传算法及其在稀布阵列天线中的应用 pdf,matlab

    《基于MATLAB的遗传算法及其在稀布阵列天线中的应用》是一份深入探讨如何使用MATLAB软件来实现遗传算法,并将其应用于稀布阵列天线设计与优化的学术资料。遗传算法是一种模拟生物进化过程的全局优化方法,而MATLAB...

    基于遗传算法的TSP算法

    **基于遗传算法的TSP问题详解** 旅行商问题(Traveling Salesman Problem,简称TSP)是一个经典的组合优化问题,其目标是寻找访问n个城市的最短路径,且每个城市只能访问一次,最后返回起点。这是一个NP完全问题,...

    VRP遗传算法的Matlab代码

    遗传算法(Genetic Algorithm, GA)是一种借鉴生物进化原理的全局优化方法,适用于解决复杂的非线性问题,如VRP。本篇将详细探讨VRP与遗传算法在Matlab中的实现。 在Matlab中实现VRP遗传算法,首先需要理解基本的...

    MATLAB遗传算法工具箱(gatbx)

    MATLAB遗传算法工具箱(gatbx)是用于在MATLAB环境中实现遗传算法的一个强大工具。这个工具箱由谢菲尔德大学开发,旨在为研究人员和工程师提供一个方便、高效的平台,来解决各种优化问题,特别是在工程设计、数据...

    自适应遗传算法matlab程序

    根据提供的文件信息,本文将对“自适应遗传算法matlab程序”进行详细的解析与说明。 ### 自适应遗传算法概述 遗传算法(Genetic Algorithm, GA)是一种基于自然选择和遗传学机理的全局优化概率搜索算法,通过模拟...

    遗传算法(matlab的简单实现)

    遗传算法先画出函数曲线,随后第一遗传算法参数,参数可自调,对曲线进行寻优,可以得到最优个体,以及种群均值变化。

    python_PIL_利用遗传算法实现三角形拟合图片

    在本项目中,我们探索了如何使用Python编程语言和PIL(Python Imaging Library)库,结合遗传算法来实现三角形拟合对图像的处理。这个技术对于图像分析、图形渲染和计算机视觉等领域具有广泛的应用价值。 首先,让...

    自适应遗传算法 求解函数最小值(Matlab程序)

    自适应遗传算法是一种基于生物进化理论的全局优化方法,它在搜索最优解的过程中具有较强的探索性和鲁棒性。在Matlab环境下,自适应遗传算法被广泛应用于解决各种复杂的非线性优化问题,如函数最小值的求解。下面将...

    遗传算法求最小值(matlab源代码和实验报告)

    遗传算法是一种基于生物进化原理的优化方法,由John Holland在20世纪60年代提出,主要用于解决复杂的全局优化问题。这种算法模拟了自然选择、基因重组和突变等生物学过程,寻找问题空间中的最优解。在本案例中,我们...

    遗传算法+投影寻踪程序代码

    ### 遗传算法结合投影寻踪方法解析 #### 一、引言 在数据分析与机器学习领域,**遗传算法**(Genetic Algorithm, GA)和**投影寻踪**(Projection Pursuit, PP)作为两种重要的优化技术,在解决复杂问题时展现出...

    Qt写的遗传算法加画图程序

    《Qt实现的遗传算法与图形化程序解析》 在信息技术领域,遗传算法(Genetic Algorithm,GA)是一种受到生物进化理论启发的优化方法,而Qt则是一个跨平台的C++图形用户界面应用程序开发框架。本篇文章将深入探讨如何...

Global site tag (gtag.js) - Google Analytics