Opdracht 2: Adaptief transport
Het is raadzaam eerst de hele opdracht door te lezen, voordat je begint met programmeren. Dit voorkomt valse starts. (Ben je sceptisch, lees dan dit.)
Inleiding
Je hebt vast wel eens bestudeerd hoe mieren lopen. Je hebt toen ook vast wel eens een keer hun traject proberen te beïnvloeden, bijvoorbeeld door wat zand of modder neer te leggen. Mieren blijken hun weg dan al snel te kunnen aanpassen. Ook andere vormen van natuurlijk transport bezitten de eigenschap zich aan te kunnen te passen aan een veranderende omgeving. Denk aan de loop van water, het omrijden van automobilisten bij files, of de dynamiek van een school vissen bij het zwemmen rond rotsen.
Globale omschrijving
Modelleer een abstract model van adaptief transport met behulp van een zelf-gedefinieerde cellulaire automaat.
Randvoorwaarden
Hier staat wat moet. Bij afwijking van randvoorwaarden worden punten in mindering gebracht.
- Modellering is alleen toegestaan met behulp van een cellulaire automaat. (Het is toegestaan turtles te gebruiken, echter alleen om het gedrag van een CA te simuleren.)
- De applicatie bevat tenminste een knop SETUP en een knop GO. De applicatie start bij GO en blijft goed functioneren totdat GO nogmaals wordt ingedrukt. Wat er gebeurd bij SETUP bepaal je zelf, zie kopje “opstarten” hieronder.
- Regels. Het is toegestaan (maar beslist niet noodzakelijk) om regels met een kanselement te gebruiken. (Zg. “stochastische CAs”.) Dit kan handig zijn bij knooppunten. Keuzes (links, rechts?) kunnen worden gemaakt door het opgooien van een munt (bij wijze van spreken). Een nadeel van stochastische CAs is dat gedrag principieel niet reproduceerbaar is, tenzij gebruik wordt gemaakt van een zg. fixed initial seed voor de random generator, wat ook mag.
- Grid. Het grid krijgt de volgende dimensies. Location of origin: center; max-pxcor: 100; max-pycor: 60; patch-size: 3. (Niets verbied je om tijdens het bouwen en testen andere maten te gebruiken. Vergeet in dat geval niet bij submitten de maten weer goed te zetten.)
- Toestanden. Er zijn vier categorieën (of typen) toestanden:
achtergrond (dood, passief), transportmedium (denk aan trajecten, leidingen, kanalen, transportbanden), getransporteerde items (denk aan mieren, elektronen, packets, blobs, auto's, dozen), en barriëres (zand, modder, puin). Het gebruik van andere categorieën met een andere intentie (zoals bronnen, putten, transponders, wormgaten en warp ports) is verboden.
-
Kleurcodes, volgens Netlogo's kleurencode.
- Achtergrond: zwart.
- Transportmedium (kanaal, leiding, weg, spoor, pathway): range 10-50 (rood t/m geel).
- Items (mieren, auto's, watermoleculen, vissen, dozen op een transportband in een fabriek): range 50-100 (groen t/m cyaan).
- Barriëres (zand, puin, modder, rotsen): 125 (magenta).
-
Kleurcodes (2).
De meest primaire, of actieve, toestanden dienen gezet te zijn in de helderste kleuren. Inactieve elementen van een kanaal zijn bijvoorbeeld typisch donkerder dan muterende (zich verplaatsende) elementen van een kanaal. En mocht een item bijvoorbeeld bestaan uit een “kop” en een “staart,” dan is de kop typisch helderder dan de staart.
- Kanalen. Transport moet duidelijk en herkenbaar verlopen via gecultiveerde kanalen. (Gecultiveerd betekent hier: volgens vooraf gedefinieerde CA-regels.) Modellen van percolatie en erosie (zie sectie “Earth Science” in Netlogo's modellenbibliotheek) zijn verboden. (De dynamiek van percolatie en erosie is meer gebaseerd op toeval en “de weg van de minste weerstand”.)
- Barriëres. Tijdens een (eventueel stilgezette) run kan een gebruiker barriëres aanbrengen (of weghalen) met behulp van de muis.
Waardering
(Extra) punten kunnen worden verdient door het aanbrengen van de volgende features.
- Werking.
Je model moet in de allereerste plaats goed werken. Hoe laat je dat zien? Dat kan door eerst een goed gedocumenteerde en duidelijk geoperationaliseerde definitie (maat) voor de effectiviteit van adaptatie op te stellen. Dat betekent hier dat je de notie van adaptiviteit woordelijk definieert en vervolgens implementeert in Netlogo. Het houdt ook in dat je de mate van adaptiviteit goed zichtbaar maakt, bijvoorbeeld met behulp van plots die laten zien hoe de doorstroom fluctueert (en herstelt!) bij verstoringen.
- Eenvoud. Minder toestanden (states) en minder regels zijn altijd beter. Items (mieren, dozen, etc.) bezetten zo min mogelijk cellen. Maar ga niet voor eenvoud ten koste van alles. Het kan heel tijdrovend zijn om gedrag proberen te “proppen” in een beperkt aantal regels en toestanden.
- Transparantie.
Bezuinigen op toestanden en regels is mooi, maar het levert niet altijd inzichtelijk gedrag op. Een beetje meer toestanden en regels kan de begrijpelijkheid en transparantie van een CA aanmerkelijk bevorderen. (Denk aan Von Neumann's model voor berekenbaarheid met 29 toestanden vs. regel 110 voor 1-dimensionale CAs. De laatste is ook Turing compleet maar de werking ervan is ondoorzichtiger.)
- Item/traject ratio. Trajecten zijn kostbaar en het zou het slecht zijn als er een traject getrokken wordt alleen maar omdat daar toevallig een bug loopt. Zo veel mogelijk bugs moeten gebruik maken van hetzelfde traject.
-
Trajecten. Trajecten kunnen passief of actief ontstaan. Passieve trajecten zijn slechts sporen die door items getrokken worden. Actieve trajecten bepalen zelf hun ligging, en items moeten die maar volgen. (Er is een grijs tussengebied.) De constructie van actieve trajecten verdient de voorkeur.
-
Opstarten.
Hoe je CA opstart bepaal je helemaal zelf.
Je kunt je CA vanuit een relatief geordende globale toestand laten opstarten (door het tekenen of laden van een initiële configuratie). In zo'n toestand kan veel van de infrastructuur al aangelegd zijn. Het is ook mogelijk je systeem vanuit elke wanordelijke toestand te laten opstarten, zodat de CA zelf de flow en infrastructuur moet organiseren. Het laatste levert extra punten op.
Samengevat:
- Het met de muis kunnen tekenen van initiële configuraties.
- Het kunnen laden van verschillende initiële configuraties (globale starttoestanden). Zie “File Input Example” in Netlogo's modellenbibliotheek.
- Het kunnen starten vanuit iedere toestand.
We herhalen dat de genoemde mogelijkheden suggesties zijn.
Tips
- Begin op tijd.
- Je mag zelf kiezen of je het grid verticaal en/of horizontaal laat doorlopen (vertical / horizontal wrap). Je domein wordt dus een rechthoek, cilinder of torus.
- Transport kan bijvoorbeeld door een massief traject met dikte 1, of door een holle leiding (tunnel) met dikte 3 waarbij het inwendige (dikte 1) transporteert en de wanden (samen dikte 2) het transport leiden. Er zijn andere mogelijkheden.
- Sommige cellulaire automaten (afwijkend van Conway's life) lenen zich beter voor het modelleren van transport dan andere.
- Download Golly of MCell en bestudeer de daarin vervatte alternatieve CAs.
- Bestudeer Railroad en Conveyer in MCell's _Must_See directory.
- Bestudeer Codd's cellulaire automaat (bijvoorbeeld op engelstalige Wikipedia) en zie hoe transport van signalen daar is gemodelleerd. (Codd is overigens dezelfde persoon die als eerste publiceerde over relationele databases... Je weet wel, die dingen waarin o.a. te vinden is “wie je bent” en hoeveel geld je bezit... Behalve dat hield Codd zich dus ook onledig met CAs.)
- Bestudeer Bram Silverman's Wireworld.
- Het is natuurlijk te denken dat transport “ergens vandaan komt” en “ergens naar toe moet”. Transport zou bijvoorbeeld kunnen verlopen van links naar rechts, maar dat hoeft niet, want je zou ook kunnen denken aan een globaal richtingloze dynamiek, waarbij het alleen van belang is dat er een bepaald volume en intensiteit van stroming is.
We roepen in herinnering dat bronnen en putten niet zijn toegestaan.
- Beslis over een mechanisme dat gaat over het ontstaan en verdwijnen van items. Laat bijvoorbeeld items onstaan op plekken met ondercapaciteit, en laat items “sterven” op plekken met overcapaciteit. Je zou er ook voor kunnen kiezen om met een vast aantal items te werken die niet uitsterven.
Wij drukken je nogmaals op het hart alle instructies, inclusief spelregels voor Netlogo-submissies, goed door te lezen, en deze instructies te respecteren. Dit voorkomt teleurstellingen.
*Naast de algemene randvoorwaarden voor de programmeeropdrachten en de algemene randvoorwaarden voor de programmeeropdrachten die specifiek in Netlogo worden uitgevoerd. Zie de pagina met clausules.