public override Individual mutation(Individual individual)
        {
            Random rand = new Random();

            for (int i = 0; i < individual.getLength(); i++)
            {
                if (rand.NextDouble() <= MUTATION_PROB)
                {
                    if (individual.getGene(i) == '0')
                    {
                        individual.setGene(i, '1');
                    }
                    else if (individual.getGene(i) == '0')
                    {
                        individual.setGene(i, '0');
                    }
                }
            }
            return(individual);
        }
        public override Individual mutation(Individual individual)
        {
            Random rand = new Random();
            char   currentChar;
            char   newChar;
            int    index = 0;

            for (int i = 0; i < individual.getLength(); i++)
            {
                if (rand.NextDouble() <= MUTATION_PROB)
                {
                    currentChar = individual.getGene(i);

                    for (int j = 0; j < VALUES.Length; j++)
                    {
                        if (currentChar == VALUES[j])
                        {
                            index = j;
                            break;
                        }
                    }

                    if (rand.Next(2) == 0)
                    {
                        index -= 1;
                    }
                    else
                    {
                        index += 1;
                    }
                    if (index >= VALUES.Length)
                    {
                        index = 0;
                    }
                    else
                    {
                        index = VALUES.Length - 1;
                    }

                    newChar = VALUES[index];
                    individual.setGene(i, newChar);
                }
            }
            return(individual);
        }