| BSc KI — Cursus Natuur & Berekening | 2025-26 |
In 1986 publiceerde Christopher G. Langton een artikel getiteld Studying artificial life with cellular automata. In dit artikel werden verschillende cellulaire automaten besproken, maar veel van wat er in het artikel aan de orde kwam lijkt een beetje vergeten. Wat het artikel achteraf gezien bijzonder maakt, is dat er min of meer terloops een nieuw type cellulaire automaat werd geïntroduceerd. In deze automaat wordt de toestandsverandering van cellen geïnduceerd (teweeg gebracht) door een virtuele mier die over de cellen loopt. Langton noemde deze mier in zijn artikel een virtual ant, maar later werd deze mier toch vooral bekend als Langton's ant. Anders dan in Langton's originele artikel is de mier op talloze andere plekken beschreven, waaronder Wikipedia en TCBoN (Flake). Op veel van deze plekken worden meteen ook mogelijke generalisaties beschreven: meerdere mieren, een rooster met meer dan twee toestanden, meerdere toestanden per mier, en ga zo maar door.
Het speciale van Langton's (originele) mier is dat een eenvoudige regel, afhankelijk van de startconfiguratie (i.e., welke roostercellen in het begin “aan” staan), complexe patronen kan voortbrengen. Er is weinig bekend over het lange-termijngedrag van Langton's mier. Eén van de zeldzame resultaten is een stelling van Cohen en Kong die zegt dat het spoor van Langton's mier onbegrensd moet zijn. Deze stelling bezit een vernuftig bewijs, zie hiervoor bijvoorbeeld het artikel The Industrious Ant van David Gale (1993). Flake's boek bezit een prachtige en zelden beschreven variatie op Cohen en Kong's stelling, namelijk de stelling dat één individuele mier zijn eigen spoor niet kan inverteren (i.e., uitwissen), uiteraard gevolgd door een bewijs.
Echter, het meest bekende “feit” t.a.v. Langton's mier is een vermoeden, genaamd het snelweg-vermoeden. Dit vermoeden stelt dat, voor iedere eindige startconfiguratie (i.e., eindig veel cellen “aan”), Langton's mier op den duur altijd een snelweg zal bouwen. Tot op heden is dit vermoeden bewezen noch weerlegd en zelfs de meest begaafde wiskundigen hebben voorzover ik weet geen idee welke technieken toepasbaar zouden kunnen zijn om dit vermoeden te bewijzen. (Hoewel: zie Alexei Bondal's lezing “Langton's ant period”. Deze lezing is state-of-the-art. Halverwege zijn lezing zegt Bondal iets over semi-invarianten en dalende entropie als bewijstechnieken, maar dat zijn duidelijk nog vage intuïties.) In die zin lijkt het snelweg-vermoeden wel op het mysterieuze vermoeden van Collatz (ook wel: het 3x+1 vermoeden). Beiden vermoedens gaan over de vraag of een zwaar recursieve iteratie convergeert naar een triviale cyclus (1, 4, 2, 1 voor Collatz, en de 104-highway cyclus voor Langton's mier). Over het vermoeden van Collatz merkte de grote wiskundige Paul Erdös ooit op dat de wiskunde misschien nog niet klaar is voor dergelijke problemen, dat wil zeggen, dat de wiskunde vandaag de dag wellicht nog het gereedschap ontbeert om dergelijke problemen aan te pakken. Wie de kracht en de reikwijdte van de wiskunde een beetje kent (ik niet hoor! 😉) beseft dat dit een zware en daarom een spectaculaire bewering is.
Hoewel de theorievorming ten aanzien van Langton's mier dus erg moeizaam verloopt, is het programmeren ervan bijzonder eenvoudig.
Programmeer een veralgemeniseerde versie van Langton's mier waarbij cellen meer dan twee toestanden kunnen aannemen. Bekijk verder Aldo Cavini Benedetti's Youtube uitleg. (Deze uitleg bevat een caveat. Zie daarvoor de section “Bronnen”, onderaan.)
In Netlogo zijn de kleurcodes van deze cellen resp. white, red, lime, cyan, yellow, 126, 3, brown, 52, blue, 43, en 124. Van deze kleurcodes mag niet worden afgeweken.![]()
Hier staat wat moet.* Bij afwijking van randvoorwaarden worden punten in mindering gebracht. Het voldoen aan de randvoorwaarden levert in ieder geval het cijfer acht op. Om een cijfer hoger dan een acht te halen dien je één of meer extra features te hebben geïmplementeerd.
| Waarden, exclusief gebruikers-input en random-gegenereerde keuze, in Netlogo syntax (handig voor copy-paste 😉):
[
["Langton's ant" "RL"]
["Still chaos after 1.000.000 steps" "RLR"]
["Immediately a simple highway" "LLR"]
["A straight highway to the right" "RRLLLRRRLRRR"]
["A broad highway, 45 degrees" "RRLRLLRLRR"]
["568.000 steps before highway emerges" "LLLLLLRRLRRR"]
["A highway that is not a multiple of 45 degrees" "RLRLRLLRLR"]
["A curvy highway to the left" "LLRRRLRLRLLR"]
["Some way to fill a sector" "RRLRLRR"]
["Some other way to fill a sector" "RRLLLRLLLRRR"]
["White upper cone filler" "RRLLLRRRRRLR"]
["Left lower plane filler" "RRLRLLRRRRRR"]
["Some way to fill the whole plane" "RRLRR"]
["Fill the whole plane, connect with highways" "LRRRRRLLR"]
["Fill the whole plane, with spiraling highway" "LRRRRLLLRRR"]
["Your brain (from above)" "LLRR"]
["Your brain (from above), connected to an IC" "RLLR"]
["Professor's brain (from above)" "LLLLLLRRRRRR"]
["Professor's brain connected to an IC" "RRRLLLLLLRRR"]
["Complicated construction" "RRRRLRRRLLRR"]
["Biffled highway" "RLLLLRRRLLLR"]
["Overheating reactor" "RRLRLLLRRRR"]
["Extending square domain" "LLRLLLRRRRR"]
["Persian carpet" "LRLRLLLLLLLR"]
["Other carpet (skew)" "LLRRLRRRRRRR"]
]
|
tick uit na elke zet (“move”). Dit is belangrijk om de animatie desgewenst snel te kunnen laten lopen. Netlogo kiest dan namelijk automatisch voor een repaint na elke tik, of een repaint na elke zoveel tikken.
move-to patch-ahead 1 om naar de volgende patch te lopen. Dit plaatst je mier met zekerheid in het midden van de volgende patch. Het imperatief forward 1 doet dat ook, maar dan relatief t.o.v. de mier. Op deze manier kan het gebeuren dat na een groot aantal iteraties de mier niet meer op midden van patches staat.Extra punten kunnen worden verdient door het aanbrengen van één of meer van de volgende features.
radius van patch (0, 0). Interessant gedrag kan al worden opgeroepen door slechts een klein deel van de initialisatie-schijf te vullen met toestanden ongelijk nul. Daarom kent de initialisatie bovendien een parameter density (dichtheid), die aangeeft hoe groot de kans is dat een cel (op de initialisatie-schijf) bij initialisatie gezet wordt op een toestand ongelijk nul.scale-color. Wit betekent dat de cel relatief vaak bezocht werd.Haal er uit wat je handig lijkt. Het is niet verplicht deze code te gebruiken.
ask patches [ set state 0 set pcolor gray ]
globals [ colours ... ] set colours [ white red lime cyan yellow 126 3 brown 52 blue 43 124 ]
extensions [ table ] globals [ instruction-table ... ] set instruction-table table:from-list [ ["Langton's ant" "LR"] ["Still chaos after 1.000.000 iterations" "RRL"] ["..."] ["..."] ... ] set state-sequence table:get instruction-table my-choicewaarbij
my-choice dan gebruikers-input is, bijvoorbeeld uit een Netlogo widget van het type “chooser”.to-report to-string [ l ] report reduce [ [?1 ?2] -> word ?1 ?2 ] l end
let random-length 2 + random 10 let random-sequence to-string n-values random-length [ one-of ["L" "R"] ]
remove "L" remove "R" my-state-sequence = ""
2 <= length my-state-sequence and length my-state-sequence <= 12
carefully worden gebruikt. Dit werkt hetzelfde als throw en catch in andere talen:carefully [ <doe een stap> ] [ ; als <doe een stap> faalt: set bumped? true ]
set state (state + 1) mod N
Het volgende nakijkmodel zal worden gebruikt.
------------------------------------------------------
1. gratis punt
2. GUI (widgets thematisch gerangschikt, netjes uitgelijnd, handig benoemd,
veel gebruikte widgets hebben shortcuts, ..)
3. werkt in grote lijnen
4. werkt 100% correct (interpretatie LR strings, oriëntatie mier,
stop-conditie, conform randvoorwaarden kleuring, veldgrootte)
5. code syntax (organisatie, leesbaarheid)
6. code semantiek (vnl. executiesnelheid, maar dat zit in deze opdracht al snel goed)
7. documentatie in de code (op plekken waar dat nodig is en helpt, niet redundant)
8. documentatie in de tab (zinvol en netjes georganiseerd), aanwezigheid *.png
----- cijfer acht ------------------------------------
9. best of extra feature
10. "
----- cijfer tien ------------------------------------
In de infotab staat onder FEATURES welke twee onderdelen (bij 1-puntsfeatures) of onderdeel (bij een 2-puntsfeature) worden/wordt voorgedragen als extra feature. Uiteraard mogen meerdere features worden geïmplementeerd, echter deze dingen dan niet mee. Deze voorwaarde is nog eens herhaald bij de inlevervoorwaarden op de practicumpagina.
| Laatst gewijzigd op woensdag 13 november 2024, om 15:02 uur | Auteur(s): Gerard Vreeswijk | Translate to en, ru, or tr |