Dies ist eine alte Version des Dokuments!
# -*- coding: utf8 -*- import read from auswertungsprogramm import * from simulation import * from nfaq import * import copy import math import random from tauschheuristik import tauschen def annealing(zuege, streckendaten, anschlussdaten, fcool): T = 1 # Temperatur wird auf 1 gesetzt Tmin = 0.1 # Temperatur bei der abgebrochen werden soll bestereihe = zuege bestesergebnis = auswertung(simulieren(bestereihe), anschlussdaten) ralt = copy.deepcopy(bestereihe) salt = copy.deepcopy(bestesergebnis) counter = 0 while T > Tmin: for i in range(0,25): # pro Temperatur wird öfters simuliert rneu = tauschen( zuege, random.randint( 0, len( zuege ) - 1 ), random.randint( 0, len( zuege ) - 1 ) ) # zufaelliges tauschen zweier Zuege rneu = deepcopy(rneu) sneu = auswertung( simulieren(rneu), anschlussdaten) if akzeptanz(salt, sneu, T) > random.random(): # Akzeptanz wird mit random wert (0-1) verglichen, ggf gewechselt salt = sneu ralt = rneu if salt < bestesergebnis: # Wenn globales Optimum gefunden, dieses festlegen bestesergebnis = copy.deepcopy(salt) bestereihe = copy.deepcopy(ralt) counter += 1 T = T*fcool print("SimAnn: " + str(counter) + " Tauschversuche durchgeführt") return bestereihe def akzeptanz(salt, sneu, T): return math.exp((salt-sneu)/(1000*T))