WATOR - Eine ”kologische Simulation PD-Programm fr den ATARI ST EINLEITUNG Die ”kologische Simulation WATOR ist (wie brigens auch der "Krieg der Kerne") dem Computer-Kolumnisten des Scientific American, A. K. Dewdney, zu verdanken. Dewdneys eigene, sehr farbige Beschreibung des Algorithmus [1, 2] kann hier nicht wiedergegeben werden. Deshalb nur eine knappe Zusammenfassung: Beutetiere ("Fische" genannt) werden von R„ubern, ("Haien") in einem "Ozean" gejagt, der durch ein zweidimensionales Array repr„sentiert wird. Der Ozean l„uft in x- wie in y-Richtung in sich selbst zurck (zyklische Randbedingungen). Topologisch entspricht dies der Oberfl„che eines Torus, daher der Name "Wa- Tor"! Pro Zeiteinheit bewegt sich jeder Fisch, wenn m”glich, um eine Position in zuf„lliger Richtung weiter. Entspricht sein Alter der artspezifischen Generationsdauer, so vermehrt er sich ungeschlechtlich: ein Nachkomme bleibt auf der alten Position zurck, ein zweiter besetzt eine benachbarte. Beide Nachkommen haben das Alter 0. Es handelt sich also eigentlich eher um eine Art von Zellteilung: Statt an Fische und Haie k”nnte man auch an Bakterien und Am”ben denken. Jeder Hai frižt pro Zeiteinheit einen Fisch auf einer der Nachbarpositionen. Nur wenn keiner vorhanden ist, bewegt er sich auf eine leere Position. Hat er eine gewisse Zeit lang keinen Fisch gefressen, verhungert er. Die Fortpflanzung erfolgt wie bei den Fischen. Mit diesen einfachen Spielregeln l„žt sich eine R„uber-Beute- Beziehung schon recht realistisch simulieren. Eine wichtige Rolle spielt die Geometrie: Aus einer anf„nglichen Zufallsverteilung entstehen grože Fischschw„rme, die von den R„ndern her von Haien aufgefressen werden. Besonders deutlich wird das, wenn man die Haie schnell verhungern l„žt, z. B. nach 5 Zeiteinheiten. Oft beobachtet man Populationszyklen, bei denen die Anzahl der Fische und Haie zeitversetzt stark schwankt. Solche Schwankungen sind von natrlichen Systemen her bekannt. Sie werden auch von deterministischen Modellen wie dem Gleichungssystem von Lotka und Volterra vorausgesagt (nachzulesen z. B. in [3]). Tr„gt man in der Art eines Phasendiagramms die Anzahl der Haie gegen die der Fische auf, dann erh„lt man nahezu geschlossene Kurven, die um ein "Auge" herumlaufen. W„hrend beim Lotka- Volterra-Modell die einmal eingeschlagene Kurve stets exakt beibehalten wird, ergibt die stochastische Simulation ein mehr oder weniger wirres Kn„uel von Kurven. Trotzdem verh„lt sich das System fr viele Parameterkombinationen langfristig recht stabil. Die obige Regel fhrt schon nach wenigen Zyklen zu einer synchronen Vermehrung der Haie, weil nur ein Klon berlebt. Das Ergebnis sind st”rende Zacken in Populationskurve und Phasendiagramm. Dieser Effekt wird im Programm durch Variieren der Generationszeit unterdrckt: abweichend von Dewdney wird das Alter neugeborener Fische und Haie nicht exakt auf 0, sondern auf 0 +/- 1 gesetzt. Dem bekannten Game of Life „hnelt WATOR brigens nur oberfl„chlich: es handelt sich nicht eigentlich um einen zellul„ren Automaten (die Fische und Haie behalten bei ihrer Bewegung von Position zu Position ihre "Individualit„t"), und die Simulation ist nicht deterministisch! Schliežlich stellt WATOR den Versuch dar, reale biologische Abl„ufe zu simulieren, w„hrend das Game of Life eigentlich nur dem Namen nach etwas mit Biologie zu tun hat. MENš: FENSTER WATOR benutzt drei Fenster, die ber die Meneeintr„ge ge”ffnet werden oder -falls sie schon offen sind- aktiviert werden k”nnen. Ozean In diesem Fenster wird der "Ozean" (das Spielfeld) ausgegeben. Das Fenster ist beim Programmstart bereits offen. Fische werden durch (.), Haie durch (o) dargestellt. Protokoll Im "Protokoll"-Fenster wird st„ndig die Zahl der Fische, die Zahl der Haie und die Laufzeit der Simulation ausgegeben. Parallel dazu kann die Populationsentwicklung als Kurve (in der Art eines Printplots) dargestellt werden. Die verwendeten Zeichen sind hierbei (o) fr die Fische, (x) fr die Haie, der x-Wert repr„sentiert die jeweilige Populationsgr”že relativ zur maximal m”glichen (= Gr”že des Ozeans). Bei hoher und mittlerer Aufl”sung betr„gt die Kurvenbreite (0 - 100 %) 51 Zeichen, bei niedriger 11. Somit entspricht die Breite eines Zeichens 2 % bzw. 10 % des Maximalwerts. Phasendiagramm Hier wird jede Iteration durch einen Punkt wiedergegeben. Die x- Koordinate steht dabei fr die Zahl der Fische, die y-Koordinate fr die Zahl der Haie (wieder relativ zur Gr”že des Ozeans). Fische setzen / Haie setzen / Barrieren setzen / L”schen Das "Ozean"-Fenster kann jederzeit mit der Maus editiert werden. Der Mauszeiger verwandelt sich ber dem aktiven Fenster in ein Fadenkreuz. Durch Klicken mit der linken Maustaste lassen sich nun die obigen Operationen durchfhren. Der gerade gltige Eintrag ist durch ein H„kchen gekennzeichnet. Durch Setzen von undurchdringlichen Barrieren ("Kristall-Zeichen") l„žt sich die Geometrie des Ozeans in beliebiger Weise ver„ndern. Beim Neustart werden sie allerdings wieder gel”scht. Diese Barrieren, wie auch die Editierfunktionen insgesamt, sind eine Erweiterung der WATOR-Standardversion. MENš: PARAMETER Ozean... Einstellbar sind die anf„ngliche Zahl und die Generationsdauer (in Iterationen) der Fische und Haie, die Zeit, nach der ein Hai ohne Nahrung verhungert, und die Gr”že des Ozeans. Die zul„ssige Gr”že h„ngt von der Bildschirmaufl”sung ab: Aufl”sung x-Gr”že y-Gr”že hoch 79 45 mittel 79 21 niedrig 38 21 Verlassen der Dialogbox mit "NEUSTART" initialisiert die gesamte Simulation neu (s. u.). Protokoll... Hier kann angegeben werden, in welchen Zeitintervallen (d. h. nach wie vielen Iterationen) jeweils eine Protokollzeile geschrieben werden soll, und ob eine Populationskurve ausgegeben werden soll oder nicht. Phasendiagramm... Die Maximalwerte auf der x- und y-Achse, ausgedrckt in Prozent der gr”žtm”glichen Population, k”nnen eingestellt werden. Wahlweise kann eine durchgehende Kurve gezeichnet werden, oder es werden Marker (Kreuze) gesetzt. Neustart Gem„ž den gerade gltigen Startparametern wird die Simulation initialisiert und gestartet. Fische und Haie werden zuf„llig gesetzt. Falls dabei ein grožer Teil der m”glichen Positionen besetzt wird, kann die Initialisierung einige Sekunden dauern. Protokoll und Phasendiagramm werden gel”scht, auf eine eventuell offene Protokolldatei wird ein neuer Kopf ausgegeben. Start / Stop Ein- und Ausschalten der Simulation. MENš: DATEI ™ffnen... In die Protokoll-Datei werden die gleichen Daten ausgegeben wie in das "Protokoll"-Fenster (nur die Scroll-Richtung ist umgekehrt!). Fr die Datei kann ein beliebiger Pfadname angegeben werden. Existiert schon eine gleichnamige Datei, so erfolgt eine Abfrage, ob sie fortgesetzt werden soll oder nicht (wenn nicht, wird sie berschrieben). Dank GEMDOS kann die Protokollausgabe auf einen Drucker geleitet werden, indem man einfach als Pfadnamen "PRN:" angibt [4]. Schliežen Die Protokolldatei wird geschlossen. Bei einem Schreibfehler oder beim Programmende erfolgt dies automatisch. Kopf schreiben In die Protokolldatei werden einige Kopfzeilen mit den Startparametern der Simulation geschrieben. Geschieht automatisch beim Neustart. Programmende Selbsterkl„rend. IMPLEMENTATION Das Programm wurde in Megamax C V1.1 geschrieben. Der Quelltext ist auf der Diskette vorhanden. Žnderungen oder Erweiterungen sind durchaus erwnscht, sollten aber bitte in der About...-Dialogbox vermerkt werden. Um Žnderungen m”glichst zu erleichtern, wurde das Programm in mehrere Module aufgeteilt: die eigentliche Simulation (WATOR_S), die GEM-Oberfl„che (WATOR_G) und die Fenstersteuerung (WATOR_W). Das Simulations-Modul entspricht weitgehend den Vorgaben von A. K. Dewdney. Eine wesentliche Abweichung stellt nur die Randomisierung des Alters dar (s. Einleitung). Als Zufallsgenerator wurde die XBIOS-Funktion Random() benutzt. Diese Funktion ist zwar sehr zeitaufwendig, doch die schnellere rand()-Funktion der Standard- Bibliothek erwies sich leider als unzureichend. Zur GEM-Oberfl„che ist anzumerken, daž die Standardfunktionen sscanf(), sprintf(), fprintf() umgangen wurden, um den damit verbundenen Overhead von einigen KB einzusparen. Alle Funktionen der Fensterverwaltung sind im Modul WATOR_W zusammengefažt. WATOR_W ist weitgehend auf die Bedrfnisse des Programms zugeschnitten: z. B. werden nur solche Fehler abgefangen, die beim Aufruf durch WATOR_G tats„chlich auftreten k”nnen. Verwendet wird ein einfaches Slot-Konzept, das in groben Zgen dem von Geiž & Geiž [5] folgt. Das Programm muž in der Lage sein, auch in teilweise verdeckte Fenster Grafik auszugeben. Da ein Clipping die Simulation stark verlangsamen wrden, blieb nur eine radikale L”sung: Jedem Fenster wird ein Grafikpuffer in voller Bildschirmgr”že zugeordnet, alle Ausgaben erfolgen in den jeweiligen Puffer (ohne Clipping!), und beim Redraw werden nur noch die entsprechenden Bereiche vom Puffer auf den Bildschirm kopiert. Der "Ozean" wird mit v_gtext() ausgegeben, da die brigen Funktionen des VDI auch ohne Clipping zu langsam w„ren. Benutzt wird der 8 * 8-Textfont, was eine unterschiedliche Ozeangr”že bei verschiedenen Aufl”sungen erzwingt. Das gleiche gilt fr die Zeilenzahl des "Protokoll"-Fensters. Alle String-Konstanten stehen in der Resource-Datei, und zwar in einem eigenen Objektbaum, da weder MMRCP noch RCS freie Strings untersttzen. Damit WATOR auch in niedriger Aufl”sung l„uft, wurde das "Parameter"-Men mit dem RCS nach links verschoben. Viel Spaž mit WATOR wnscht Ihnen: Robert Geisler D-7400 Tbingen, 27.01.88 Hirschauer Str. 48 LITERATUR [1] A. K. Dewdney, Scientific American 12/1984, 14 deutsch: Spektrum der Wissenschaft 2/1985, 6 [2] A. K. Dewdney, Scientific American 4/1985, 14 deutsch: Spektrum der Wissenschaft 5/1985, 8 [3] B. Streit: ™kologie, Ein Kurzlehrbuch, S. 38 ff., Thieme (1980) [4] H. Kersten, ST-Computer 4/1987, 42 [5] J. Geiž, D. Geiž: Software-Entwicklung auf dem ATARI ST, S. 294 ff., Hthig (1986)