咱们先来看看比较古板的遗传算法描述:
a)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。
b)个体评价:计算群体P(t)中各个个体的适应度。 c)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。 d)交叉运算;将交叉算子作用于群体。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。遗传算法中起核心作用的就是交叉算子。 e)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。 群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t 1)。f)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。
上述说了那多,初始化、个休评价、选择运算、交叉运算、变异运算,很多人看了都云里来雾里去。
这些东西怎么运用到实际当中去呢?
我前些天在明珠电视台看了一段美国科学纪录片,当中讲到了,俄罗斯的研究人员,将狐狸驯化的实验。
实验当中,研究人员首先挑选了一批比较温和的狐狸,来做初始代,以让他们繁殖后代,看能否繁殖出家禽般的温驯的动物。看狐狸是否温和,这就是个体评价,选择出来做为初始代,这就是第一次运行运算。
公性和母性的狐狸被圈养在一起,温和的公性狐狸和母性狐狸之间日久生情,不由得偷吃的禁果,两个狐狸欲死欲仙,在某点上合二为一,这就是交叉运算。偷吃禁果以后,母狐狸怀孕了,生出了小狐狸,小狐狸继承了父母的个性,实验人员又对其进行训练,使之变得更加温和了,这就是变异运算。通过几代选择、繁殖以后,最新一代的狐狸居然变得和狗一样温驯,容易与人接触、交流,达成了研究人员的初始目标。原来这一代家禽狐狸就是他们需要找的。
结论:
虽然世界上所有的狐狸中本来就有完全像狗一样的,或者已经逝去,或者就在某个人的家中,我们如果想得到一只或一批,那么我们是去全世界广播式的搜索?然后将全世界的狐狸集中起来一个一个的比较,看是否符合要求(这就好比穷举算法,成本高昂,现在的宣传一个华为手机广告都要好几亿呐,呵呵),还是利用遗传属性,挑选出一批来驯化繁殖,来得到我们想要的?
穷举法能得到最温驯的家禽,遗传算法也能得到近似最温驯的一个解,但成本相对很少。
这就是遗传算法的魅力所在。