找回密码
 新注册用户
搜索
查看: 5656|回复: 15

遗传算法绘制Firefox图标

[复制链接]
发表于 2009-3-22 10:55:46 | 显示全部楼层 |阅读模式
http://www.cnbeta.com/articles/79927.htm


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



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

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

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

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

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

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

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

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

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

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

向达尔文致敬!  

fwjmath(法国 大学生)

[ 本帖最后由 BiscuiT 于 2009-3-22 11:14 编辑 ]
回复

使用道具 举报

发表于 2009-3-22 11:52:19 | 显示全部楼层
啊,我才刚刚想转过来
回复

使用道具 举报

发表于 2009-3-22 12:01:42 | 显示全部楼层
有一点不明白,在倒数第二段中,有这么一句话:

“当然,它也有缺点,比如说早期的优势基因可能会很快通过交换基因的途径散播到整个种群中,这样有可能导致早熟(premature)。这个问题是难以完全避免的。”

在大自然中,配偶争夺战就是为了能让优势基因尽快地传播出去,在遗传算法中怎么就成了缺点呢?
回复

使用道具 举报

 楼主| 发表于 2009-3-22 12:08:19 | 显示全部楼层
文章需要看重点...
重点是 "向达尔文致敬!" 之后....
回复

使用道具 举报

发表于 2009-3-22 13:29:51 | 显示全部楼层
作者fwjmath
回复

使用道具 举报

发表于 2009-3-22 13:34:26 | 显示全部楼层
对文中很多都很熟悉,比如,扇贝,ff,darwin,还有fwj.....
回复

使用道具 举报

发表于 2009-3-22 13:35:18 | 显示全部楼层
看过全文,也看了评论!都挺有意思!
当然,也看到了"重点".我越来越觉得,坛子里还是有高人的.不是指2M以上那个高人!
回复

使用道具 举报

发表于 2009-3-22 15:07:57 | 显示全部楼层
科学松鼠 很早就刊登了这篇
http://songshuhui.net/archives/10462.html
  当然还有那句冷笑话


[ 本帖最后由 zglloo 于 2009-3-22 15:15 编辑 ]
回复

使用道具 举报

发表于 2009-3-22 15:30:56 | 显示全部楼层
fwjmath的blog经常会有些挺有意思的原创文章:)
回复

使用道具 举报

发表于 2009-3-22 16:41:24 | 显示全部楼层

回复 #3 refla 的帖子

问题是初期的优势基因未必就是最好的~~~但是它的优势在短期内却足以使它遍布整个种群~~~要想比它更好的基因出现并且取代它就要相当长的一段时间~~~
其实严格意义说来基本上物种进化都是“早熟”的~~~比如说人类,虽然大脑非常精巧,但是身体上还有很多缺陷~~~
回复

使用道具 举报

发表于 2009-3-22 20:37:31 | 显示全部楼层
http://alteredqualia.com/visualization/evolve/
这有蒙娜丽莎小姐的微笑
回复

使用道具 举报

发表于 2009-3-24 17:03:06 | 显示全部楼层

回复 #10 fwjmath 的帖子

没有外界的强势介入,竞争的结果必然是垄断。

但我觉得在计算机上应该很好控制啊,每当出现优势基因时,通过限制它的传播范围,或者在遗传时不断削弱它,不可以吗?
回复

使用道具 举报

发表于 2009-3-24 18:51:58 | 显示全部楼层

回复 #4 BiscuiT 的帖子

回复

使用道具 举报

发表于 2009-3-25 03:31:39 | 显示全部楼层

回复 #12 refla 的帖子

其实没那么简单的~~~既然我们要优化某个东西又怎么能强行扼制优势基因的传播呢?~~~所以还是要找间接的方法~~~
其实最简单的就是多次运行取最优解~~~这样的话也有利于并行计算~~~
回复

使用道具 举报

发表于 2009-3-25 16:22:01 | 显示全部楼层

回复 #14 fwjmath 的帖子

多次取优,当然我相信可能因为遗传的变化 可能出现 不同状况,但是它们 优化的 提高成分明显吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~
欢迎大家多多支持基金会~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-9-30 13:32

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表