1701066570
前面描述GA时似乎很简单,但是遗传算法已被用于解决科学和工程领域的许多难题,甚至应用到艺术、建筑和音乐。
1701066571
1701066572
应用之广泛从下面这些问题可见一斑:通用电气将GA用于飞行器的部分自动化设计, [129] 洛斯阿拉莫斯国家实验室用GA分析卫星图像, [130] 约翰·迪尔(John Deere)公司将GA用于自动化生产线的调度, [131] 德州仪器(Texas Instruments)则用GA来设计计算机芯片。 [132] GA还在2003年的电影《指环王:王者归来》(The Lord of the Rings:The Return of the King)中被用于生成逼真的动画马匹, [133] 为电影《特洛依》(Troy)生成逼真的演员替身动画特效。 [134] 许多制药公司用GA来辅助发现新药。 [135] GA也被一些金融组织用于各种场合:识别交易欺诈 [136] (伦敦股票交易所)、分析信用卡数据 [137] (第一资本金融公司,Capital One)、预测金融市场 [138] 和优化证券投资组合 [139] (第一象限公司,First Quadrant)。20世纪90年代,互动式遗传算法创造的艺术作品 [140] 在巴黎蓬皮杜中心(Georges Pompidou Center)等多个博物馆展出。这些只是遗传算法应用的一小部分例子。
1701066573
1701066575
进化的罗比,易拉罐清扫机器人
1701066576
1701066577
下面我们用一个更详细的简单例子 [141] 来进一步阐释GA的主要思想。我有一个叫“罗比”的机器人,它的世界(用计算机模拟,但是很脏乱)是二维的,到处是丢弃的易拉罐。我将用遗传算法为罗比进化出一个“脑”(即控制策略)。
1701066578
1701066579
罗比的工作是清理它的世界中的空易拉罐。罗比的世界由10×10的100个格子组成(图9.2)。罗比在位置(0,0)。我们可以假设周围围绕着一堵墙。许多格子中散落着易拉罐(不过每个格子中的易拉罐不会多于一个)。
1701066580
1701066581
罗比不是很聪明,看得也不远,他只能看到东南西北相邻的4个格子以及本身所在格子中的情况。格子可以是空的(没有罐子),或者有一个罐子,或者是墙。例如,在图9.2中,罗比位于格子(0,0),看到当前格子是空的,北面和西面是墙,南面的格子是空的,东面的格子中有一个罐子。
1701066582
1701066583
1701066584
1701066585
1701066586
▲图9.2 罗比的世界。10×10的格子,散落着一些易拉罐
1701066587
1701066588
每次清扫工作罗比可以执行200个动作。动作可以是以下7种:往北移动、往南移动、往东移动、往西移动、随机移动、不动、收集罐子。每个动作都会受到奖赏或惩罚。如果罗比所在的格子中有罐子并且收集起来了,就会得到10分的奖赏。如果进行收集罐子的动作而格子中又没有罐子,就会被罚1分。如果撞到了墙,会被罚5分,并弹回原来的格子。
1701066589
1701066590
显然,罗比尽可能地多收集罐子,别撞墙,没罐子的时候别去捡,得到的分数就最高。
1701066591
1701066592
这个问题很简单,人工为罗比设计一个好策略可能也不是很难。不过,有了遗传算法我们就可以什么也不用干,我们只需要等着计算机替我们进化出来。下面我们用遗传算法来为罗比进化出一个好策略。
1701066593
1701066594
第1步是搞清楚我们想要进化的到底是什么。也就是说,策略具体指的是什么?一般来说,策略指的是一组规则,规则给出了在各种情形下你应当采取的行动。对于罗比,它面对的“情形”就是它看到的:当前格子以及东南西北四个格子中的情况。对于“在各种情形下怎么做”的问题,罗比有7种可能选择:北移、南移、东移、西移、随机移动、不动、收集罐子。因此,罗比的策略可以写成它可能遇到的所有情形以及面对每种情形应当采取的行动。
1701066595
1701066596
有多少种可能的情形呢?罗比可以看到5个格子(当前格子、东、南、西、北),每个格子可以标为空、罐和墙。这样就有243种可能情形。 [142] 其实还没有这么多,因为有许多不可能的情形,例如当前位置不可能是墙,也不可能四面都是墙,等等。不过,因为我们很懒,不想费劲找出所有不可能的情形,因此我们会列出所有243种情形,只要知道其中一些永远也不会遇到就行了。
1701066597
1701066598
表9-1是一个策略的例子——只是策略的局部,完整策略太长了,不方便列出来。
1701066599
1701066600
表9 1一个策略的例子
1701066601
1701066602
1701066603
1701066604
1701066605
罗比在图9.2中的情形是:
1701066606
1701066607
1701066608
1701066609
1701066610
要知道下一步怎么做,罗比只需要查看策略表,查到对应的行动是往西移动。因此它往西移动一格,结果一头撞到墙上。
1701066611
1701066612
我没说这是一个好策略。寻找好策略不关我的事;这事归遗传算法管。
1701066613
1701066614
我写了一个遗传算法程序来进化罗比的策略。算法中,群体中每个个体都是一个策略——与各种可能情形相对应的行动列表。也就是说,对于表9—1中的策略,GA用来演化的个体就是最右侧243个行动依次列出的列表:
1701066615
1701066616
1701066617
1701066618
1701066619
字符串中第1个行动(这里是向北移动)对应第1种情形(“空空空空空”),第2个行动(这里是向东移动)对应第2种情形(“空空空空罐”),依次往后。这样就不用明确列出与动作对应的情形;GA记得各情形的排列顺序。例如,假设罗比观察到情形如下:
[
上一页 ]
[ :1.70106657e+09 ]
[
下一页 ]