使用NEAT算法向结构中添加节点/连接

时间:2019-09-01 14:58:41

标签: machine-learning neat

某些消息源(在下面链接)说,变异可以添加一个新节点或减去一个节点或在两个现有节点之间添加连接。但是,如果这样做,它不会改变整个人群中的基因数量。

让我们说有2个生物,其中一个变异并在2个现有节点之间添加连接,该生物现在比另一个具有更多的基因吗?

那么我们怎么可能在两者之间进行交叉?

或者在节点之间添加连接是否意味着两个节点之间已经存在一个连接,但是该连接的权重为0,因此它没有任何作用,并且对其进行了更改以使其具有某种作用而进行了更改? / p>

这已经困扰了我很多时间了。

感谢您的帮助。

谢谢

https://towardsdatascience.com/neat-an-awesome-approach-to-neuroevolution-3eca5cc7930f

1 个答案:

答案 0 :(得分:0)

简而言之:当然,创建或破坏节点和连接会改变基因组的大小,从而使不同的基因组不兼容,无法进行比较(从而无法进行有性繁殖和交叉)。

NEAT背后的关键思想是用自己的ID仔细标记每个新结构。通常,只有节点具有唯一的ID,并且连接是由它们链接在一起的节点定义的。这样,交叉就知道基因组的哪些部分兼容,哪些不兼容。

想象一下这两个基因组:

基因组A
节点: 1 2 3 ,5, 7
连接: 1-2 ,1-3、2-5、5-7, 3-7

基因组B
节点: 1 2 3 7
连接: 1-2 ,1-7、2-3, 3-7

我们知道节点1、2、3和7是公用的,因此可以直接进行交叉操作(尽管通常节点没有参数,因此此步骤实际上没有任何作用)。节点5是基因组A独有的,不会参与交换。

连接1-2和3-7是常见的,其余的并不常见,因此只有1-2和3-7会直接在交叉中发生(通常每个连接随机从一个父级获取权重)。 / p>

通常,子基因组也有可能从两个亲本中的一个(或者从最适婚的亲本,或者您定义此步骤)中继承(标准交换后)所有唯一元素。