变异方向:增加NEAT算法的连接操作

Direction in mutation: add connection operation of NEAT Algorithm

我看过NEAT算法的论文here。并想亲自尝试一下。但我对算法还有一个疑问,那就是:

如果选择了2个隐藏节点,如何在添加连接变异操作中确定连接的方向?

假设我有一个网络,其中节点 1,2 是输入节点,3,4,5 是隐藏节点,6 是输出节点。

节点 3 和 4 直接与输入 1,2 连接,其中 5 当前仅连接节点 4 并将其定向到输出节点 6。

如果一个节点是输入或输出,则很容易确定新连接的输入和输出节点。但是如果在上面的例子中,代码决定在节点 3 和节点 5 之间添加一个连接。我应该使用哪个节点作为入节点,哪个节点作为出节点?或者没关系?

没关系。正常.

典型的解决方案是 select 首先一个节点来自(有一些限制,比如:避免输出节点)然后一个节点到(有一些不同的限制,比如:避免输入节点)。

有时您会需要额外检查。例如,您可能希望使用不允许连接循环的仅前馈网络。在这种情况下,您将需要检查 selected from-to 节点对不会创建循环。

但是,我强烈建议您使用和修改 NEAT 的现有实现(检查 Colin Green,谁负责一些非常高质量的 NEAR 存储库)。如果您需要所有的技巧和良好实践,您会发现 NEAT 的实现出奇地复杂。