Beispiel #1
0
 public double CalculateFitness()
 {
     if (rate.HasValue)
     {
         return(rate.Value);
     }
     else
     {
         SubstitutionDecrypt decriptor = new SubstitutionDecrypt(Chromosome);
         string decryptedText          = decriptor.DecryptText(encryptedText);
         rate = CipherFitness.NewEvaluate(decryptedText);
         return(rate.Value);
     }
 }
Beispiel #2
0
        public string Run()
        {
            currentGeneration = 1;
            CreateFirstPopulation();
            double maxRate = 0.0;
            double sumRate = 0.0;

            foreach (var gen in population)
            {
                sumRate += gen.CalculateFitness();
                if (maxRate < gen.CalculateFitness())
                {
                    maxRate = gen.CalculateFitness();
                }
            }

            double maxRate1 = maxRate;

            Console.Clear();
            List <string> output = Decryption.WordNinja.WordNinja.Split(new SubstitutionDecrypt(population.First().Chromosome).DecryptText(encryptedText));

            foreach (var elem in output)
            {
                Console.Write(elem + " ");
            }
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("generation: " + currentGeneration + " max rate: " + maxRate + " avg rate: " +
                              (sumRate / populationCount) + " gen: " + population.First().Chromosome);
            int i = 0;
            int j = 0;
            int k = 0;

            while (true)
            {
                i++;
                if (i == 20)
                {
                    if (CipherFitness.NewEvaluate(new SubstitutionDecrypt(population.First().Chromosome).DecryptText(encryptedText)) < 110)
                    {
                        i = 0;
                    }
                }

                k++;
                if (k == 20)
                {
                    Console.Clear();
                    output = Decryption.WordNinja.WordNinja.Split(new SubstitutionDecrypt(population.First().Chromosome).DecryptText(encryptedText));
                    foreach (var elem in output)
                    {
                        Console.Write(elem + " ");
                    }
                    Console.WriteLine();
                    Console.WriteLine("\ngeneration: " + currentGeneration + " max rate: " + maxRate + " avg rate: " +
                                      (sumRate / populationCount) + " gen: " + population.First().Chromosome);
                    k = 0;
                }
                CreateNewGeneration();

                maxRate = 0.0;
                sumRate = 0.0;
                foreach (var gen in population)
                {
                    sumRate += gen.CalculateFitness();
                    if (maxRate < gen.CalculateFitness())
                    {
                        maxRate = gen.CalculateFitness();
                    }
                }

                if (maxRate1 + 0.1 > maxRate)
                {
                    j++;
                }
                else
                {
                    j = 0;
                }

                maxRate1 = maxRate;

                if (j == 150)
                {
                    population = new SortedSet <Gen>();
                    CreateFirstPopulation();
                }
                if (maxRate > 105)
                {
                    probabilityOfMutation = 0.25;
                }

                if (i == 100)
                {
                    Console.Clear();
                    return(new SubstitutionDecrypt(population.First().Chromosome).DecryptText(encryptedText));
                }
            }
        }