您的位置:首页 > 产品设计 > UI/UE

初识遗传算法(三): 模块化和积木

2018-02-02 05:10 609 查看
上节讨论了适应度地形和协同进化,这节来到了重点部分,模块化(Modularity)和积木(Building-blocks)。

1.为什么使用模块化

大致来说模块化有两大功效: 帮助理解网络和激发复杂系统的衍化性。

(1)理解网络即将复杂的网络分为许多子网络
(2)复杂系统的衍化性指的是: 对于一个复杂的生物种群,其适应度地形中可能存在很多盆地(basin),而这些盆地使得普通的遗传算法或者爬山法陷在局部最优中,那么如果将这个总的基因的进化任务分为许多小的半相关的部分,每部分负责不同表现型的进化(譬如这一块负责眼睛,那一块负责耳朵)之类的,就能很大程度上确保不被局部最优所困。

2.模块化的例子之一: 积木

积木(Building block)即将一个基因分为多个部分,然后对每个部分设立适应度方程。
譬如一个基因是1001100010,我们从中间将其一分为二,设前一半的最高适应度的目标基因型是11111,对后一半最高适应度基因型是00000,设a是当前基因前一半与目标基因型符合的基因个数,b是后一半的,适应度方程为$$r*(2^a+2^b)$$。其中r从(0.5,1]取得一个随机数。那么在例子1001100010中a=3,b=4。
对于这个适应度函数而言,当基因长度增加到60或以上后,一般的爬山法是无法得到最优解的,因为乘的那个r相当于一个高斯白噪声,由于这个噪声的存在,进化过程中的梯度被大大减弱,使得爬山法无法找到正确的梯度下降的道路,也就无法取得全局最优。但用building blocks的遗传算法不一样,它能通过后代的交叉传播,使得优秀的两个模块相结合,从而得到全局最优。
其过程是两个模块单独进化,不互相影响,之后再通过交叉传播(crossover),达到不同个体包含的不同优秀的模块能相互结合,最后形成完成且完美的基因型。

References: Watson,
R. A. (2004, September). A simple two-module problem to exemplify building-block assembly under crossover. In International Conference
on Parallel Problem Solving from Nature (pp. 161-171). Springer, Berlin, Heidelberg.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息