public Individual crossover(IReadOnlyIndividual i)
        {
            int    randInt = _rnd.Next(0, this.Genes.Length);
            string lhs     = this.Genes.Substring(0, randInt);
            string rhs     = i.Genes.Substring(randInt);

            Individual child = new Individual(lhs + rhs);

            return(child);
        }
        public double CalcFitness(IReadOnlyIndividual indiv, IReadOnlyIndividual goal)
        {
            double fitness = 0;
            int    len     = goal.Genes.Length;

            //if (indiv.Genes.Length != len) return -1;

            for (int i = 0; i < len; ++i)
            {
                if (i > indiv.Genes.Length - 1)
                {
                    break;
                }

                if (indiv.Genes[i] == goal.Genes[i])
                {
                    ++fitness;
                }
            }

            fitness = fitness / (double)len;

            return(fitness);
        }