Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss19:mutationen_kreaturen_eineeigenschaft_leander [2019/05/28 13:56] leanderh |
ss19:mutationen_kreaturen_eineeigenschaft_leander [2019/06/05 14:00] (aktuell) leanderh |
||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
def geschw(m,w): | def geschw(m,w): | ||
- | a=random.choice(range(0,10)) | + | a=random.choice(range(0,10)) #a bestimmt, ob der Nachkomme von m und w mutiert(Wahrscheinlichkeit von 1/10) |
if a==0: | if a==0: | ||
- | b=random.choice(range(-9,10)) | + | b=random.choice(range(-9,10)) #b bestimmt, um wie viel er mutiert |
- | x=(m+w)/2+0.01*b*((m+w)/2) | + | 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: | else: | ||
x=(m+w)/2 | x=(m+w)/2 | ||
- | return x | + | return x #x wird als Wert der Eigenschaft für den Nachkommen zurückgegeben. |
- | v=1 | + | def werte(el1,el2): |
- | N=200 | + | global ma #der größte Wert innerhalb einer Generation |
- | n=0 | + | global mi #der kleinste Wert innerhalb einer Generation |
- | m=0 | + | global du #der addierte Wert aller Wesen einer Generation |
- | M=1000 | + | if el1<el2: #wenn el2 größer ist |
- | liste1=[] | + | if el2>ma: #prüfe, ob es auch größer als das bisherige größte Element dieser Generation ist, |
- | liste2=[] | + | ma=el2 #ist dies der Fall, setze el2 als neues ma ein |
- | mage=[] | + | if el1<mi: #prüfe außerdem, ob el1 kleiner als das bisherige kleinste Element dieser Generation ist, |
- | mige=[] | + | mi=el1 #ist dies der Fall, setze el1 als neues mi ein |
- | duge=[] | + | else: #ist el1 größer als el2, prüfe das ganze andersrum |
- | runde=[] | + | if el1>ma: |
- | while n<N: | + | 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=500 #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) | liste1.append(v) | ||
liste2.append(v) | liste2.append(v) | ||
n=n+1 | n=n+1 | ||
+ | | ||
+ | |||
while m<M: | while m<M: | ||
- | x=0 | + | x=0 #Zähler für das paaren aller Kreaturen beider Geschlechter |
- | neuliste1=[] | + | neuliste1=[] #Neue Liste der Wesen des Geschlechts 1 |
- | neuliste2=[] | + | 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: | while x<N: | ||
- | l1=liste1[x] | + | l1=liste1[x] #l1 ist das x-te Element aus liste1 |
- | l2=liste2[x] | + | l2=liste2[x] #l2 ist das x-te Element aus liste2 |
- | neuliste1.append(geschw(l1,l2)) | + | neuliste1.append(geschw(l1,l2)) #geschw paart zwei Kreaturen beider Geschlechter miteinander und lässt sie |
- | neuliste2.append(geschw(l1,l2)) | + | neuliste2.append(geschw(l1,l2)) #einen Nachkommen zeugen, welcher zu einer der Listen hinzugefügt wird. |
x=x+1 | x=x+1 | ||
- | ma=1 | + | |
- | mi=1 | + | ma=v #Das größte v eines Wesens einer Generation |
- | du=0 | + | mi=v #Das kleinste v eines Wesens einer Generation |
- | n=0 | + | 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: | while n<N: | ||
- | el1=neuliste1[n] | + | el1=neuliste1[n] #betrachte je das n-te Element von neulist1 |
- | el2=neuliste2[n] | + | el2=neuliste2[n] #und neulist2 |
- | if el1<el2: | + | werte(el1,el2) #füre mit diesen werte aus |
- | if el2>ma: | + | |
- | ma=el2 | + | |
- | if el1<mi: | + | |
- | mi=el1 | + | |
- | else: | + | |
- | if el1>ma: | + | |
- | ma=el1 | + | |
- | if el2<mi: | + | |
- | mi=el2 | + | |
- | du=du+el1+el2 | + | |
n=n+1 | n=n+1 | ||
- | duge.append(du/(2*N)) | + | |
+ | duge.append(du/(2*N)) #fülle die Listen mit den entsprechenden Elementen | ||
mage.append(ma) | mage.append(ma) | ||
mige.append(mi) | mige.append(mi) | ||
runde.append(m) | runde.append(m) | ||
- | liste1=neuliste1 | + | liste1=neuliste1 #überschreibe die listen der Elterngeneration |
- | liste2=neuliste2 | + | liste2=neuliste2 #mit den Listen der Nachkommen |
m=m+1 | m=m+1 | ||
+ | | ||
+ | | ||
plt.plot(runde,duge) | plt.plot(runde,duge) | ||
plt.plot(runde,mage) | plt.plot(runde,mage) | ||
plt.plot(runde,mige) | plt.plot(runde,mige) | ||
- | print(liste1) | + | #print(liste1) |
- | print(liste2) | + | #print(liste2) |
- | print(ma,du/(2*N),mi) | + | print("letzter Maximalwert:",ma,"letzter Durchschnittswert:",du/(2*N),"letzter Minimalwert:",mi) |
plt.show | plt.show | ||
</code> | </code> | ||