Dies ist eine alte Version des Dokuments!
Zehnter Gruppentermin
Anwesende: Hanna, Richard, und Gast
Was wir geschafft haben: - man kann das Programm anhalten und dann wieder fortführen - man kann Zellzustände per Mausklick/Mausbewegung verändern - der zeitkritischste Schritt ist nun um 4 Größenordnungen schneller, durch boolsche abfragen
Umgeschmissene Hürden entlang des heutigen Marathons: - Einlesen in Events (in Matplotlib) z.B. mit Leertaste stoppen - Einsamkeit ohne Mazal und Leroy und die einhergehende Teaminstabilität - allen Fortschritt der heutigen Session zu handlen, das übermotivierte Team zu koordinieren und jeden an allem Fortschritt teilhaben lassen
Ziele/Ideen fürs nächste Mal: - Nebenplots mit statistiken zu Alter/Anzahl der Zellen o.Ä. - Code ein wenig durchkämmen (mancherorts wurde heute schlampig gecodet)
Aktuelle GOL Datei: <code> # -*- coding: utf-8 -*- „“„ Created on Thu Jan 30 15:06:55 2020
@author: HP “„“
import random import numpy as np import matplotlib.pyplot as plt from PIL import Image from math import floor, ceil import time
# Größe der Matrix # Die Matrix wird zufällig mit Nullen und Einsen gefüllt
def Tripleeinheitsmatrix(zeilen,spalten):
tem = np.zeros ((zeilen,spalten)) for i in range(0, zeilen): for j in range(0, spalten): if i==j: tem[(i,j)] = 1 else: tem[(i,j)] = 0 for i in range(0, zeilen): for j in range(0, spalten): if i==(j+1): tem[(i,j)] = 1 for i in range(0, zeilen): for j in range(0, spalten): if j==(i+1): tem[(i,j)] = 1 tem[0,tem.shape[1]-1] = 1 tem[tem.shape[1]-1,0] = 1 return tem
def BerechneAnzahlNachbarn(zustand):
z = np.dot(tem, zustand) k = np.dot(z, tem) anzahlNachbarn = k - zustand return anzahlNachbarn
def BerechneNeuenZustand(zustand, anzahlNachbarn):
#Ursprungszelle Tod + genau 3 lebende Nachbarn = lebend #Ursprungszelle Lebend + genau 1 lebenden Nachbarn = tot #Ursprungszelle Lebend + 2 o. 3 Nachbarn = lebend #Ursprungszelle lebend + 4 oder mehr Nachbarn = tot #for i in range(0, zeilen): # for j in range(0, spalten): # if zustand[(i,j)] == 1 and (anzahlNachbarn[(i,j)] in range(2) or anzahlNachbarn[(i,j)] in range(4,9)): # zustand[(i,j)]=0 # elif zustand[(i,j)] == 0 and anzahlNachbarn[(i,j)]==3: # zustand[(i,j)]=1
zustand = (anzahlNachbarn == 3) + ((anzahlNachbarn == 2) * zustand)
return zustand
def Schritt():
global zustand, cmap
start_time = time.time() anzahlNachbarn = BerechneAnzahlNachbarn(zustand) print('Berechne Nachbarn:', time.time() - start_time) start_time = time.time() zustand = BerechneNeuenZustand(zustand, anzahlNachbarn) print('Berechne neuen Zustand:', time.time() - start_time) cmap = cmap * zustand + zustand
return zustand
def Wiederhole(t):
for i in range(t): Schritt()
def MachQuadrat(pixel):
breite = pixel.shape[0] hoehe = pixel.shape[1] size = max(breite, hoehe)
links = floor((size - breite) / 2) rechts = ceil((size - breite) / 2) oben = floor((size - hoehe) / 2) unten = ceil((size - hoehe) / 2)
pad_width = ((links, rechts), (oben, unten)) pixel = np.pad(pixel, pad_width, mode='constant', constant_values=0) return pixel
#t= int(input('Gib die Zeitschritte ein: ')) def Initialisiere():
global zustand, tem, zeilen, spalten, cmap
modus = int(input('Gib den Modus 1, 2, 3 oder 4 ein: '))
if modus==1 or modus==2: spalten = zeilen = int(input('Gib die Anzahl der Zeilen/Spalten ein: '))
#zustand = np.zeros if modus==1: zustand = np.round(np.random.random((zeilen,spalten))).astype(int) elif modus==2: zustand=np.zeros((zeilen,spalten)) for i in range(0,zeilen): for j in range (0,spalten): if j%2==0: zustand[(i,j)]=0 else: zustand[(i,j)]=1 if zustand[(int(zeilen/2),int(spalten/2))]==0: zustand[(int(zeilen/2),int(spalten/2))]=1 zustand[(int((zeilen/2)+1),int(spalten/2))]=1 else: zustand[(int(zeilen/2),int(spalten/2))]=0 zustand[(int((zeilen/2)+1),int(spalten/2))]=0 elif modus==3: DateiName = input('was willste oeffnen? ') Datei = open(DateiName) DateiAlsListe = [] for line in Datei: DateiAlsListe.append([int(c) for c in list(line.rstrip())]) DateiAlsMatrix = np.array(DateiAlsListe) zustand = MachQuadrat(DateiAlsMatrix) zeilen = spalten = zustand.shape[0] elif modus==4: dateiname = input('Gib den Bildpfad ein: ') bild = Image.open(dateiname) bild = bild.convert('1') bild.thumbnail((500,500))
pixel = np.array(bild)
zustand = MachQuadrat(pixel) zeilen = spalten = zustand.shape[0]
tem = Tripleeinheitsmatrix(zeilen, spalten) cmap = zustand
#Wiederholungen(t)
<\code>