学习笔记
学习书目:《复杂》- 梅拉妮·米歇尔
在对“机器能否复制自身”的问题给予肯定回答后,冯·诺依曼很自然地想让计算机(或计算机程序)复制自己和产生变异,并在某种环境中为生存竞争资源。这就会遇到前面提到的**“生存本能"以及"进化和适应”**的问题。
20世纪60年代初,一些研究团体开始在计算机中进行进化实验,这些研究现在统称为进化计算。其中最为著名的是密歇根大学的霍兰德和他的同事、学生进行的遗传算法研究。
霍兰德在读费希尔的名著《自然选择的遗传理论》时被达尔文的进化论深深吸引。他从计算机科学的角度思考:“这就是遗传算法的由来,我想到,是不是可以像繁育良种马和良种玉米那样繁殖程序。”
霍兰德的主要兴趣在于适应现象——生物如何进化以应对其他生物和环境变化,计算机系统是不是也可以用类似的规则产生适应性。他在1975年的著作《自然和人工系统的适应》中列出了一组适应性的普遍原则,并且提出了遗传算法的构想。
算法其实就是图灵说的明确程序,就好比做菜的菜谱:一步一步将输入变成输出。
对于遗传算法(GA),期望的输出就是特定问题的解。GA的输入包括两部分:候选程序群体和适应性函数。适应性函数用来确定候选程序的适应度,度量程序完成指定任务的能力。候选程序可以表示成位、数字或符号组成的字符串。
下面是GA菜谱。我们将下面的步骤重复代数:
上面描述GA时似乎很简单,但是遗传算法已被用于解决科学和工程领域的许多难题,甚至应用到艺术、建筑和音乐。
下面我们用一个更详细的例子来进一步阐述GA的主要思想。
我有一个叫小黄的机器人,它的世界是二维的,到处是丢弃的易拉罐。我们将用遗传算法为小黄进化出一个"脑"(即控制策略)。
小黄的工作是清理它的世界中的空易拉罐。由上图所示,小黄的世界由10x10的100个格子组成。小黄在位置(0, 0)。我们可以假设周围围绕着一堵墙。许多格子中散落着易拉罐(每个格子中的易拉罐不会多于一个)。 小黄貌似不是很聪明的样子,他只能看到东南西北相邻的4个格子以及本身所在格子中的情况。格子可以是空的(没有罐子),或者有一个罐子,或者是墙。
每次清扫工作小黄可以执行200个动作。动作可以是以下7种:
往北移动
往南移动
往东移动
往西移动
随机移动
不动
收集罐子
每个动作都会受到奖赏或惩罚,如果小黄所在的格子中有罐子并且收集起来了,就会得到10分的奖赏。如果进行收集罐子的动作而格子中又没有罐子,就会被罚1分。如果撞到了墙,会被罚5分,并弹回原来的格子。
显然,小黄尽可能地多收集罐子,别撞墙,没罐子的时候别去捡,得到的分数就最高。
这是一个比较简单的问题,人工为小黄设计一个好策略可能也不是很难。不过,有了遗传算法我们就可以什么也不用干,我们只需要等着计算机替我们进化出来。
下面我们用遗传算法来为小黄进化出一个好策略。
要做的第一步,就是搞清楚我们想要进化的到底是啥?也就是说具体策略是啥?
一般来说,策略指的是一组规则,规则给出了在各种情形下你应当采取的行动。那么多少种可能的情形呢?小黄可以看到5个格子(当前格子、东、南、西、北),每个格子可以标为空、罐和墙。这样就有243种可能情形( 种可能)
比如说,下面这张策略表显示的就是一个策略:
要知道下一步怎么做,小黄只需要查看策略表。
小黄在(0, 0)位置时,查到对应的行动是往西移动。因此它往西移动一格,结果一头撞到墙上。
我之前并没有说这是个好的策略,寻找好策略不关我的事,这事归遗传算法管。
我们写了一个遗传算法程序来进化小黄的策略。算法中,群体里每一个个体都是一个策略(与各种可能情形相对应的行动列表)。也就是说,对于上面策略表中的策略,GA用来演化的个体就是最右侧243个行动依次列出的列表。
现在,我们再次解释一下GA的工作原理:
从现在开始我们重复1000次步骤2~步骤4
。
要回答这个问题,我们可以看一看策略是如何一代一代改进的。下图绘制出了每一代中最佳策略的适应度:
由上图可以看出,前300代提高得很快,此后的提高要慢一些。
第1代有200个随机生成的策略,可以想象它们都很糟糕。最好的策略适应度才-81,最糟糕的到了-825。在一些环境设定中,小黄移动了几步就卡住了,之后在整个任务过程中都停止不动。在一些情况下,则不停地撞墙,直到任务结束。有时候则一直不断地去捡罐子,虽然当前位置上没有罐子。
到第10代,群体中最佳策略的适应度已经变成正数了。这个策略经常会停滞不动,有时候还会在两个格子之间不停地来回移动。但基本不怎么撞墙。
到200代时,最好的策略已经具有向罐子移动并捡起罐子这个最重要的能力—至少大部分时候是这样。不过,如果周围没有罐子,它也会浪费很多时间用来随机游走。
到了400代,适应度超过了400分。
到800代时,GA发现了将罐子留作相邻罐子的路标的技巧。
GA就这样不断改进最佳适应度。
在实际应用中,GA经常能演化出有用的答案,但是很难看出为什么会有用。这是因为GA找到的好答案与人类想出的相当不同。美国国家航空航天局(NASA)的遗传算法专家罗恩曾这样说:“进化算法是探索设计死角的伟大工具。但是,我们经常发现进化出来的设计完全无法理解。”