/// <summary> /// Create next generation. /// </summary> /// <returns>Next generation NeuralNetwork.</returns> public NeuralNetwork NextGeneration() { NeuralNetwork rtnn = new NeuralNetwork(sourceNetwork); //create new if (first) { rtnn.CopyWeightsAndBiases(sourceNetwork); first = false; } else { if (breeding && bestLoss <= maxBreedingLoss) { if (bestNetwork != null && secondBestNetwork != null) { rtnn.CopyWeightsAndBiases(bestNetwork); rtnn.Breed(secondBestNetwork); if (lossDelta > 0.0f) { rtnn.Mutate(lossDelta); } } else { rtnn.RandomizeWeightsAndBiases(); } } else { rtnn.RandomizeWeightsAndBiases(); } } return(rtnn); }