static public INetwork DecodeToConcurrentNetwork(NeatGenome.NeatGenome g, IActivationFunction activationFn) { //----- Loop the neuronGenes. Create Neuron for each one. // Store a table of neurons keyed by their id. Hashtable neuronTable = new Hashtable(g.NeuronGeneList.Count); NeuronList neuronList = new NeuronList(); foreach(NeuronGene neuronGene in g.NeuronGeneList) { Neuron newNeuron = new Neuron(activationFn, neuronGene.NeuronType, neuronGene.InnovationId); neuronTable.Add(newNeuron.Id, newNeuron); neuronList.Add(newNeuron); } //----- Loop the connection genes. Create a Connection for each one and bind them to the relevant Neurons. foreach(ConnectionGene connectionGene in g.ConnectionGeneList) { Connection newConnection = new Connection(connectionGene.SourceNeuronId, connectionGene.TargetNeuronId, connectionGene.Weight); // Bind the connection to it's source neuron. newConnection.SetSourceNeuron((Neuron)neuronTable[connectionGene.SourceNeuronId]); // Store the new connection against it's target neuron. ((Neuron)(neuronTable[connectionGene.TargetNeuronId])).ConnectionList.Add(newConnection); } return new ConcurrentNetwork(neuronList); }
public void SetSourceNeuron(Neuron neuron) { sourceNeuron = neuron; }