Exemple #1
0
        public object Clone()
        {
            DecodedNetworks decodedNetwork = new DecodedNetworks();

            decodedNetwork.Inputs          = new List <DecodedNetworks.Node>(this.Inputs.Count);
            decodedNetwork.Neurons         = new List <DecodedNetworks.Node>(this.Neurons.Count);
            decodedNetwork.ActivatingNodes = new List <DecodedNetworks.Node>(this.ActivatingNodes.Count);
            decodedNetwork.OutputArray     = new double[this.OutputArray.Length];
            decodedNetwork.Outputs         = new List <DecodedNetworks.Node>(this.Outputs.Count);
            for (int index1 = 0; index1 < this.Neurons.Count; ++index1)
            {
                DecodedNetworks.Node node = new DecodedNetworks.Node();
                node.activation = this.Neurons[index1].activation;
                node.links      = new List <DecodedNetworks.Link>(this.Neurons[index1].links.Count);
                for (int index2 = 0; index2 < this.Neurons[index1].links.Count; ++index2)
                {
                    node.links.Add(this.Neurons[index1].links[index2]);
                }
                node.signal     = 0.0;
                node.tempSignal = 0.0;
                decodedNetwork.Neurons.Add(node);
                if (this.Inputs.Contains(this.Neurons[index1]))
                {
                    decodedNetwork.Inputs.Add(node);
                }
                else if (this.Outputs.Contains(this.Neurons[index1]))
                {
                    decodedNetwork.Outputs.Add(node);
                    decodedNetwork.ActivatingNodes.Add(node);
                }
                else if (this.ActivatingNodes.Contains(this.Neurons[index1]))
                {
                    decodedNetwork.ActivatingNodes.Add(node);
                }
            }
            return((object)decodedNetwork);
        }
Exemple #2
0
        public static DecodedNetworks DecodeGenome(NetworkGenome genome)
        {
            DecodedNetworks decodedNetwork = new DecodedNetworks();
            NetworkGenome   NetworkGenome  = genome.Clone() as NetworkGenome;

            NetworkGenome.Nodes.Sort();
            for (int index = 0; index < NetworkGenome.Nodes.Count; ++index)
            {
                if (NetworkGenome.Nodes[index].Id != index)
                {
                    foreach (LinkGene LinkGenes in NetworkGenome.Links)
                    {
                        if (LinkGenes.Source == NetworkGenome.Nodes[index].Id)
                        {
                            LinkGenes.Source = index;
                        }
                        if (LinkGenes.Target == NetworkGenome.Nodes[index].Id)
                        {
                            LinkGenes.Target = index;
                        }
                    }
                }
                NetworkGenome.Nodes[index].Id = index;
            }
            foreach (NodeGene NodeGenes in NetworkGenome.Nodes)
            {
                DecodedNetworks.Node node = new DecodedNetworks.Node();
                node.activation = ActivationFunctions.GetFunction(NodeGenes.Function);
                foreach (LinkGene LinkGenes in NetworkGenome.Links)
                {
                    if (LinkGenes.Target == NodeGenes.Id)
                    {
                        node.links.Add(new DecodedNetworks.Link()
                        {
                            sourceNode = LinkGenes.Source,
                            weight     = LinkGenes.Weight
                        });
                    }
                }
                if (NodeGenes.Type == NodeType.Bias)
                {
                    node.signal = 1.0;
                    decodedNetwork.Neurons.Add(node);
                }
                else if (NodeGenes.Type == NodeType.Input)
                {
                    decodedNetwork.Neurons.Add(node);
                    decodedNetwork.Inputs.Add(node);
                }
                else if (NodeGenes.Type == NodeType.Hidden)
                {
                    decodedNetwork.Neurons.Add(node);
                    decodedNetwork.ActivatingNodes.Add(node);
                }
                else
                {
                    decodedNetwork.Neurons.Add(node);
                    decodedNetwork.ActivatingNodes.Add(node);
                    decodedNetwork.Outputs.Add(node);
                }
            }
            decodedNetwork.OutputArray = new double[decodedNetwork.Outputs.Count];
            return(decodedNetwork);
        }