Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
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> |