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); } }
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)); } } }