创建虚拟生物第六部分

6生物进化
通过首先创建一个基因型的初始化的群体,虚拟生物的进化就开始了。
这些初始化的基因型能够来自于几个可能的源头:新的基因型能够被
合成,以结点和连接的集合的随机的下一代,为了生成新的进化的初始
群体,能够使用之前的进化的已存在的基因型,或者是手工设计的种子
基因型。然而,在这里展示的例子是非手工设计的种子基因型。

一个生存比例参数决定了每一代的生存比例。在这个工作中,群体数量是
300,生存比例是1/5。如果初始生成的群体的正适应度的数量比应该
生存的数量少,另一轮的种子基因型能够生成,来代替0适应度的个体。

对于每一代生物,它们都是按照它们的基因描述信息进行生长,并且它们
的适应度的值是按照上述所描述的方法中的一种进行度量。适应度落在存
活的比例中的个体能够生下一代,它们的后代充满了不能存活个体的位置。
监督者在保持下一代的群体,群体的总数量被保持稳定。每个存活的个体
产生的后代的数量正比于它的适应度,最成功的个体有最多的孩子。

从存活的个体产生它们的后代,通过复制和组合它们的有向图的基因型。
当这些图被产生,以概率性的改变或者是交换的方式,所以相对应的基因型
与父代是相似的,但是以随机的方式进行了改变或者是调整。

6.1交互有向图
一个有向图以如下的步骤进行交换:
1。每一个结点的内部参数都可能被改变。对于每个参数类型的交换频率
决定了一个交换应用到它身上的概率。布尔值的交换通过简单地改变它的状态。
为了一个高斯式的分布,标量的值通过在它身上加上一个随机的值,而交换。
所以小的调整比极端的值更常见。一个调整值的范围是相对于初始值的,
所以大的量能被更容易得改变,小的值被谨慎地调整。一个标量值可能是负的
一个交换发生后,值被约束在合理的范围之内。一些参数仅有有限个合法的值,
这样的参数是通过简单地随机地从集合中选择一个可能值的方式来完成交换。

2。一个随机的新结点被添加到图中。如果没有连接指向这个新结点,
这个新结点对基因型是没有影响的。因此一个新的结点总是初始化被添加的,
但是如果没有被连接的话,在第五步时进行垃圾回收。随着进化的进行,
交换的类型允许图的复杂度有增长。

3。每一个连接的参数都可能交换,与第一步的结点参数的方式是相同的。
连接的指针以一定的频率被移动,以随机地指向与它紧邻的不同的结点。

4。新的随机的连接被添加,并且原来的连接被移除。在神经图上这些操作没有
被执行,因为每一个元素的输入的数量是固定的,但是形态图上每个结点有可
变数量的连接。每个存在的结点有一个新的随机的连接添加上,每个存在的
连接可能被移除。

5。没有连接的元素被垃圾回收了。根据图的连接,连接性被计算,从形态的
根结点开始,或者从神经图的执行器结点开始。尽管为了可能的重连接留下断开的
结点可能是有利的,并且可能是生物学的相似的,至少是断开的新的添加的结点
被移除,来阻止图规模的非必要性的增长。

因为在每一个元素上执行交换,仅有一点的元素的基因型不可能接受任何
交换,然而有很多的元素的基因型接收了足够多的交换,它们很少与父代
相似。根据当前图的交换的大小的一个正比例的数量,临时性调整交换
频率是被允许的,在平均来说,在整个图上至少有一个交换发生。

嵌套的有向图的交换,正如这里用来表示生物的,通过首先交换外层图,
再交换图的内层,来执行这个过程。内层的图被最后交换,是因为内层
的结点的某些参数的合法的值能够外层图的拓扑关系。

6.2交配有向图
性生殖允许有多个亲代的基因被组合来形成后代。这允许性状独立的进化
并且然后合并成一个个体。对于交配有向图的两个不同的方法展示在这里。

第一个操作是交叉(见图5A)两个亲代的结点每个被对齐为一行正如它们
的存储顺序,为了生成子代,复制第一个亲代的结点,但是一个或者是多
个交叉点决定了复制源切换到另一个亲代的时机。结点的连接一同复制。
如果复制的结点指向越界了,它们被随机地重赋值。

第二个交配的操作是移植,通过把一个亲代的一个结点连接到另一个亲代
的一个结点上(见图5B)第一个亲代被复制,它的连接中的一个被随机
地选择,调整它的指向到第二个亲代中的一个随机的结点上。第一个亲代
的新的未连接的结点被移除,第二个亲代的新的连接的结点和第一个亲代
结点被添加到新的图中。

一个新的有向图能够通过以上的两个方法生成了,或者仅使用其中之一的
方法。交配的后代有时从属于后面的交换,但是归结于交换频率。在这个
工作中,对于每一个子代的产生,一个生殖方法接近于随机,通过存在的
个体使用比例:40%无性生殖,30%交叉,30%移植。如果必要的话,第
二个亲代从监督者中选择,并且一个新的基因型从一个或者是多个亲代生成。

基因型的一个新代创建之后,从每一个基因型生成一个基因型的生物,然后
它们的适应度被计算一下。正如变异和选择的循环在继续,群体被导向为生物
有越来越高的适应度。

6.3并发实现
为了在一个连接的机器CM5上的并发运行,这个遗传算法已经被实现了。
以一个主从的消息传递模型。一个单处理结点执行遗传算法。为了适应度
的测试,把基因型分包给其它的结点,它们被确定之后再取回适应度的值。
适应度的测试包括了每一个动态模拟,尽管大部分能够执行接近实时,它们
仍然是系统的主要的计算性需求。每个处理器执行一个适应度的测试,并行
化这个遗传算法是一个简单的但是很有效的方式,并且整体性能与处理器
的数量是线性关系,只要群体的数量比处理器的数量仅多一点点。

为了计算每个适应度的测试,花费了不同的时间,这依赖于生物的复杂度
和它试图如何移动。为了阻止处理器有空闲,它仅仅在等待其它的处理器完成,
在所有的个体完成适应度的测试之前就生成新的子代。在生殖的循环中,
那些慢的模拟被跳过,所以所有的处理器保持活跃。使用这个方法,一个进化
有群体300个,运行100代,在一个CM5上有32个处理器,花费的时间是3个
小时。

发布了108 篇原创文章 · 获赞 16 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/gggwfn1982/article/details/105461337
今日推荐