Beispiel #1
0
 public Node()
 {
     this.signal     = 0.0;
     this.tempSignal = 0.0;
     this.activation = ActivationFunctions.GetFunction("Identity");
     this.links      = new List <DecodedNetworks.Link>();
 }
Beispiel #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);
        }