Dies ist eine alte Version des Dokuments!
import random import matplotlib.pyplot as plt def geschw(m,w): a=random.choice(range(0,10)) #a bestimmt, ob der Nachkomme von m und w mutiert(Wahrscheinlichkeit von 1/10) if a==0: b=random.choice(range(-9,10)) #b bestimmt, um wie viel er mutiert x=(m+w)/2+0.01*b*((m+w)/2) #neuer Wert setzt sich im Falle der Mutation aus m,w und b*((m+w)/2), letzteres um zu verhindern, dass der Wert unter 0 fällt. else: x=(m+w)/2 return x #x wird als Wert der Eigenschaft für den Nachkommen zurückgegeben. def werte(el1,el2): global ma #der größte Wert innerhalb einer Generation global mi #der kleinste Wert innerhalb einer Generation global du #der addierte Wert aller Wesen einer Generation if el1<el2: #wenn el2 größer ist if el2>ma: #prüfe, ob es auch größer als das bisherige größte Element dieser Generation ist, ma=el2 #ist dies der Fall, setze el2 als neues ma ein if el1<mi: #prüfe außerdem, ob el1 kleiner als das bisherige kleinste Element dieser Generation ist, mi=el1 #ist dies der Fall, setze el1 als neues mi ein else: #ist el1 größer als el2, prüfe das ganze andersrum if el1>ma: ma=el1 if el2<mi: mi=el2 du=du+el1+el2 #addiere die beiden Werte der Wesen zu du hinzu v=1 #Anfangswert der Eigenschaften für alle ürsprünglichen Wesen N=1000 #Anzahl der männlichen und weiblichen Wesen n=0 #Zähler für erstellen der Liste von Kreaturen m=0 #Zähler für Runde M=1000 #Anzahl der Runden liste1=[] #Liste der Wesen des Geschlechtes 1 liste2=[] #Liste der Wesen des Geschlechtes 2 mage=[] #Liste der Maximalgeschwindigkeit in jeder Runde mige=[] #Liste der Minimalgeschwindigkeit in jeder Runde duge=[] #Liste der durchschnittlichen Geschwindigkeit in jeder Runde runde=[] #Liste der Runde while n<N: #Erstellen von zwei gleichlangen Listen für die Eigenschaft v von den Wesen des Geschlechts 1 und 2 liste1.append(v) liste2.append(v) n=n+1 while m<M: x=0 #Zähler für das paaren aller Kreaturen beider Geschlechter neuliste1=[] #Neue Liste der Wesen des Geschlechts 1 neuliste2=[] #Neue Liste der Wesen des Geschlechts 2 #Ab hier werden M Durchgänge lang zwei neue Listen erstellt, während die Kreaturen in den alten Listen sich jeweils zu zweit #paaren und ihre durchschnittlichen Eigenschaften an zwei Nachkommen weitergeben, welche in zwei Neue Listen gepackt werden while x<N: l1=liste1[x] #l1 ist das x-te Element aus liste1 l2=liste2[x] #l2 ist das x-te Element aus liste2 neuliste1.append(geschw(l1,l2)) #geschw paart zwei Kreaturen beider Geschlechter miteinander und lässt sie neuliste2.append(geschw(l1,l2)) #einen Nachkommen zeugen, welcher zu einer der Listen hinzugefügt wird. x=x+1 ma=v #Das größte v eines Wesens einer Generation mi=v #Das kleinste v eines Wesens einer Generation du=0 #Den Wert aller Wesen einer Generation zusammenaddiert (zum späteren ermitteln des durchschnittlichen Wertes aller Wesen dieser Generation) n=0 #Zähler #Nun werden die einzelnen Elemente der beiden neuen Listen auf das kleinste und größte Element untersucht und der Durchschnitt #aller Elemente gebildet while n<N: el1=neuliste1[n] #betrachte je das n-te Element von neulist1 el2=neuliste2[n] #und neulist2 werte(el1,el2) #füre mit diesen werte aus n=n+1 duge.append(du/(2*N)) #fülle die Listen mit den entsprechenden Elementen mage.append(ma) mige.append(mi) runde.append(m) liste1=neuliste1 #überschreibe die listen der Elterngeneration liste2=neuliste2 #mit den Listen der Nachkommen m=m+1 plt.plot(runde,duge) plt.plot(runde,mage) plt.plot(runde,mige) #print(liste1) #print(liste2) print("letzter Maximalwert:",ma,"letzter Durchschnittswert:",du/(2*N),"letzter Minimalwert:",mi) plt.show