Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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())));
        }
Ejemplo n.º 3
0
        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()));
            }
        }