Categorie archief: Computermodellen

Een cellulair ecosysteem

Als je er aan begint ben je verslaafd. En als je één cellulaire automaat hebt gemaakt is de volgende niet zo moeilijk meer. Deze is een klassieker, en in onderzoek ook veel gebruikt, dan wel in wat uitgebreidere vorm: een ecosysteem bestaande uit verschillende onderdelen van de voedselketen. Ik heb het simpel gehouden en gekozen voor twee verschillende onderdelen van het ecosysteem: gras en konijnen. Net als bij de vorige cellulaire automaten zijn er enkele simpele regels waaraan de bewoners van de cellen zich houden. En zelfs met deze simpele regels kun je interessant gedrag zien ontstaan. De regels:

Voor Gras:

  1. Als er in je directe omgeving (de cellen links, rechts, boven of onder) een lege cel is wordt die in 20% van de gevallen gevuld met gras. [Gras groeit].

Voor de konijnen:

  1. Konijnen beginnen met een energie van 10.
  2. Iedere stap neemt de energie van een konijn af met 1. [Leven kost energie]
  3. Als de energie onder nul zakt sterft het konijn en laat een lege cel achter. [De hongerdood]
  4. Als het konijn naast een cel met gras staat, kan het konijn eten. De kans daarop is 1-energie/10 en wordt dus groter met afnemende energie (honger). Als het konijn eet springt het naar de cel met gras en stijgt zijn energie met 3. [Konijnen eten]
  5. Als je naast precies één ander konijn staat, en de energie van beide konijnen is groter dan 5, is er een kans (40%) dat er een nieuw konijn ontstaat in een cel naast het konijn. [Voortplanting]

Er zijn twee belangrijke toevoegingen aan de regels ten opzichte van de vorige automaten. Er is een kanselement ingebracht, sommige regels kunnen met een bepaalde kans worden uitgevoerd. Bovendien heeft het konijn een interne toestand, zijn energie, die het gedrag van het konijn bepaalt (wel/niet eten, wel niet voortplanten, sterven). En je kunt me aanvallen op de biologische correctheid omdat ieder konijn met ieder willekeurig ander konijn kan voortplanten. Hier zie je het resultaat:

In veel gevallen zie je dat het aantal konijnen vaak ongeveer stabiel blijft, met af en toe bevolkingsexplosies van konijnen. Die leiden dan tot grote kaalgevreten plekken waardoor konijnen in een hoog tempo afsterven. In veel gevallen blijven er een paar over die op termijn zich weer gaan vermenigvuldigen. Het systeem kan dus een stootje hebben. Maar soms gaat het fout en sterven alle konijnen. Het overkwam mij een aantal keer dat ik een eenzaam zwervend konijntje overhield. Dat heeft het eeuwige leven want in dit model is niet voorzien in sterven van ouderdom.

De weg uit het doolhof

Met cellulaire automaten kunnen we meer dan mooie patronen genereren. Ze vormen een krachtig gereedschap om allerlei processen en principes mee te simuleren. Ik laat hier een simulatie zien met een cellulaire automaat waarmee je de weg uit een doolhof kunt vinden. Een belangrijk verschil met de game of life is dat de cellen nu op meerdere manieren gevuld kunnen zijn.  Preciezer, een cel is niet alleen bezet of niet, maar kan bezet zijn met verschillende kleuren.

Het model van het doolhof bestaat uit een vierkant van cellen waarin de muren worden gevormd door bruine cellen. Bij de uitgang is een cel gevuld met groen. De persoon die probeert de ontsnappen staat in een rode cel.

Net als bij de game of life geven we regels hoe de cellulaire automaat gaat veranderen. Het zal duidelijk zijn dat de verandering alleen zal plaatsvinden rond de rode cel. Daarom formuleren we de regels vanuit die cel. Alle regels gelden dus alleen als de cel rood is:

  1. Als een van je buurcellen (links, rechts, boven, onder) groen is: kleur die cel rood, en kleur je eigen cel geel. Stop daarna. [Ga naar de groene cel]
  2. Als een van je buurcellen leeg is, kleur die rood en kleur je eigen cel geel. [Ga naar een lege cel]
  3. Als geen van je buurcellen leeg is, maar er is wel een gele, kleur die rood, en de cel waar je vandaan komt blauw. [Volg het spoor terug]
  4. In alle andere gevallen stop je.

Hier is de simulatie:

Als je hem start, zie je dat de rode cel beweegt naar lege cellen. Wanneer er geen lege cellen in de buurt zijn, volgt hij het gele spoor terug, tot er weer een lege cel is die geprobeerd kan worden, net zolang tot de uitgang is bereikt.  Het gele spoor tekent de gevolgde weg. De gele vakjes zou je daarom ook broodkruimels kunnen noemen. Het weer teruggaan naar eerder neergelegde broodkruimels noemen we backtracken.

Als je wilt kun je opnieuw beginnen en met muisklikken muren bijmaken of wegbreken, en kijken hoe de route verandert, of onmogelijk wordt.

Omdat de regels er voor zorgen dat er altijd maar één rode cel is, is het verleidelijk die een eigen identiteit te geven. Het is de representatie van de persoon die de uitweg zoekt. De gekleurde cel wordt een ding, met een eigen gedrag. Zoiets wordt een agent genoemd, en de simulatie wordt dan, in goed Nederlands,  een agent-based simulation. Aardig van deze simulaties is dat ze laten zien dat je met weinig eenvoudige regels relatief ingewikkeld gedrag kunt begrijpen.

 

De fout in mijn tegels

In de vorige blog daagde ik de lezer uit uit te vinden welke regel was gebruikt voor de cellulaire automaat waarmee ik het patroon voor mijn badkamertegels bepaald. Het blog is redelijk vaak bekeken en via twitter kreeg ik reacties. Johan Roos (@MagliaRosa) vond zowel de regel als de fout. Hulde, want met name de fout was moeilijk te vinden.

De regel is 30 of 135. Welke van de twee hangt af van welke kleur je 1 of 0 noemt. 30 is binair 00011110 en 135 is 10000111. 135 is dus 30 gespiegeld en 1 en 0 verwisseld, hetgeen neerkomt op dezelfde regel met alle enen en nullen verwisseld. De fout was echt moeilijk te vinden. Het is een afgeknipte tegel, een driehoekje, bij de rand op de negende rij boven het bad. Hieronder een detailopname:

Als de tegel blauw had moeten zijn had volgens de regel de tegel een regel later en een naar links ook blauw moeten zijn, en hij is groen. Het aardige is dat je niet eens de regel hoeft te weten om te zien dat er een fout in zit. Overal zie je midden onder drie blauwe tegels weer een blauwe, behalve hier. Als je weet DAT er een regel is kun je concluderen dat hier een fout moet zijn.