private Generation CreateGenerationOfMutants(List <string> baseGenomes)
    {
        //Debug.Log("Generating generation from [" + string.Join(",", baseGenomes.ToArray()) + "]");
        var genration = new Generation();
        int i         = 0;

        //Debug.Log("IndinvidualsCount = " + genration.CountIndividuals());
        while (genration.CountIndividuals() < GenerationSize)
        {
            var baseGenome = baseGenomes[i];
            var mutant     = _mutator.Mutate(baseGenome);
            if (IsValidGenome(mutant))
            {
                Debug.Log(mutant + " spawn of " + baseGenome + " is born");
                genration.AddGenome(mutant);
                //Debug.Log("IndinvidualsCount = " + genration.CountIndividuals());
            }
            else
            {
                Debug.Log(mutant + " spawn of " + baseGenome + " is too rubbish to be born");
            }
            i++;
            i = i % baseGenomes.Count;
        }
        //Debug.Log("mutant Generation: " + genration);
        return(genration);
    }
    private void ReadCurrentGeneration()
    {
        if (File.Exists(CurrentGenerationFilePath))
        {
            var GenerationNumberText = File.ReadAllText(CurrentGenerationFilePath);
            if (!int.TryParse(GenerationNumberText, out GenerationNumber))
            {
                GenerationNumber = 0;
            }
            string path = PathForThisGeneration();

            //Debug.Log("looking for genreation at " + path);

            var lines = File.ReadAllLines(path);
            _currentGeneration = new Generation(lines);
        }
        else
        {
            Debug.Log("Current generation File not found mutating default for new generation");
        }
        if (_currentGeneration == null || _currentGeneration.CountIndividuals() < 2)
        {
            //Debug.Log("Generating generation from default genomes");
            _currentGeneration = CreateGenerationOfMutants(new List <string> {
                DefaultGenome
            });
        }
        //Debug.Log("_currentGeneration: " + _currentGeneration);
    }