public void SANgramsIC() { AlphabetVector keepTranspositionKey = new AlphabetVector(keyLength, false); AlphabetVector newTranspositionKey = new AlphabetVector(keyLength, false); ADFGVX key = new ADFGVX("", keyLength); TranspositionTransformations transforms = new TranspositionTransformations(keyLength, true, true, true); for (int cycles = 1; cycles <= restarts; cycles++) { if (cycles % 10 == 0) { analyzer.LogText += Environment.NewLine + "Task id: " + taskId + " starting with cycle: " + cycles; } key.randomTranspositionKey(); double score = eval(key); double startTemp = 500.0; double endTemp = 20.0; double delta = 20.0; double temp = startTemp; for (int step = 0; temp >= endTemp; step++, temp -= delta) { transforms.randomize(); int size = transforms.size(); for (int i = 0; i < size; i++) { keepTranspositionKey.copy(key.transpositionKey); transforms.transform(keepTranspositionKey.TextInInt, newTranspositionKey.TextInInt, keyLength, i); key.setTranspositionKey(newTranspositionKey); double newScore = eval(key); if (SimulatedAnnealing.accept(newScore, score, temp)) { score = newScore; if (score > threadingHelper.bestOverall) { printIfBest(key, cycles, step, score, temp, deviation); } } else { key.setTranspositionKey(keepTranspositionKey); } } // Update PresentationView long alldecryptions = 0; lock (threadingHelper.decryptionsLock) { foreach (long d in threadingHelper.decryptions) { alldecryptions += d; } threadingHelper.UpdateDisplayEnd(keyLength, alldecryptions, restarts * (long)(startTemp / delta) * size + restarts); } } } //log.LogText("Task " + taskId + " Fertig", Logtype.Info); }