Was wir heute gemacht haben:
- Nagel-Shreckenberg-Modell graphisch mit Matplotlib dargestellt
- Einteilung in zwei Gruppen für unser Endprojekt 'Game of Life':
1. Gruppe Aufgaben (Leroy und Hanna): - Erstellung des Grundcodes
2. Gruppe Aufgaben (Richard und Mazal): - Graphischen Umsetzung mit FuncAnimations in Form eines Films
Der folgene Code ist der Code für unser das Nagel-Schreckenberg-Modell, an welchem wir die letzten Wochen gearbeitet haben:
#aufg16 import numpy as np import random import matplotlib.pyplot as plt p=0.25 t=20 #fahrtrichtung rechts #naechstes mal zeitliche implementierung def kreisverkehr(): a=np.array([0,0,0,0,3,0,0,0,2,4,0,0,1,2,0,0,0,0,5]) return a def update (a,p,t): #erster zwischenschritt: for i in range(len(a)): if a[i]>0 and a[i]<5: b[i]=np.copy(a[i])+1 #zweiter zwischenschritt: #plan für jede stelle #zahl mit differenz vergleichen #falls differenz kleiner als zahl #zahl=differenz for i in range(len(a)): if b[i]>=1 and b[(i+1)%len(a)]==0: #differenzmessen d=1 while b[(i+d)%len(a)]==0: d=d+1 if b[i]>=d: c[i]=d-1 else: c[i]=np.copy(b[i]) elif b[i]>=1 and b[(i+1)%len(a)]!=0: c[i]=1 #dritter zwischenschritt: for i in range(len(a)): if c[i]<=1: g[i]=np.copy(c[i]) else: if random.random() < p: g[i]=np.copy(c[i])-1 else: g[i]=np.copy(c[i]) #vierter zwischenschritt: e=np.zeros(len(a)) for i in range(len(a)): if g[i]>0: #e[i]=0 e[(i+int(g[i]))%len(a)]=g[i] return e a=kreisverkehr() e=np.copy(a) b=np.copy(a) c=np.copy(a) g=np.copy(a) print(a) M=np.array([a,a]) #M = np.array([ [3.4, 8.7, 9.9], # [1.1, -7.8, -0.7], # [4.1, 12.3, 4.8]]) for k in range(t): a=np.copy(e) b=np.copy(e) c=np.copy(e) g=np.copy(e) e=update(a,p,t) #print(a,'a') #print(b,'b') #print(c,'c') #print(g,'g') M=np.append(M,e,axis=1) print(e,'e') print(M)
import numpy as np import random import matplotlib.pyplot as plt p=0.25 t=20 #fahrtrichtung rechts #naechstes mal zeitliche implementierung def kreisverkehr(): a=np.array([0,0,0,0,3,0,0,0,2,4,0,0,1,2,0,0,0,0,5]) return a def update (a,p,t): #erster zwischenschritt: for i in range(len(a)): if a[i]>0 and a[i]<5: b[i]=np.copy(a[i])+1 #zweiter zwischenschritt: #plan für jede stelle #zahl mit differenz vergleichen #falls differenz kleiner als zahl #zahl=differenz for i in range(len(a)): if b[i]>=1 and b[(i+1)%len(a)]==0: #differenzmessen d=1 while b[(i+d)%len(a)]==0: d=d+1 if b[i]>=d: c[i]=d-1 else: c[i]=np.copy(b[i]) elif b[i]>=1 and b[(i+1)%len(a)]!=0: c[i]=1 #dritter zwischenschritt: for i in range(len(a)): if c[i]<=1: g[i]=np.copy(c[i]) else: if random.random() < p: g[i]=np.copy(c[i])-1 else: g[i]=np.copy(c[i]) #vierter zwischenschritt: e=np.zeros(len(a)) for i in range(len(a)): if g[i]>0: #e[i]=0 e[(i+int(g[i]))%len(a)]=g[i] return e a=kreisverkehr() e=np.copy(a) b=np.copy(a) c=np.copy(a) g=np.copy(a) print(a) #M=np.array([a,a]) #M = np.array([ [3.4, 8.7, 9.9], # [1.1, -7.8, -0.7], # [4.1, 12.3, 4.8]]) M = np.zeros((t,len(a))) M[0]=a for k in range(1,t): a=np.copy(e) b=np.copy(e) c=np.copy(e) g=np.copy(e) e=update(a,p,t) M[k]=e #print(a,'a') #print(b,'b') #print(c,'c') #print(g,'g') #M=np.append(M,e,axis=1) print(M) plt.imshow(M) plt.legend() #print(M)
Projekt 'Game of Life':
1. Gruppe:
Wir haben angefangen mit dem Game of Life. Um die Regeln vom Game of Life umzusetzen, brauchen wir die Matrizenmultiplikation. Der Code generiert eine random-Matrix(quadratisch) mit vorheriger angegebener Zeilen-/Spaltenanzahl. Die zweite Matrix ist eine Tripleeinheitsmatrix mit der selben Zeilen-/Spaltenanzahl wie die erste Matrix. Im dritten Schritt sollen die Matrizen multipliziert werden. Dieser Schritt funktioniert noch nicht.
Ziel für die nächste Woche: Matrizenmultiplikation soll funktionieren. Weiter an den Regel vom Game of Life arbeiten.
import random import numpy as np # Größe der Matrix #zeilen = int(input('Gib eine Zahl ein: ')) #spalten = zeilen zeilen = 10 spalten = zeilen # Die Matrix wird zufällig mit Nullen und Einsen gefüllt M = np.zeros ((zeilen,spalten)) def Matrix_füllen(): for i in range(0, zeilen): for j in range(0, spalten): if random.random() < 0.5: M[(i,j)]= 1 else: M[(i,j)]= 0 return M Matrix_füllen() print (M) D = np.zeros ((zeilen,spalten)) def Tripleeinheitsmatrix(): for i in range(0, zeilen): for j in range(0, spalten): if i==j: D[(i,j)] = 1 else: D[(i,j)] = 0 for i in range(0, zeilen): for j in range(0, spalten): if i==(j+1): D[(i,j)] = 1 for i in range(0, zeilen): for j in range(0, spalten): if j==(i+1): D[(i,j)] = 1 D[0,D.shape[1]-1] = 1 D[D.shape[1]-1,0] = 1 return D Tripleeinheitsmatrix() print(D) wandelmatrix = np.zeros ((zeilen,spalten)) def Matrizenmultiplikation(): z = np.linalg.solve(D,M) wandelmatrix = np.linalg.solve(z,D) return wandelmatrix Matrizenmultiplikation() print (wandelmatrix)
2. Gruppe: Einarbeitung in animation. Work in progress…