En celleautomat er en model, der anvendes inden for datalogi og matematik. Ideen er at modellere et dynamisk system ved hjælp af et antal celler. Hver celle har en af flere mulige tilstande. Ved hver "tur" eller gentagelse bestemmes den aktuelle celles tilstand af to ting: dens aktuelle tilstand og de tilstødende cellers tilstand.

Et meget berømt eksempel på en cellulær automat er Conway's Game of Life. Stanislaw Ulam og John von Neumann beskrev først cellulære automater i 1940'erne. Conway's Game of Life blev vist første gang i 1970'erne.



 

Definition og grundkomponenter

En cellulær automat består typisk af følgende elementer:

  • Gitter: Et diskret rum opdelt i celler (f.eks. ett-dimensionelt linje, todimensionelt kvadratgitter eller højere dimensioner).
  • Tilstande: Et endeligt sæt mulige tilstande for hver celle (fx {0,1} for levende/død eller et større alfabet).
  • Nabolag: For hver celle defineres et sæt naboceller hvis tilstand påvirker overgangsreglen (fx von Neumann- eller Moore-nabolaget i 2D).
  • Transitionsregel: En deterministisk funktion, der ud fra en celles aktuelle tilstand og dens nabotilstande bestemmer cellens nye tilstand.
  • Tidsopdatering: Normalt sker opdatering synkront: alle celler får deres nye tilstand samtidig ud fra de gamle tilstande.

Typer af regler og nabolag

Regler kan være meget enkle eller komplekse. Nogle almindelige varianter:

  • Elementære (1D) automater: En-dimensionelle celler med to tilstande og et lille nabolag (stående eksempler: Wolframs Rule 30 og Rule 110).
  • Totalistiske regler: Reglen afhænger kun af antallet af celler i en bestemt tilstand i nabolaget (ikke af deres præcise arrangement).
  • Moore-nabolag (2D): De 8 omkringliggende celler i et kvadratgitter.
  • von Neumann-nabolag (2D): De 4 orthogonale naboer (op, ned, venstre, højre).

Conway's Game of Life — regler og eksempler

Conway's Game of Life er en to-dimensionel binær cellulær automat på et uendeligt kvadratgitter. Reglerne er simple og ofte skrevet som B3/S23, hvor:

  • B3 (Birth): En død celle bliver levende hvis den har præcis 3 levende naboer.
  • S23 (Survival): En levende celle forbliver levende hvis den har 2 eller 3 levende naboer; ellers dør den (overbefolkning eller isolation).

Fra disse trivielle regler opstår overraskende komplekse mønstre:

  • Still lifes: Konfigurationer, der ikke ændrer sig fra generation til generation (fx "block").
  • Oscillatorer: Mønstre, der gentager sig efter et antal generationer (fx "blinker").
  • Spaceships: Mønstre, der bevæger sig gennem gitteret (fx "glider").
  • Glider gun: En opstilling, der periodisk udsender glidere (Gosper's glider gun er et berømt eksempel).

Game of Life er også universel i den forstand, at man kan konstruere beregningsenheder (logiske porte, tællere, endda Turing-maskiner) ved hjælp af passende mønstre — et eksempel på emergent kompleksitet fra enkle regler.

Historie og nøglepersoner

  • Stanislaw Ulam og John von Neumann undersøgte tidlige idéer om diskrete dynamiske systemer og selvreplikerende automater i 1940'erne.
  • John Conway introducerede Game of Life omkring 1970; spillet fik bred opmærksomhed efter en omtale af Martin Gardner i Scientific American i 1970.
  • Stephen Wolfram gjorde i 1980'erne og 1990'erne stor forskning i en-dimensionelle cellulære automater og klassifikation af deres adfærd (f.eks. Rule 30, Rule 110).

Anvendelser

Cellulære automater anvendes både teoretisk og praktisk i mange felter:

  • Modelbygning inden for fysik (diffusion, perkolation), biologi (vækst, mønsterdannelse), og kemi.
  • Studier af kompleksitet, kaos og emergent adfærd i matematik og teoretisk datalogi.
  • Algorithmisk kunst, proceduralt indhold i spil og visuelle simuleringer.
  • Kryptografi og tilfældighedsgeneratorer i visse sammenhænge.
  • Undervisning i dynamiske systemer og simple regler med komplekse følger.

Implementering og praktiske tips

En simpel måde at simulere en cellulær automat på:

  • Representér gitteret som en matrix.
  • For hver generation, for hver celle: tæl levende naboer, anvend overordnede regler for at bestemme næste tilstand, og gem resultatet i en midlertidig matrix.
  • Når alle nye tilstande er beregnet, udskift den gamle matrix med den nye (synkron opdatering).

Vigtige valg ved simulering:

  • Grænsebetingelser — brug enten faste kanter, periodiske kanter (toroidalt), eller arbejde med dynamisk allokering for at efterligne et uendeligt gitter.
  • Visualisering — farvekodning af tilstande, zoom og hastighedskontrol hjælper med at opdage mønstre.
  • Optimering — sparse datastrukturer er nyttige, når kun få celler er aktive på et stort gitter.

Videre læsning og eksperimenter

Begyndere kan prøve at eksperimentere med kendte startkonfigurationer (glider, blinker, glider gun) og justere regler eller nabolag for at se, hvordan adfærden ændres. Der findes mange softwareværktøjer og online-simulatorer, der gør det nemt at udforske cellulære automater interaktivt.

Cellulære automater illustrerer, hvordan simple, lokale regler kan skabe rigt, globalt mønsterdannelse — et grundlæggende og fascinerende fænomen i kompleksitetsteori og systemmodeller.