Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1314:cellulaere_automaten

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1314:cellulaere_automaten [2014/01/23 19:39]
jasper.felix
ws1314:cellulaere_automaten [2016/05/10 14:46] (aktuell)
Zeile 22: Zeile 22:
  
 1.0 Gruppenmitglieder 1.0 Gruppenmitglieder
-__Nico__ unnötig, aber Platin 1+__Nico__ unnötig, aber Diamant 5
 __Josh__ treibende Kraft __Josh__ treibende Kraft
 __Bruno__ zeitlich begrenzte Mitgliedschaft __Bruno__ zeitlich begrenzte Mitgliedschaft
Zeile 68: Zeile 68:
 2 Forschungsarbeit 2 Forschungsarbeit
  
-2.2 A new kind of thinking+2.2 A new kind of science
  
 +Echtzeit Forschungsfortschritt:​
 +06.02.2014:
 +Animation des eindimensioalen Zellulären Autmaten
 +Diskussion über Entropie, dissipative Systeme und Alterung
 +Entdeckung einer zocker Bar, Berlusov skzxabotzinski
 +
 +Zielvorstellungen:​ die richtige Regel, ​
 +
 +der untenstehende Code ist der Grundbaustein zur Forschungsreihe an unserem "​finalen"​ Automaten.
 +Wir haben uns, inspiriert vom Artikel "​Emergence of Macro Spatial Structures in Dissipative Cellular Automata"​ von Andrea Rolli und Franco Zambonelli, dazu entschieden uns mit sogenannten "​Dissipativen Zellulären Automaten"​ zu beschäftigen.
 +Diese bieten sich an, da
 +(1) wir uns im Vorfeld, durch Implementierung von "Game of Life" technisch gut auf diese Klasse von Zweidimensionalen CA's vorbereitet haben und (2) wir durch die diskussion der Berlusov-Zhabotinski-Reaktion und anderer "​dissipativer Strukturen"​ auch theoretische Grundlagen haben.
 +
 +Wir möchten speziell vollkommen diskrete DCA's erforschen, da für uns einer der faszinierensten Aspekte von CA's es ist aus der vermeintlichen einfachheit von 1 und 0 nahezu unbegränzte Komplexität emergieren zu lassen.
 +
 +Wie wir bisher die Struktur diskreter DCA's verstanden haben und implementieren wollen, ist die folgende:
 +
 +eine 2-dimensionale Welt wird durch zufälliges Anordnen von '​lebenden'​ und '​toten'​ diskreten Zellen erzeugt.
 +
 +Nun gibt es ein '​innere'​ Verhaltensweise (UpdateRegel) der Zellen, die asynchron pro diskretem Zeitschritt,​ eine einzelne Zelle updated. Diese Regel wird, ungestört, zu einem equilibralen Zustand der Welt führen.
 +
 +Weiterhin gibt es einen zweiten '​äußeren'​ Einfluss (UpdateRegel) der '​Umwelt',​ der durch paralleles, ebenfalls asynchrones updaten einzelner Zellen, die '​innere'​ Regel stört und so das System vom Equilibrium '​fernhält'​.
 +
 +Wir interessieren uns insbesondere für das Verhältniss der beiden parallelen updatefunktionen und deren Einfluss auf die räumliche Anordnung der Zellen des Systems.
 +
 +    ​
 +<code python>
 +import numpy as np
 +import matplotlib.pyplot as plt
 + 
 +x = 50
 +y = 50
 + 
 +def setup(x,y):
 +    Z = np.random.randint(2,​ size = (x,y))
 +    return Z
 + 
 + 
 +def deamon(x,​y):​
 +    return (np.random.randint(x),​np.random.randint(y))
 + 
 +def updateB(Z):
 +    i,j = deamon(x,y)
 +    k = (Z[(i-1)%x,​(j-1)%y]+Z[(i-1)%x,​j]+Z[(i-1)%x,​(j+1)%y]\
 +        +Z[i,​(j-1)%y]+Z[i,​(j+1)%y]+Z[(i+1)%x,​(j-1)%y]+\
 +        Z[(i+1)%x,​j]+Z[(i+1)%x,​(j+1)%y])+Z[(i+2)%x,​j]+\
 +        +Z[(i-2)%x,​j]+Z[i,​(j+2)%y]+Z[i,​(j-2)%y]
 +    if Z[i,j] == 1:
 +        if (k < 3 or k > 6):
 +            Z[i,j] = 0
 +    else:
 +        if k == 6:
 +            Z[i,j] = 1
 +    return Z
 +
 +def updateA(Z):
 +    i,j = deamon(x,y)
 +    k = (Z[(i-1)%x,​(j-1)%y]+Z[(i-1)%x,​j]+Z[(i-1)%x,​(j+1)%y]+Z[i,​(j-1)%y]+Z[i,​(j+1)%y]+Z[(i+1)%x,​(j-1)%y]+Z[(i+1)%x,​j]+Z[(i+1)%x,​(j+1)%y])
 +    if Z[i,j] == 1:
 +        if (k > 3) or (k < 2):
 +            Z[i,j] = 0
 +    else:
 +        if k == 3:
 +            Z[i,j] = 1
 +    return Z
 +
 +A = setup(x,y)
 +
 +plt.ion()
 +
 +im=plt.imshow(A,​interpolation='​nearest',​ cmap = plt.cm.gray_r)
 +plt.xticks([]),​plt.yticks([])
 +
 +for s in range(10000000):​
 + A = updateB(A)
 + if s%100 == 0:
 + im.set_data(A)
 + plt.draw()
 +
 +plt.ioff()
 +plt.show()
 +
 +
 +#für josh!:
 +#codezeilen die du wolltest
 +#viel spaß
 +import numpy as np
 +import matplotlib.pyplot as plt
 + 
 +x = 100
 +y = 100
 + 
 +def setup(x,y):
 +    #'''​Erstellung der Welt mit Zuflliger An/Aus Verteilung ​ '''​
 + Z = np.random.randint(2,​ size = (x,y))
 + return Z
 + 
 + 
 +def deamon(x,​y):​
 + #'''​Whlt zufllige Zelle fr asynchrones Update aus '''​
 + return (np.random.randint(x),​np.random.randint(y))
 + 
 +def intrinsic(Z,​ rule, mode):
 + i,j = deamon(x,y)
 + if mode == '​2-radial':​
 + k = (Z[(i-1)%x,​(j-1)%y]+Z[(i-1)%x,​j]+Z[(i-1)%x,​(j+1)%y]\
 + +Z[i,​(j-1)%y]+Z[i,​(j+1)%y]+Z[(i+1)%x,​(j-1)%y]+\
 + Z[(i+1)%x,​j]+Z[(i+1)%x,​(j+1)%y])+Z[(i+2)%x,​j]+\
 + +Z[(i-2)%x,​j]+Z[i,​(j+2)%y]+Z[i,​(j-2)%y]
 + if mode == '​Moore':​
 + k =(Z[(i-1)%x,​(j-1)%y]+Z[(i-1)%x,​j]+Z[(i-1)%x,​(j+1)%y]\
 + +Z[i,​(j-1)%y]+Z[i,​(j+1)%y]+Z[(i+1)%x,​(j-1)%y]+\
 + Z[(i+1)%x,​j]+Z[(i+1)%x,​(j+1)%y])
 + if rule=='​Diagonal':​
 + if Z[i,j] == 1:
 + if (k < 3 or k > 6):
 + Z[i,j] = 0
 + else:
 + if k == 6:
 + Z[i,j] = 1
 + if rule=='​Life':​
 + if Z[i,j] == 1:
 + if (k > 3) or (k < 2):
 + Z[i,j] = 0
 + else:
 + if k == 3:
 + Z[i,j] = 1
 + if rule == '​Striche':​
 + if Z[i,j] ==1:
 + if k > 2:
 + Z[i,j] = 0
 + else:
 + if k == 2:
 + Z[i,j] = 1
 + return Z
 +
 +
 +def environment(Z):​
 + i,j = deamon(x,y)
 + Z[i,j] = 1
 + return Z
 +
 +
 +A = setup(x,y)
 +stoer = (True, 21)
 +plt.ion()
 +
 +im=plt.imshow(A,​interpolation='​nearest',​ cmap = plt.cm.gray_r)
 +plt.xticks([]),​plt.yticks([])
 +
 +for s in range(10000000):​
 + A = intrinsic(A,​ '​Diagonal',​ '​2-radial'​)
 + if stoer[0] == True:
 + if s%stoer[1] == 0:
 + A = environment(A)
 + if s%100 == 0:
 + im.set_data(A)
 + plt.draw()
 +
 +plt.ioff()
 +plt.show()
 +
 +
 +</​code>​
ws1314/cellulaere_automaten.1390502379.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)