public double CalculateFitness(string text, string genes) { string decr = Decrypt.DecryptText(text, genes); Dictionary <string, double> monogramM = LetterFrequancy(decr, 1); Dictionary <string, double> bigramM = LetterFrequancy(decr, 2); Dictionary <string, double> trigramM = LetterFrequancy(decr, 3); double diff1, diff2, diff3, f; int w = WordFrequancy(decr); diff1 = CompareDictionaries(monogramD, monogramM); diff2 = CompareDictionaries(bigramD, bigramM); diff3 = CompareDictionaries(trigramD, trigramM); f = -(diff1 + diff2 * 0.6 + diff3 * 0.5) + (double)w / 20; //+ count of words / 20 return(f); }
static void Main(string[] args) { string encrypt = "EFFPQLEKVTVPCPYFLMVHQLUEWCNVWFYGHYTCETHQEKLPVMSAKSPVPAPVYWMVHQLUSPQLYWLASLFVWPQLMVHQLUPLRPSQLULQESPBLWPCSVRVWFLHLWFLWPUEWFYOTCMQYSLWOYWYETHQEKLPVMSAKSPVPAPVYWHEPPLUWSGYULEMQTLPPLUGUYOLWDTVSQETHQEKLPVPVSMTLEUPQEPCYAMEWWYOYULULTCYWPQLSEOLSVOHTLUYAPVWLYGDALSSVWDPQLNLCKCLRQEASPVILSLEUMQBQVMQCYAHUYKEKTCASLFPYFLMVHQLUHULIVYASHEUEDUEHQBVTTPQLVWFLRYGMYVWMVFLWMLSPVTTBYUNESESADDLSPVYWCYAMEWPUCPYFVIVFLPQLOLSSEDLVWHEUPSKCPQLWAOKLUYGMQEUEMPLUSVWENLCEWFEHHTCGULXALWMCEWETCSVSPYLEMQYGPQLOMEWCYAGVWFEBECPYASLQVDQLUYUFLUGULXALWMCSPEPVSPVMSBVPQPQVSPCHLYGMVHQLUPQLWLRPHEUEDUEHQMYWPEVWSSYOLHULPPCVWPLULSPVWDVWGYUOEPVYWEKYAPSYOLEFFVPVYWETULBEUF"; Generation task = new Generation(250, 10, encrypt); DNA best = task.Population[0]; Console.WriteLine($"generation 0 decrypt: {Decrypt.DecryptText(encrypt, best.Genes())}"); for (int i = 0; i < 200; i++) { task.CreateNewPopulation(); Console.WriteLine($"\n Generation: {i + 1}"); best = task.Population[0]; Console.WriteLine($"key: {best.Genes()} fitness: {best.Fit}"); Console.WriteLine($"decrypt: {Decrypt.DecryptText(encrypt, best.Genes())}"); } Console.Read(); }