private double CalculateFitness(NGramFrequencies nGramFrequencies, string encryptedText, string chromosone) { double currentFitness = 0; string decryptedText = SubstitutionCipher.DecryptText(encryptedText, chromosone); MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(decryptedText)); NGramFrequencies decryptedTextFrequencies = NGramFrequencies.Analyse(new StreamReader(stream), nGramFrequencies.Length); foreach (string ngram in decryptedTextFrequencies) { double trainedFrequency = nGramFrequencies.FrequencyOf(ngram); if (trainedFrequency != 0) { currentFitness += decryptedTextFrequencies.FrequencyOf(ngram) * Math.Log(trainedFrequency, FITNESS_LOGARITHM_BASE); } } return currentFitness; }
public Environment(string trainingFilePath, string plainText, string encryptedText, int numberOfGenerations, int populationSize, double percentageOfElitism, int tournamentSize, double tournamentWinnerProbability, double probabilityOfCrossover, int numberOfCrossoverPoints, double probabilityOfMutation) { this.nGramFrequencies = NGramFrequencies.Analyse(new StreamReader(trainingFilePath), NGRAM_LENGTH); this.trainedLetterFrequencies = LetterFrequencies.Analyse(new StreamReader(trainingFilePath)); this.cipherLetterFrequencies = LetterFrequencies.Analyse(new StreamReader(new MemoryStream(ASCIIEncoding.Default.GetBytes(encryptedText)))); this.randomNumberGenerator = new Random(1337); this.decryptedText = plainText.Trim().ToUpper(); this.encryptedText = encryptedText.Trim().ToUpper(); this.numberOfGenerations = numberOfGenerations; this.populationSize = populationSize; this.percentageOfElitism = percentageOfElitism; this.tournamentSize = tournamentSize; this.tournamentWinnerProbability = tournamentWinnerProbability; this.probabilityOfCrossover = probabilityOfCrossover; this.numberOfCrossoverPoints = numberOfCrossoverPoints; this.probabilityOfMutation = probabilityOfMutation; this.population = new List<Individual>(); this.currentGeneration = 0; CreateInitialPopulation(); }
public Individual(NGramFrequencies nGramFrequencies, string encryptedText, string chromosone) { this.chromosone = chromosone; this.fitness = CalculateFitness(nGramFrequencies, encryptedText, chromosone); }