public INeuralNetwork Clone() { var simpleNetwork = SimpleNeuralNetworkFactory.Create(Inputs.Count, Hidden.Count, Output.Count); // Copy weights for (int i = 0; i < Synapses.Count; i++) { simpleNetwork.Synapses.ElementAt(i).Weight = Synapses.ElementAt(i).Weight; } // Copy activation functions var sourceNeurons = Neurons.OfType <ICalculatableNeuron>().ToArray(); var targetNeurons = simpleNetwork.Neurons.OfType <ICalculatableNeuron>().ToArray(); for (int i = 0; i < sourceNeurons.Count(); i++) { targetNeurons.ElementAt(i).ActivationFunction = sourceNeurons.ElementAt(i).ActivationFunction; } simpleNetwork.Generation = Generation; return(simpleNetwork); }