Projekt Systementwicklung Periodische Randbedingungen: Das Leben auf dem Torus Prof. Dr. Nikolaus Wulff
Prüfungsanmeldung Die Modulprüfung Projekt Systementwicklung findet am 26. und 25. Juni statt. Es ist zwingend erforderlich sich für diese Prüfung genauso wie bei einer Klausur, im LSF anzumelden. Die Anmeldung ist jetzt freigeschaltet und die Anmeldefrist endet am 30. Mai. Wer sich bis dahin nicht im LSF angemeldet hat kann die Prüfung PSE nicht ablegen, auch wenn er am Projekt teilgenommen hat! Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 2
Unendlich große Spielfläche Beim klassischen Game of Life sterben die Zellen beim Verlassen der Spielfläche. Sie fallen scheinbar vom Rand der Welt. Durch die Angabe von Breite (w) und Höhe (h) lässt sich die Spielfläche beliebig vergrößern, das prinzipielle Problem der endlichen Fläche wird dadurch jedoch nicht gelöst. Eine Möglichkeit eine unendlich große Welt, auf einer endlichen Spielfläche, zu erzeugen entsteht durch Identifikation gegenüberliegender Seiten. Eine Zelle, die rechts aus dem Bild läuft taucht links wieder auf, entsprechend Oben und Unten. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 3
Periodische Randbedingungen Abbildung der unendlichen Ebene auf den Fundamentalbereich w*h w 3 1 2 h 2 Durch die periodische Fortsetzung der endlichen Spielfläche entsteht ein Gitter (engl. Lattice) mit dem unendlich periodisch fortgesetzten hellblauen Elementarbereich der Fläche w*h. Das Beispiel zeigt die Bahn eines Gleiters. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 4 3
Vom Gitter zum Torus Die Identifikation gegenüberliegender Seiten erzeugt die Topologie eines Torus. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 5
Periodische Bahnen Durch diese Randbedingungen und der endlichen Anzahl n=w*h an Gitterplätzen wird die Bahn des Gleiters automatisch periodisch! Es sei ( x, y ) die Startposition des Gleiters G, so gibt es eine Periode p mit der Eigenschaft: G 1 (x, y)=g p (x+n w, y+m h) (n,m) Z 2 d.h. nach p Generationen ist der Gleiter wieder an derselben Position (x,y) modulo der Gitterkonstanten a (w,h) N. 2 Sind w,h teilerfremde Primzahlen größer 4, so ist p=4*w*h die kleinste Periode für einen Gleiter. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 6
Bahn des Gleiters Parameter: -w=27 -h=15 27=3 3 15=3*5 p=4*15*9=540 Bahn des Gleiters auf dem Torus. Er verlässt rechts den Rand und taucht links wieder auf. Die Bahn ist als periodisch erkannt worden. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 7
Periodische Gitter sind überall Zusammenhänge der Form f(x)=f(x+n*a) mit einer Gitterkonstanten a kommen in zahlreichen Anwendungsgebieten vor: Festkörperphysik Kristalgitter Quantentheorie Eigenwerte und -funktionen Kosmologie gekrümmte Universen FFT fast Fourier Transformation Kryptographie Insbesondere der letzte Fall tritt zunehmend verstärkt in der Informatik auf... Modulo Rechnung und diskrete Gruppen Z/ p Z sind ein aktives Forschungsgebiet der Informatik! Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 8
Modulo Rechnung Die Berechnung einer Gitterposition (x,y) modulo (w,h) nimmt daher eine zentrale Stellung ein. Am einfachsten ist es in C die Feldberechnung in eine Funktion oder ein Makro von Anfang an auszulagern. Modifikation nur einer Stelle! Statt f[x][y] wird z.b. cell(f,x,y) codiert und die cell Funktion, bzw. das cell Makro, kapselt den eigentlichen Modulo-Algorithmus. So lässt sich auch die Torus Topologie einfach per Kommandozeile an- und ausschalten. Die einfache, naive Verwendung des C Modulo Operators n%m reicht allerdings nicht aus. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 9
Erweiteter C Modulo Operator Um die Modulo Rechnung auf den Elementarbereich abzubilden, muss dafür gesorgt werden, dass alle Indizes positiv werden: int modulo(int z, int a) { int w = z % a; if (w < 0) w += a; return w; } Der Torus lässt sich per Flag an- und ausschalten #define col(x) ((!torus)? (x) : modulo(x,breite)) #define row(y) ((!torus)? (y) : modulo(y,hoehe)) #define cell(f,x,y) f[col(x)+breite*row(y)] In diesem Beispiel wird die Position innerhalb des Feldes f selber direkt berechnet und eine Torusgeometrie gegebenenfalls berücksichtigt. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 10
Anwendung Die Berechnung der nächsten Nachbarn einer Zelle zur Position (x,y) ist nun ein Kinderspiel: int neighbours_on_torus(int *feld, int x, int y) { int j, k, n = -cell(feld,x,y); } for (j = x - 1; j <= x + 1; j++) for (k = y - 1; k <= y + 1; k++) n += cell(feld,j,k); return (n); Der gesamte 3x3 Feldbereich wird abgefragt. Eine Sonderbehandlung der Position (x,y) ist nicht erforderlich, da deren Inhalt vorab abgezogen wurde. Eine Doppelzählung erfolgt nicht. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 11
Zusammenfassung Durch einfache Erweiterung des Game of Life um periodische Randbedingungen lassen sich interessante Variationen des Spiel erreichen. Alle möglichen Gleiter und Spaceship Konfigurationen führen nun zu Zyklen. Mit einfachen Mitteln lässt sich diese Topologie effektiv in C codieren und parametrisieren. Das Game of Life erhält dadurch eine interessante und lehrreiche Zusatzkomplexität. Prof. Dr. Nikolaus Wulff Projekt Systementwicklung 12