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