private void CreateNeuronGene(CPPNNEATLinkGene selectedLink) { DisableLinkGene(selectedLink); var newNeuron = ParentGA.GetHiddenNeuron(selectedLink.InnovationNumber); TryAddLinkGene(new CPPNNEATLinkGene(ParentGA.GetEdgeInnovationNumber(selectedLink.From, newNeuron), selectedLink.From, newNeuron, 1)); TryAddLinkGene(new CPPNNEATLinkGene(ParentGA.GetEdgeInnovationNumber(newNeuron, selectedLink.To), newNeuron, selectedLink.To, selectedLink.Weight)); }
private bool TryCreateLinkGene(CPPNNEATNeuronGene from, CPPNNEATNeuronGene to) { if (to.Level == 0) { throw new ApplicationException("Links should not go into input or bias neurons"); } else if (ParentGA.FeedForwardOnly && from.Level >= to.Level) { throw new ApplicationException("Cannot create recursive connections in feed forward only networks"); } return(TryAddLinkGene(new CPPNNEATLinkGene(ParentGA.GetEdgeInnovationNumber(from, to), from, to, ParentGA.GetRandomWeight()))); }
public void Initialise() { linkGeneMap.Clear(); neuronGeneSet.Clear(); possibleConnections.Clear(); orphanedNeurons.Clear(); sortedLinkGenesCacheExpired = true; foreach (var linkGene in ParentGA.DefaultLinkGenes) { TryAddLinkGene(new CPPNNEATLinkGene(linkGene.InnovationNumber, linkGene.From, linkGene.To, ParentGA.GetRandomWeight())); } }