Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ss19:mutationen_kreaturen_eineeigenschaft_zweieltern_leander
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=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)
    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
ss19/mutationen_kreaturen_eineeigenschaft_zweieltern_leander.txt · Zuletzt geändert: 2019/06/05 14:01 von leanderh