我正在实施Stanley 的NEAT(增强拓扑的神经进化)。我在基因组交叉过程中面临一个问题。
假设两个有连接的网络
Genome1 = {
(1, Input1, Output), // numbers represent innovation numbers
(2, Input2, Output)
} // more fit
Genome2 = {
(1, Input1, Output),
(2, Input2, Output), // disabled
(3, Input2, Hidden1),
(4, Hidden1, Output)
}
被交叉,则 fitter 父级中的连接 (Input2, Output) 有可能被禁用(第 109 页,第 3.2 节,图 4),
如果遗传基因在任一父母中被禁用,则有一个预设的机会被禁用。
从而产生以下后代:
Child = {
(1, Input1, Output),
(2, Input2, Output) //Disabled
}
从而使网络无法正常工作。
同样,通过这个机会,节点可能会在交叉后处于无用状态(如没有传出连接或根本没有连接)。
如何防止这种情况,或者我在这里遗漏了什么?