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); }
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); }