Artificial Intelligence

Artificial Intelligence

A Inleiding

Vooraf

De titel van deze module is “Artificial Intelligence” oftewel kunstmatige intelligentie.
Daaronder verstaan we de intelligentie waarmee machines, software en apparaten zelfstandig problemen kunnen oplossen.
Het denkvermogen van een mens wordt daarbij nagebootst.
Voorbeelden van toepassingen van kunstmatige intelligentie zijn een robot die zelfstandig verbanden kan leggen of software waarmee gezichtsherkenning mogelijk wordt maakt.
Om meer te leren over waar intelligentie vandaan komt en hoe dat werkt, kan gebruik gemaakt worden van computerprogramma’s.
Met deze programma’s kan intelligentie gesimuleerd worden.

In deze module maak je kennis met NetLogo. Met deze software kun je zelf modellen ontwikkelen die gebruikt kunnen worden om intelligentie na te bootsen.
Als eerste bestudeer je een aantal voorbeeldmodellen in NetLogo.
Daarna volgt een theoretische uiteenzetting over kunstmatige intelligentie. In dit onderdeel maak je kennis met het model BRAND, dat een brand simuleert in een school. Na het theoretisch onderdeel leer je zelf code te schrijven in NetLogo.
Tot slot pas je de opgedane kennis toe op het model Brand.

Leerdoelen

Na verwerking van deze module:

• weet je hoe het programma NetLogo werkt;
• kun je een beschrijving geven van de begrippen view, monitor en plots;
• kun je omschrijven wat agents (agenten) zijn;
• kun je uitleggen wat een patch, een turtle en een observer is;
• kun je uitleggen wat het hatch-commando doet;
• kun je uitleggen wat we onder globale variabelen verstaan;
• kun je uitleggen wat recursieve procedures doen;
• kun je toelichten wat we verstaan onder AI;
• kun je uitleggen wat een goed en minder goed model is;
• kun je het verschil tussen een domme en een slimme omgeving toelichten;
• kun je in NetLogo zelf code schrijven.

Bijlagen

Bij deze module horen de volgende bijlagen:
In deze module gebruiken we het programma NetLogo versie 6.02. NetLogo kan hier gedownload worden:
NetLogo

Zo werkt het

Je bent begonnen in de module Artificial Intelligence.
Deze module bestaat uit meerdere onderdelen.
In ieder onderdeel vind je, verdeeld over verschillende pagina's, informatie in de vorm van teksten, afbeeldingen en video's.

Daarnaast ga je zelf aan de slag. Onder het kopje "Aan de slag" vind je steeds toepassingsopdrachten.
Deze opdrachten maak je alleen of met een klasgenoot.

Er zijn ook toetsen. Deze herken je aan de blauwe knop met daarop "Adaptieve Toets".
Een toets bestaat uit meerdere vragen. Dat kunnen gesloten vragen zijn, die door de computer worden nagekeken, of open vragen, die moet je zelf nakijken.
Bij een enkele vraag moet je een bestand uploaden.

Van de toetsen wordt, als je ingelogd bent, de voortgang bijgehouden.
Het resultaat vind je onder de knop "Voortgang". Deze voortgang is ook door je docent te bekijken.

Succes met de module Artificial Intelligence.

B Voorbeeldmodel Party

Op een feestje

Voor de module Artificial Intelligence gebruiken we NetLogo.
Met NetLogo kunnen modellen gemaakt worden.
NetLogo bevat ook een standaardbibliotheek van voorbeeldmodellen.
Daarvan zullen we er een aantal bekijken.
Achtereenvolgens zijn dat: Party, Wolf Sheep Predation en Traffic Basic.

Het eerste voorbeeldmodel waarmee we aan de slag gaan, is het model Party.
Aan de hand van dit model introduceren we het begrip computermodel en maak je kennis met het programma NetLogo.

Als je wel eens op een feest bent geweest, is het je vermoedelijk niet ontgaan hoe mensen in groepjes bij elkaar gaan staan.
Ze blijven niet steeds in het hetzelfde groepje, maar ze wisselen tijdens het feest van groep.
De groepen zelf veranderen van samenstelling naarmate het feest voortduurt. Er ontstaan patronen.
Op feestjes gedragen mensen zich meestal anders dan op school of thuis.
Mensen die op school vol zelfvertrouwen zijn, kunnen op feestjes daarentegen heel verlegen zijn.
En omgekeerd kunnen mensen die op school nauwelijks opvallen op een feest echte gangmakers zijn. De patronen die bij groepsvorming waar te nemen zijn, hangen ook af van de gelegenheid.
Bij bepaalde activiteiten zullen gemengde groepjes ontstaan.
Hierin komen zowel jongens als meisjes voor en zullen er ongeveer gelijke aantallen waar te nemen zijn. Zoals bijvoorbeeld een schoolfeest.
Maar bij sportactiviteiten zul je waarschijnlijk zien dat er of heel veel jongens of heel veel meisjes in een groep zitten.
Kun je hier een patroon in ontdekken?

Laten we die vraag eens onderzoeken door een computermodel te bestuderen.
In het model Party van Netlogo wordt onderzocht hoe mensen zich gedragen op feestjes.
Hoe komt het dat sommige groepen voornamelijk uit mannen of juist voornamelijk uit vrouwen bestaan?

★ Aan de slag 1

  1. Start NetLogo.
  2. Selecteer de Models Library (File → Models Library)
  3. Open de map Social Sciences.
  4. Klik op het model met de naam Party.
  1. Klik op de knop “open” rechtsonder.
  2. Wacht tot het model geladen is.
  3. Maak het venster eventueel groter.
  4. Druk op de setup-knop linksboven.

 

 

Op een feestje - 2

Na het openen van het model zie je roze en blauwe strepen waar getallen bij staan.

Die strepen staan voor groepen. Mannen zijn blauw en vrouwen zijn roze.
De getallen staan voor het totale aantal mensen in een groep.
Hoeveel groepen zijn er? Zijn de groepen gelijk in samenstelling (evenveel procent mannen als vrouwen)?

Stel je geeft een feest voor 75 mensen. Je hebt op 10 plaatsen een paar tafeltjes neergezet, omdat je denkt dat mensen in groepen van ongeveer 7 mensen bij elkaar gaan zitten. Je gaat er ook vanuit dat bij elke tafel ongeveer evenveel bier (mannen!) als wijn (vrouwen!) wordt gedronken. Maar klopt dat idee wel?
Je kunt dit gaan uitproberen door de 75 mensen eerst voor een proef uit te nodigen, maar je kunt ook de computer gebruiken. Daarmee kun je testen of de groep van 75 zich opsplitst in 10 even grote groepen, waarin ongeveer evenveel mannen als vrouwen voorkomen.

 

★ Aan de slag 2

  1. Druk op de go-knop (als je nog een keer op die knop drukt stopt de simulatie).
  2. Kijk hoe mensen bewegen tot het model stopt zonder dat jij nog een keer op de knop drukt.
  3. Kijk naar de grafieken om op een andere manier te zien wat er gebeurt.

Op een feestje - 3

Je zult zien dat je voorspelling niet uitkomt.
Niet alleen zijn er misschien geen tien groepen, maar ze zijn zeker niet even groot.
En allemaal bestaan ze uit mannen of vrouwen. Hoe komt dat?


De bedenker van deze simulatie dacht dat groepen niet zomaar ontstaan, maar dat de groepssamenstelling wordt bepaald door iets wat hij of zij tolerance heeft genoemd.

Tolerance wordt hier gedefinieerd als het percentage mensen van de andere sekse waarbij je je nog lekker voelt.
In het voorbeeld voelen mannen zich lekker als er maximaal 1/4 deel van hun groepje uit vrouwen bestaat, en vrouwen voelen zich ook alleen maar lekker als er maximaal 1/4 deel van hun groepje uit mannen bestaat.
Als mensen zich niet lekker voelen lopen ze naar een ander groepje, met als gevolg dat mensen daar zich soms ook niet meer op hun gemak voelen.
Uiteindelijk zie je dat met deze aantallen mannen en vrouwen er alleen maar groepjes ontstaan die of uit mannen of uit vrouwen bestaan.
Het percentage tolerance kan worden ingesteld.
Met de schuifknop kan het percentage aangepast worden.
Als je het model opnieuw start, zal er dan ook een ander eindresultaat uit rollen.

★ Aan de slag 3

  1. Maak de volgende opgaven
    1. Als de go-knop nog zwart is, loopt de simulatie nog. Druk nogmaals op de knop om hem te stoppen.
    2. Pas het percentage aan door met het roze balkje te schuiven.
    3. Druk op de setup-knop om het model opnieuw in te stellen.
    4. Druk op de go-knop om het model opnieuw te starten.
  2. Maak de volgende opgaven
    1. Als gastheer of -vrouw vind je het leuk als mannen en vrouwen zich onderling een beetje mengen.
      Verander de positie van het schuifje zodanig dat alle 10 de groepen aan het eind van de simulatie uit vrouwen en mannen bestaan.
      Welke waarde heeft de “tolerance” nu?
    2. Denk je dat bij een nieuwe run met dezelfde instellingen er weer 10 gemengde groepen ontstaan?
      Test je voorspelling.
    3. Kun je andere factoren (variabelen) bedenken die de man/vrouw ratio van een groep beïnvloeden?
      Test ook dit idee en verander net zoveel variabelen als je wilt.
  3. Je zult zien dat er patronen ontstaan.
    Als je bijvoorbeeld het aantal aanwezigen constant houdt, maar de tolerance langzamerhand verhoogt, zul je merken dat de kans op meer gemengde groepen groter is.
    Door met Netlogo te werken aan iets als het feestscenario zul je zien dat je met een systeem kunt experimenteren op een manier die in werkelijkheid niet zou kunnen.
    Hoe hoog moet de tolerantie zijn om ervoor te zorgen dat er elke keer 10 gemengde groepen ontstaan?

C Een ander voorbeeldmodel

Wolf Sheep Predation

Je hebt door Party een idee gekregen van een computermodel en je hebt gezien hoe je een model kunt testen met NetLogo.
In het volgende voorbeeld zul je ontdekken wat er nog meer kan met NetLogo.
Telkens zal je gevraagd worden zelf voorspellingen te doen over het effect van bepaalde veranderingen in het model.

Dit keer open je het model Wolf Sheep Predation uit de sectie Biology.
Als je dit model hebt geopend, zal je scherm aan de linkerkant vol staan met allerlei knoppen, schakelingen, schuifbalkjes en vensters.

Hieronder zie je de view.
Zolang er nog niet op de setup-knop en de go-knop is gedrukt, is die nog helemaal zwart:

                    view voor de setup                                                view na de setup

De knoppen

In de interface van het model Wolf Sheep Predation worden meerdere knoppen gebruikt.
Er bestaan in NetLogo verschillende soorten knoppen: once-knoppen die een eenmalige actie uitvoeren, go once-knoppen waarmee je het model aldoor één stapje verder laat lopen en forever-knoppen die een actie in werking zetten die pas stopt als je de knop nog een keer indrukt.
Deze laatste knop is te herkennen aan de twee pijltjes.

De meeste modellen hebben een once-knop met het label “setup” waarmee je de waarden instelt.

Met de go once-knop met het label “go once” kun je een model telkens één stapje verder laten lopen.

Met een forever-knop met het label “go” laat je een model lopen
tot je weer op die knop drukt. Je kunt het model ook even laten
pauzeren met de go-knop.

In het Menu zit bij Tools ook een Halt, maar die gebruik je alleen als het programma vast komt te zitten.

★ Aan de slag 4

Open in NetLogo het model Wolf Sheep Predation.

  1. Welke soorten knoppen worden in het model Wolf Sheep Predation gebruikt?
  2. Beschrijf wat je ziet in de view nadat je op de setup-knop hebt geklikt.
  3. Druk op de go-knop. Wat voor veranderingen kun je waarnemen als je kijkt naar het aantal schapen en het aantal wolven?
  4. Kijk wat er gebeurt met de grafiek die de populations beschrijft.
  5. Klopt dit met wat je ziet in de view?
  6. Kun je bedenken waarom er maar 2 lijnen zijn?
  7. Krijg je verschillende resultaten als je het model (versie sheep-wolves) een paar keer laat lopen met dezelfde waarden bij de start?

Schuifbalken en schakelingen

Je kunt de verschillende scenario's of hypotheses van je model testen door de instellingen te wijzigen.
Als je ziet hoe het model reageert op deze veranderingen kun je de verschijnselen die je modelleert beter begrijpen.
De schuifbalken en schakelingen stellen je in staat de instellingen van je model te wijzigen.
We illustreren dat aan de hand van het model Wolf Sheep Predation.
In dit model kunnen we de instellingen voor gras, schapen en wolven regelen.

De instellingen voor het gras:


De instellingen voor de schapen (links) en de wolven (rechts):


Je ziet dat deze knoppen groen zijn terwijl de knoppen waarmee je het model instelt en start paars zijn.
De schermen waarin je kunt volgen hoe de waarden veranderen zijn geel van kleur.
Er zijn tevens schermen voor de grafieken en voor het weergeven van de waarden als getal.
We hebben hier te maken met de zogenaamde monitoren.
Monitoren worden gebruikt om op een andere manier informatie in een model weer te geven.

Hieronder staan de monitoren voor het voorbeeldmodel Wolf Sheep Predation:

Deze monitoren vertellen ons iets over de populatie van schapen en wolven en de hoeveelheid gras.

 

★ Aan de slag 5

  1. Open in NetLogo het model Wolf Sheep Predation.
    Ga uit van de onderstaande instellingen:


    Druk op de setup-knop en de go-knop en laat het model 100 tikken lopen.
    Het aantal tikken kan bekeken worden in de grijze balk bovenaan de view.
    Stop het model bij 100 tikken door nogmaals op de go-knop te klikken.


    Neem goed in je op wat er gebeurde zodat je de eindtoestand straks kunt vergelijken met het effect van andere instellingen.
  2. Pas nu de instelling van het gras aan.
    Stel de schuifbalk voor grass-regrowth-time in op 0.
    Druk weer op de setup-knop en de go-knop en laat het model 100 tikken lopen.
    Wat is het effect van deze aanpassing?

Schuifbalken en schakelingen - 2

In het model Wolf Sheep Predation zien we in de interface ook een schakelaar.
Met deze schakelaar kan worden ingesteld of de energy zichtbaar moet zijn of niet.

Met een schakeling kan, net als met een schuifbalk, een waarde worden ingesteld.
Bij een schakeling zijn de waarden van het type aan/uit (true/false).
De waarden zijn meestal niet bepalend voor het laten lopen van het model, maar geven wel een extra dimensie.

Schuifbalken geven geen true/false waarden weer, maar numerieke waarden op een glijdende schaal.
Die schaal heeft een minimale en een maximale waarde. Zo kan het aantal schapen bij aanvang van het model worden gevarieerd tussen de minimale waarde 0 en de maximale waarde 250.
Die waarde zie je terug in de lichte schermen.

★ Aan de slag 6

  1. Maak de volgende opgaven
    1. Stel het aantal schapen waarmee het model begint in op 50.
    2. Bekijk de andere schuifbalken.
    3. Lees wat er staat onder het tabblad Info.
    4. Klik daarna op het tabblad Interface.
      Je hebt aangegeven dat er nu evenveel schapen (50) als wolven (50) zijn bij de aanvang van de simulatie.
      Test wat er gebeurt als er evenveel schapen als wolven zijn.
  2. Maak de volgende opgaven
    1. Selecteer in het model Wolf Sheep Predation de versie sheep-wolves-grass.
    2. Stel het aantal schapen in op 100 en het aantal wolven op 20.
    3. Laat het model 100 tikken lopen.
    4. Wat kun je na 100 tikken zeggen over het aantal schapen en wolven?
    5. Wat is er veranderd in de grafiek die de populations beschrijft?

 

De wereld van het model

Het vlak in de rechterkant van het scherm laat je zien hoe de wereld van het model verandert.
Bij aanvang is het hele vlak pikzwart.
Als je het model hebt gestart, zie je elk schaap en elke wolf terug als een klein figuurtje.
Het gras bestaat uit kleine vierkantjes.
Het hele scherm bestaat uit vierkantjes: de figuurtjes van de wolf en het schaap nemen meer dan één vierkantje in beslag.


Je kunt van elk vierkantje aangeven waar het zich bevindt.
Het vierkantje in het midden van het vlak wordt aangeduid als (0,0). De eerste 0 is de x-coördinaat: de afstand op de horizontale as.
Vierkanten links van het midden hebben een negatieve x-waarden, en vierkanten rechts van het midden hebben een positieve x-waarden.
De tweede 0 is de y-coördinaat: de afstand op de verticale as.
Vierkanten boven het midden hebben een positieve y-waarde, en vierkanten onder het midden hebben een negatieve y-waarde.

In het model wordt een vierkant een patch genoemd. Die aanduiding zullen we hier verder ook gebruiken.
Je kunt de precieze plaats van een patch vinden door er met de rechtermuisknop op te klikken.
Er verschijnt een scherm waarin je meer informatie kunt vinden over die patch.
Je ziet dat de patch wordt aangeduid met de waarden van de x- en y-coördinaat.
In het voorbeeld bevindt de patch zich iets links en onder van het midden.
Als je met de linkermuisknop op inspect patch klikt, krijg je nog meer informatie over die patch.
Daar gaan we in de volgende module mee verder.

D1 Command Center

Traffic Basic

Inmiddels heb je kennis gemaakt met enkele modellen uit de standaardbibliotheek van NetLogo.
Je hebt geleerd hoe je deze modellen kunt openen maar ook hoe je deze modellen kunt uitvoeren.
Ook heb je gezien hoe je knoppen gebruikt, hoe je schuifbalken instelt en waarden bij schakelingen kunt veranderen en hoe je informatie uit een model afleidt door gebruik te maken van plots (grafieken) en monitors (monitoren).

In dit onderdeel ligt het accent niet zozeer op het bestuderen van modellen maar meer op het manipuleren van modellen.
Je zult inzicht krijgen in de innerlijke werking van een model en in staat zijn om de vormgeving van een model te veranderen.

 

★ Aan de slag 7

  1. Start NetLogo.
  2. Ga naar FileModels Library.
  3. Open het model Traffic Basic.
    Je treft dit model aan in het onderdeel Social Sciences.
  4. Voer het model gedurende enkele minuten uit om zo een eerste indruk van het model te krijgen.
  5. Raadpleeg het tabblad Info voor vragen die je wellicht hebt omtrent dit model.

Traffic Basic - 2

In dit model kun je één rode auto waarnemen in een rij van blauwe auto’s.
De rij auto’s verplaatst zich in dezelfde richting. Om de zoveel tijd stagneert de doorgang en staan de auto’s stil.
Dit model illustreert hoe files ontstaan zonder dat er sprake is van een ongeval, een brug die openstaat of een vrachtwagen die is gekanteld.
Er is geen duidelijke oorzaak te noemen voor het ontstaan van de file.

Je kunt de instellingen veranderen en het model enkele keren laten lopen om zo inzicht te krijgen in de werking van het model.

Nu je kennis gemaakt hebt met het Model Traffic Basic zijn er wellicht dingen die je zou willen toevoegen aan dit model.
Het zal je niet zijn ontgaan dat de omgeving van het model vrij eenvoudig is; een zwarte achtergrond met een witte straat en een aantal blauwe auto’s en één rode auto.
Veranderingen die aangebracht zouden kunnen worden, zijn: het veranderen van de kleur en de vorm van de auto’s, het toevoegen van een huis of straatverlichting, het plaatsen van een stoplicht of zelfs het creëren van een andere rijbaan of straat.
Sommige van deze veranderingen zijn puur cosmetisch en laten het model er anders uitzien.
Andere veranderingen daarentegen zullen veel meer van invloed zijn op het gedrag van het model.
In dit onderdeel ligt het accent vooral op eenvoudige en cosmetische veranderingen.
Naderhand ligt het accent op gedragsveranderingen van het model.

Om simpele veranderingen te kunnen doorvoeren, maken we gebruik van het Command Center.

 

 

Het Command Center

Het Command Center (Commando Centrum) is onderdeel van het tabblad Interface.
Het biedt de mogelijkheid om opdrachten aan het model te verstrekken.
Opdrachten zijn hier instructies die je kunt geven aan NetLogo agents (agenten): turtles, patches en de observer.

★ Aan de slag 8

  1. Start NetLogo.
  2. Ga naar FileModels Library.
  3. Open het model Traffic Basic.
  4. Klik op de setup-knop. Concentreer je nu op het Command Center.
  5. Klik met de muis in het witte gedeelte aan de onderkant van het Command Center.
    Typ de onderstaande tekst in:

  6. Klik op de entertoets.
  7. Wat is er gebeurd met het uiterlijk van het model?
  8. Het zal je zijn opgevallen dat de achtergrond helemaal geel is geworden en dat de straat is verdwenen.
    Kun je verklaren waarom de auto’s niet ook geel geworden zijn?

★ Aan de slag 9

Terugkijkend naar de voorgaande aan de slag opdrachten kunnen we constateren dat we alleen de patches van kleur hebben laten veranderen.
In dit model worden de auto’s vertegenwoordigd door een ander type agenten, de zogenaamde turtles.
Dit verklaart waarom de auto’s de gegeven opdracht negeerden en niet van kleur zijn veranderd.

  1. Wat is er gebeurd met het Command Center?
    Het zal je zijn opgevallen dat de opdracht die je net hebt getypt nu wordt weergegeven in het witte vlak in het midden van het Command Center.
  2. Maak de volgende opgaven
    1. Typ nu in het witte gedeelte aan de onderkant van het Command Center de volgende tekst:
    2. Klik op de entertoets.
    3. Komt het resultaat overeen met wat je verwachtte?
    4. Hoe ziet de view er nu uit?​

   

Het Command Center - 2

Het model moet nu voorzien zijn van een gele achtergrond met daarin een rij van bruine auto’s in het midden.

De wereld van NetLogo is een tweedimensionale wereld bestaande uit turtles, patches en een observer.
De patches creëren de omgeving waarin de turtles zich kunnen begeven en de observer ziet er op toe dat alles in die omgeving naar behoren verloopt.

In het Command Center beschikken we over de mogelijkheid om de observer, de turtles en/of de patches een opdracht te geven.
We maken daarvoor gebruik van een pop-up menu dat zich in de linker benedenhoek van het Command Center bevindt.
Met behulp van de pijltjestoetsen kunnen de verschillende mogelijkheden in het menu doorlopen worden.

★ Aan de slag 10

  1. Klik in het Command Center op observer:
  2. Kies nu voor turtles in het pop-up menu.
  3. Typ set color pink en klik vervolgens op de entertoets.
  4. Klik met de muis op de observer (linksonder in het Command Center).
    Selecteer met de pijltjestoetsen het onderdeel patches.
  5. Typ set pcolor white en klik op de entertoets.
  6. Hoe ziet de view er nu uit?

 

★ Aan de slag 11

Merk je het verschil tussen deze twee commando’s en de twee voorgaande observer commando’s?
De observer overziet de hele wereld en kan daarom bijvoorbeeld een commando geven aan de patches of de turtles.
Ask is zo’n commando zoals je ziet in het eerste voorbeeld: observer>ask patches [set pcolor yellow].
De observer geeft aan de patches de opdracht om hun pcolor te veranderen in geel.
Maar als een commando direct wordt gegeven aan een groep van agents zoals in het tweede voorbeeld (patches>set pcolor white) dan hoef je alleen maar het commando zelf te geven.

  1. Klik nu op de setup-knop.
    Wat gebeurt er?
  2. Wat gebeurt er met de auto’s?
  3. Bedenk wat je hebt gedaan om de auto’s blauw te maken.

Het Command Center - 3

Waarom veranderde het aangezicht in de oude situatie met een zwarte achtergrond en een witte weg?
Door op de setup-knop te klikken zal het model de instellingen aannemen die zijn vastgelegd onder het tabblad Code:


Het Command Center wordt niet vaak gebruikt om permanente veranderingen in het model aan te brengen.
Het wordt voornamelijk gebruikt als een tool om modellen waarmee gewerkt wordt tijdelijk aan te passen en voorziet in de mogelijkheid om de NetLogo wereld te manipuleren en antwoorden te krijgen op vragen die beginnen met “wat als…”.
Dit soort vragen ontstaan vooral als er geëxperimenteerd wordt met een model.
Nu we wat meer inzicht hebben gekregen in de mogelijkheden van het Command Center wordt het tijd om ook eens aandacht te besteden aan hoe je werkt met kleuren in NetLogo.

D2 Werken met kleuren

★ Aan de slag 12

  1. Selecteer turtles in het pop-up menu van het Command Center.
  2. Typ nu set color blue en druk op de entertoets.
  3. Wat gebeurt er met de auto’s?
  4. Bedenk wat je hebt gedaan om de auto’s blauw te maken.
  5. Probeer nu de patches te veranderen in de kleur rood.
  6. Het is je wellicht opgevallen dat er twee verschillende woorden gebruikt worden om kleuren te veranderen.
    Namelijk color en pcolor.
    Wat is het verschil tussen color en pcolor?

Werken met kleuren

Indien je probeert de patches de opdracht te geven set color red zal dat een foutmelding veroorzaken:

We noemen color en pcolor variabelen.
Sommige commando’s en variabelen zijn specifiek voor turtles.
Anderen weer voor patches.
Bijvoorbeeld: de color variabele is een turtle variabele, terwijl de pcolor variabele een typische patch variabele is.

★ Aan de slag 13

Probeer nu maar eens de kleuren van de turtles en de patches te wijzigen door de set commando’s en de variabelen color en pcolor.

Werken met kleuren - 2

Om in staat te zijn om meer veranderingen aan te brengen in de kleuren van turtles en patches, of zullen we zeggen van auto’s of achtergronden, moeten we meer inzicht verwerven in hoe NetLogo met kleuren omgaat.

In NetLogo hebben alle kleuren een numerieke waarde.
In alle oefeningen hebben we tot nu toe de naam van de kleur gebruikt.
NetLogo kent 16 verschillende kleurnamen. Dit wil niet zeggen dat NetLogo slechts 16 kleuren kent.
Het overzicht toont welke kleuren in NetLogo gebruikt kunnen worden:


Om een kleur te selecteren die géén eigen kleurnaam heeft, moet er verwezen worden naar een nummer.
Er is in dat geval geen sprake van de koppeling van een nummer aan een kleurnaam.
Bijvoorbeeld: als je het type instelt op set color red, gebeurt er hetzelfde als het commando set color 15 wordt gebruikt.
Er kan een lichtere of donkere versie van dezelfde kleur verkregen worden door een nummer te gebruiken dan iets kleiner of iets groter is.

★ Aan de slag 14

  1. Selecteer patches in het pop-up menu van het Command Center.
  2. Typ nu set pcolor red - 2 en druk op de entertoets.
    Let op de spaties tussen ‘-’ die niet vergeten mogen worden.
    Na het uitvoeren van deze opdracht hebben alle patches een donkerrode kleur gekregen.
  3. Typ nu set pcolor red + 2 en druk op de entertoets.
    Wat gebeurt er met de kleur van de patches?

Door een waarde af te trekken van rood wordt de kleur donkerder.
Door een waarde op te tellen bij rood wordt de kleur lichter.
Deze techniek kan worden toegepast op alle kleuren die in het kleurenoverzicht van NetLogo voorkomen.

D3 Agent monitors

Agent Monitors

In het voorafgaande deel hebben we het set commando gebruikt om de kleuren van de auto’s te veranderen.
Maar even ter herinnering: in het oorspronkelijke model bevond zich een rode wagen te midden van een groep van blauwe auto’s.
Laten we eens bekijken hoe we slechts de kleur van één enkele auto kunnen veranderen.

★ Aan de slag 15

  1. Start NetLogo.
  2. Ga naar File Models Library.
  3. Open het model Traffic Basic.
  4. Klik op de setup-knop. We krijgen de rode auto weer in beeld.

  5. Werk je met Windows klik dan met de rechtermuisknop op de rode auto.

  6. Selecteer inspect turtle in het submenu voor de rode turtle.
    Er verschijnt nu een monitor voor de desbetreffende auto:

  7. Welk nummer wordt vermeld achter color?
  8. Verander dit nummer in 85 en druk op de entertoets. Welke kleur heeft de auto nu?

★ Aan de slag 16

Bij een nadere bestudering van deze turtle monitor zien we alle variabelen die horen bij de rode auto.
Onder een variabele verstaan we een plaats waarin een waarde is opgeslagen die steeds kan veranderen.
Zo heeft elke turtle een ID-nummer dat aangeduid wordt als who number.

Kijk nog eens naar de turtle monitor:

  1. Wat is van deze turtle het who number?
  2. Wat is de size (grootte) van deze turtle?
  3. Wat is de shape (vormgeving) van deze turtle?

Agent Monitors - 2

Uit de turtle monitor in dit voorbeeld is af te leiden dat het gaat om een turtle met who number 19.
De turtle heeft kleur 15 (=rood – zie kleurentabel) en wordt weergegeven als een auto (shape car).

Er zijn nog twee andere mogelijkheden om de turtle monitor te openen behalve door met je muis rechts te klikken of de Ctrl-toets te gebruiken.
Een manier is om de turtle monitor te selecteren vanuit het Tools menu, vervolgens het nummer van de turtle waar je naar wilt kijken in te typen in het veld van het who number van de turtle en dan op enter te klikken.
De andere manier is om in het Commando Centrum te typen inspect turtle 0 (of uiteraard een ander who number).
De turtle monitor sluit je door op het kruisje rechtsboven te klikken.

Nu we iets meer weten over de Agent Monitors zijn er drie mogelijkheden om de kleur van een individuele turtle te veranderen.
De eerste is om gebruik te maken van het invulveld dat bekend staat als de Agent Commander en dat zich bevindt onderaan de Agent Monitor.
Hier kunnen commando’s worden ingetypt, net zoals in het commando centrum, maar de commando’s die je hier intypt hebben alleen betrekking op deze speciale turtle.

★ Aan de slag 17

Kijk nog eens naar de turtle monitor:

  1. Typ in de Agent Commander van turtle 10 het commando set color pink.
  2. Klik daarna op de entertoets.
  3. Wat verandert er in de view van het model?
  4. Is er iets veranderd in de turtle monitor?
  5. Welk nummer staat er nu achter color?

★ Aan de slag 18

Een tweede manier om de kleur van een turtle te veranderen is om direct naar de variabele van de kleur in de turtle monitor te gaan en daar een andere waarde in te vullen.

  1. Kijk nog eens naar de turtle monitor:
    1. Open de Agent Commander van turtle 16.
    2. Selecteer de tekst rechts van color in de turtle monitor.
    3. Typ een nieuwe kleur in bijvoorbeeld: green + 2
    4. Druk daarna op de entertoets.​
  2. Open de Agent Commander van turtle 25. Welke melding krijg je?

★ Aan de slag 19

De derde manier om de kleur van een individuele turtle of patch te veranderen is om de observer te gebruiken.
Omdat de observer de hele NetLogo wereld overziet, kunnen er commando’s gegeven worden die van invloed zijn op individuele turtles maar ook op een hele groep turtles.

  1. Klik in het Command Center op observer.
  2. Type ask turtle 0 [set color yellow] en druk op de entertoets.

Agent Monitors - 3

Behalve turtle monitors bestaan er ook patch monitors.
De werking van patch monitors lijkt erg op die van de turtle monitors.
Probeer maar eens een patch monitor te maken en het te gebruiken om de kleur van een enkele patch te veranderen.
Als je probeert in de observer ask patch 0 [set pcolor blue] uit te voeren, krijg je een foutmelding:

Om een individuele turtle iets op te dragen, hebben we elke keer gebruik gemaakt van het nummer van die turtle. Patches hebben echter geen nummer. Daarom moeten we op een andere manier te werk gaan. Patches worden gerangschikt op grond van coördinaten. Er zijn twee nummers nodig om een punt in een grafiek aan te geven: een waarde op de x-as en een waarde op de y-as. De locaties van een patch worden op dezelfde manier aangegeven. Dit is al eerder besproken.

★ Aan de slag 20

  1. Open een patch monitor voor een willekeurige patch.
    De patch monitor open je door met je muis ergens in de view van het model rechts te klikken.
    In het menu dat je vervolgens ziet, kun je de optie “inspect patch” selecteren.


    De monitor laat zien dat voor de patch in ons voorbeeld geldt, dat de pxcor variabele -11 is en de pycor variabele -4 is. Om nu voor deze patch de kleur te wijzigen, maken we gebruik van deze coördinaten.
  2. Vul onderaan de patch monitor set pcolor blue in en klik vervolgens op de entertoets.
    Typen we een commando in in een turtle of patch monitor dan heeft dat alleen betrekking op de desbetreffende turtle of patch.

  3. Het is ook mogelijk om vanuit het Command Center een enkele patch te benaderen.
    Vul in het Command Center ask patch -11 -4 [set pcolor green] in en klik op de entertoets.

E Procedures

Agents en procedures

In dit onderdeel ga je stap voor stap een volledig model bouwen.
Je hebt inmiddels gezien hoe je het Command Center en de monitoren kunt gebruiken om de agents te veranderen en dingen te laten doen.
Nu begint het echte werk.
We gaan voor een nieuw model zelf procedures schrijven.
Een procedure bestaat uit een aantal regels code die tezamen een taak/opdracht uitvoeren, bijvoorbeeld turtles laten eten.
De naam voor een procedure mag jezelf bedenken.
De code voor deze procedures treffen we aan onder het tabblad code.


Je hebt al opdrachten gegeven aan verschillende types agents: patches, turtles en observer.
Patches kunnen niet bewegen en zijn gerangschikt in een tweedimensionaal vlak. Turtles bewegen over dat vlak.
De observer bekijkt wat er gebeurt en kan zowel de patches als turtles aansturen.
Alle soorten agents kunnen opdrachten of commando's geven. Ze kunnen alle drie procedures uitvoeren.
Je zult leren hoe je procedures schrijft die ervoor zorgen dat turtles eten, zich voortplanten en sterven.
Je zult ook leren hoe je monitoren, schuifbalken en grafieken maakt.
Het model dat we gaan bouwen is een simpel ecosysteem dat veel weg heeft van het voorbeeld van Wolf Sheep Predation.

Hieronder zie je hoe de interface van het model dat we gaan bouwen er uiteindelijk uit gaat zien:

 

★ Aan de slag 21

De eerste stap voor de bouw van het model is het maken van de setup-knop.

  1. Open het programma NetLogo.
  2. Klik in het menu op File Save As … en sla het bestand op onder de naam “modelE”.
  3. Klik op de knop met het label Button en selecteer in het dropdown menu het onderdeel Button.

  4. Klik op de knop met het label Add en geef in het witte gedeelte links naast de view de plek aan waar we een knop willen toevoegen.
    Er verschijnt een pop-up scherm waarin je kunt aangeven welke tekst er op de knop moet staan.
  5. Typ setup in het venster waar Commands boven staat.
  6. Klik op OK zodat het pop-up venster sluit en de rand rond de knop verdwijnt.
  7. Klik met de rechtermuisknop op de knop en kies select.
    Er verschijnt opnieuw een rand rond de knop.
    Nu kun je de geselecteerde knop verplaatsen als je dat wilt.
  8. Klik naast de knop.
    De rand verdwijnt weer.

★ Aan de slag 22

Nu heb je een knop waarmee het model de waarden kan instellen.
Omdat er nog geen serie commando's is geschreven waarmee dat gebeurt, is de tekst op de knop rood.
Als je op de knop drukt verschijnt er een scherm dat je precies vertelt waarom de tekst rood is: er moet een procedure worden geschreven met een naam die correspondeert met de tekst op de knop.

  1. Klik op het tabblad Code in het menu met de tabbladen.

  2. Typ in het tekstvlak de onderstaande code. Houd je aan de lay-out.
    to setup
          clear-all
          create-turtles 100
          ask turtles [setxy random-xcor random-ycor]     

    end

  3. Klik op het tabblad Interface en op de setup-knop.
  4. Sla nu het model op onder de zelfde naam (modelE.nlogo)

De setup-knop - 2

Je hebt nu een procedure geschreven met de naam setup.
De naam en de commando's van de procedure wordt voorafgegaan door to en afgesloten met end.

Er zijn drie commando's:

  • clear-all maakt de wereld van het model helemaal schoon, maakt de patches zwart en verwijdert eventuele turtles.
  • create-turtles 100 maakt 100 turtles en zet ze in het midden van het veld.
  • ask turtles [setxy random-xcor random-ycor] bevat eigenlijk 2 commando's: ask is een opdracht van de observer om de turtles iets te laten doen. Wat de turtles moeten doen, staat tussen de vierkante haken.
    Ze moeten een random plek innemen in het vlak.
    Een random plek is een patch met een random x-coördinaat en een random y-coördinaat.
    Het random getal voor de coördinaten wordt gemaakt door een reporter.
    De reporter random-xcor rapporteert de random waarde voor de x-coördinaat van de turtle (en houdt rekening met de toegestane waarden zodat de turtle niet buiten het vlak kan lopen).
    De random-ycor doet dat voor de y-coördinaat. Je zult later in deze module beter begrijpen wat een reporter is.

Wat het effect is van de commando's zie je als je op de setup-knop drukt.
Druk een paar keer op de knop en je zult zien dat de startpositie van de patches elke keer anders is.

Je hebt waarschijnlijk al geraden dat nu de procedure voor de go-knop aan de beurt is.

De go-knop

In Netlogo is het bestand modelE.nlogo geopend.
Nadat we de setup-knop hebben gemaakt en code voor deze knop hebben toegevoegd, is de volgende stap het maken en toevoegen van code voor de go-knop.

★ Aan de slag 23

  1. Voeg aan het model een nieuwe knop toe.
    Typ go in plaats van setup bij Commands.
  2. Klik de optie Forever aan.


    Door het aanklikken van de optie Forever zorg je ervoor dat de commando's uitgevoerd worden tot de knop nog een keer wordt ingedrukt.
    De go-knop heeft 2 pijlen die de setup-knop niet heeft.
    De tekst op de knop is rood omdat er nog geen procedure voor deze knop is geschreven.
  3. Klik op OK.
    Het pop-up venster wordt afgesloten.
    De rand rond de go-knop verdwijnt.
    In de interface van ons model zien we nu twee knoppen.
  4. Selecteer het tabblad Code.
  5. Voeg aan de reeds aanwezige code de onderstaande code toe:
    to go

          move-turtles
    end



    Je zet de tekst dus onder en niet in plaats van de eerste procedure.
    Er zijn nu 2 procedures geschreven, maar er lijkt iets niet te kloppen:

    Kennelijk is move-turtles geen kant-en-klaar commando zoals clear-all, maar een commando dat je zelf moet schrijven.

  6. Voeg de code voor de procedure move-turtles toe.

    to move-turtles

          ask turtles [
                right random 360
                forward 1
                ]
    end

     

  7. Laat het model een paar keer lopen.
    Je zult zien dat een turtle die aan de rechterkant verdwijnt, aan de linkerkant weer opduikt.

De go-knop - 2

  • ask turtles [] is een opdracht van de observer om de turtles de commando’s tussen de vierkante haken te laten uitvoeren.
  • right random 360 maakt gebruik van een reporter.
    De reporter random genereert een getal tussen de 0 en de 360 (inclusief 0, maar exclusief 360)
    De turtle draait het aantal graden dat overeenkomt met dat random getal naar rechts.
  • forward 1 laat de turtles 1 stap naar voren zetten.

Je kunt experimenteren door de code te veranderen, en de turtles linksom te laten draaien in plaats van rechtsom, of een kleinere draai te laten maken.
Je hebt al gezien hoe je voor de turtles een bepaalde kleur kunt aangeven.
Dit kun je nog steeds doen in het Command Center.

Patches en variabelen

Nu heb je 100 turtles die rondlopen zonder zich iets aan te trekken van hun omgeving.
Die omgeving is nog niet interessant.
Om te beginnen gaan we de omgeving maar eens aankleden.

★ Aan de slag 24

In NetLogo is het bestand modelE.nlogo geopend.

  1. Verander de code die bij de setup-knop hoort:
    to setup
          clear-all
          setup-patches
          setup-turtles
    end
  2. Er zijn twee nieuwe procedures bijgekomen.
    De procedure to setup-patches en de procedure to setup-turtles.
    Daarvan moet de code nog geschreven worden.

    Voeg de onderstaande code aan het model toe.

    to setup-patches
          ask patches [set pcolor green]

    end

    Met deze code worden de patches groen gekleurd.
    De variabele pcolor verwijst naar de kleur van de patches.
    De variabele die bij de turtles hoort heet color.

  3. De code om de turtles klaar te zetten, wordt in de tweede procedure gezet.
    Het is dezelfde code die eerst in de setup procedure stond.

    to setup-turtles

          create-turtles 100
          ask turtles [setxy random-xcor random-ycor]

    end

     

  4. Ga terug naar het tabblad Interface en bekijk het resultaat van de nieuwe code door op de setup-knop te klikken.

Turtles en variabelen

De turtles hebben nu wel een betere omgeving, maar ze doen zelf niet veel anders dan rondrennen.
Er is (nog) geen interactie met de omgeving. Ook daar gaan we verandering in aanbrengen.
Het is de bedoeling dat de turtles gras (de groene patches) gaan eten, zich voortplanten en uiteindelijk sterven.
Het gras zal zich herstellen.

De levenscyclus van turtles (de voortplanting en het sterven) moet kunnen worden beïnvloed.
Daarom maken we een nieuwe variabele voor de turtle waarin we bijhouden hoeveel energie hij heeft.
De turtles hebben al een paar ingebouwde variabelen, zoals color.
Hoe die variabelen zijn gemaakt zien we niet terug in de code.
Nieuwe variabelen voor de turtles maak je aan met turtles-own.
Noem je de variabele energy dan zet je bovenin de code

turtles-own[energy]

Daarna moet nog een procedure worden geschreven om gras te eten.

★ Aan de slag 25

In NetLogo is het bestand modelE.nlogo geopend.

  1. Declarereer de variabele turtles-own [energy] bovenin de code.
  2. Herschrijf de procedure die bij de go knop hoort:

    to go
          move-turtles
          eat-grass
    end

  3. Schrijf de code voor de procedure eat-grass.

    to eat-grass
          ask turtles [
                if pcolor = green [
                set pcolor black
                set energy (energy + 10)
                ]
          ]
    end

Turtles en variabelen - 2

Nu zie je voor het eerst het if-commando.
Je kent dat commando ongetwijfeld van andere programmeeromgevingen.
De syntax van het commando is misschien iets anders dan je gewend bent.
Je ziet na de if geen ronde haken rond pcolor = green en je ziet vierkante haken rond de commando's staan die moeten worden uitgevoerd als pcolor = green true oplevert.

Niettemin zul je begrijpen wat er gebeurt: de turtles worden zwart als ze op een groene patch komen, en hun energiepeil wordt met 10 eenheden verhoogd.
Die energie moeten ze ook verbruiken, anders zullen ze nooit sterven.
 

★ Aan de slag 26

  1. Verander de code voor to move-turtles:

    to move-turtles
          ask turtles [
          right random 360
          forward 1
          set energy (energy - 1)
          ]
    end

    Bij elke stap zullen de turtles nu één eenheid energie kwijtraken (of verbruiken).
  2. Ga terug naar de interface van het model en bekijk het effect door eerst de setup-knop in te drukken en daarna de go-knop.
    Je zult zien dat de patches zwart worden.
    Je kunt echter niet zien dat de turtles energie verliezen.
    Daarvoor moeten we een monitor maken.

Monitoren

Via het menu gaan we twee monitoren maken.
Je doet dat op dezelfde manier als bij een knop, maar je kiest nu een ander icoon:

★ Aan de slag 27

  1. Zet een monitor ergens in het vlak naast de view.
  2. Typ in het venster onder reporter de code count turtles.
    Met het commando count worden alle turtles geteld.
  3. Klik op OK.
  4. Zet een tweede monitor naast de eerste.
  5. Typ in het venster onder Reporter de code count patches with [pcolor = green].
    Deze tekst verschijnt nu ook op de monitor zelf.
    Als je een andere tekst wilt, typ je die achter de tekst Display Name.
  6. Verander de tekst achter Display Name in “count green patches”.

  7. Klik op OK.
  8. Bekijk het effect door eerst de setup-knop in te drukken en daarna de go-knop.
  9. Sla de wijzigingen in het model op.

Switches en labels

In de monitoren is nu zichtbaar hoeveel turtles er zijn.
Je kunt nog niet zien hoeveel energie ze hebben. Daarvoor maken we een schakelaar (switch).
Als de schakelaar aan is, wordt het energiepeil zichtbaar, als de schakelaar uit is, zie je niets.

★ Aan de slag 28

  1. Plaats een switch bij de monitoren.
    Ook die knop vind je in het dropdown menu.
  2. Typ show-energy? in het venster dat verschijnt.
    Denk om het vraagteken!
  3. Herschrijf de procedure voor to eat-grass:

    to eat-grass
          ask turtles [if pcolor = green
                [set pcolor black set energy (energy + 10)]
                ifelse show-energy?
                [set label energy ]
                [set label ""]
          ]
    end


    Je ziet nu een ifelse commando met een syntax die je waarschijnlijk onbekend voorkomt.
    Meestal zijn de commando's voor de if en de else van elkaar gescheiden, en worden ze voorafgegaan door de woorden if en else:

    if {}
    else {}


    Hier zie je dat ifelse aan elkaar wordt geschreven, en dat de commando's tussen vierkante haken staan.
    Het commando dat hoort bij de if staat boven dat van de else.
    Voor de turtles betekent dat dat alleen als de schakelaar show-energy? aanstaat, de waarde van de variabele energy als label zichtbaar is.
    Als de schakelaar uitstaat, heeft het label als enige tekst een lege string ("").
    Dat label verschijnt op de turtle zelf, als een soort rugnummer.

  4. Zet de schakelaar show-energy?
    Aan en uit en bekijk het effect.
  5. Sla alle aangebrachte wijzigingen in het model op.

Nog meer procedures

De turtles kunnen nu eten waardoor ze energie krijgen, die ze weer verbruiken door rond te lopen.
Er is echter nog geen code om hen zich te laten voorplanten of te laten sterven.

Bovendien kan het gras zich nog niet herstellen.
Daarvoor moeten er drie nieuwe procedures komen, die worden aangeroepen in de go procedure.

★ Aan de slag 29

  1. Herschrijf de procedure die bij de go-knop hoort:

         to go
               move-turtles
               eat-grass
               reproduce
               check-death
               regrow-grass
         end

     

  2. Voeg de code toe voor de procedures reproduce, check-death en regrow-grass:

         to reproduce

               ask turtles[

               if energy > 50 [

               set energy (energy - 50)

               hatch 1 [set energy 50]

                     ]

               ]

          end

     

          to check-death

               ask turtles [

               if energy <= 0 [die]

               ]

          end

     

          to regrow-grass

               ask patches [

               if random 100 < 3 [set pcolor green]

               ]

          end

     

★ Aan de slag 30

Wat echt nieuw is in deze code is het hatch commando.
Dit commando wordt gevolgd door een getal en één of meer commando's in vierkante haken.
Het laat een turtle een aantal (zoveel als het nieuwe getal) nieuwe turtles maken die er net zo uit zien als henzelf en die bovendien meteen de commando’s tussen de haken uitvoeren.
In het uitgewerkte voorbeeld voert elke turtle die een energy-level van boven de 50 heeft dit commando uit en maakt dan 1 jonge nieuwe turtle die meteen zijn energiepeil op 50 zet.
Daarbij had je ook bijvoorbeeld de kleur kunnen veranderen van de nieuw geboren turtle(s).
Dat commando had dan binnen dezelfde vierkante haken moeten staan.

Je ziet nog een ander ingebouwd commando: die.
Dat behoeft geen uitleg.

Het gras zal niet altijd aangroeien (patch die groen wordt), maar alleen als een random getal kleiner is dan 3.
Dat is het geval bij 0, 1, en 2, dus bij 3 getallen van de 100.
In ongeveer 3% van de gevallen zal het gras zich herstellen en de patch weer groen worden.

  1. Bekijk het effect door eerst de setup-knop in te drukken en daarna de go-knop.
  2. Sla alle wijzigingen op

Plots (grafieken)

Er is nog een manier om te zien wat er gebeurt met de aantallen turtles en patches.
Die aantallen kunnen worden uitgezet in een grafiek.
In het programma wordt een grafiek een plot genoemd.
Om de grafieken te tekenen wordt een procedure do-plots geschreven.

★ Aan de slag 31

  1. Voeg de procedure do-plots toe aan de code voor de setup-knop en de code van de go-knop.
    Dat doe je doe de regel “do-plots” zowel in de code van de setup-kop als in de code van de go-knop voor end te plaatsen.
    to setup

          clear-all

          setup-patches

          setup-turtles

          do-plots

    end

     

    to go

          move-turtles

          eat-grass

          reproduce

          check-death

          regrow-grass

          do-plots

    end
  2. Voeg nu de procedure toe:

    to do-plots

              set-current-plot "Totals"

              set-current-plot-pen "turtles"

              plot count turtles

              set-current-plot-pen "grass"

              plot count patches with [pcolor = green]

    end

     

★ Aan de slag 32

Voordat de grafieken worden getekend, wordt de titel van de grafiek aangegeven: Totals.
Daarna worden de pennen (die de lijnen trekken) benoemd, en wordt opdracht gegeven om het resultaat van een count te tekenen.

  1. Plaats een plot in het witte gedeelte naast de view.
    Dat doe je door in het dropdown menu een plot te kiezen en die vervolgens toe te voegen aan het model.
  2. Na het toevoegen van een plot, verschijnt er een dialoogvenster.
    Vul hier voor de waarde Name, X axis label en Y axis label de onderstaande waarden in:

    Name: Totals
    X axis label: time
    Y axis label: totals

    Om de pennen de goede kleur en naam te geven, kun je de default pen aanpassen en een nieuwe pen toevoegen met Add Pen.
    In het dialoogvenster vul je onder Pen Name achtereenvolgens turtles en grass in en je selecteert een kleur.

    Vul bij Pen update commands voor de turtles plot count turtles in en voor grass plot count patches with [pcolor = green].
    Klik daarna op OK.



Globale variabelen

Om de grafieken van twee simulaties met elkaar te kunnen vergelijken is het handig om de looptijd van de simulatie even lang te laten duren.
Daarvoor dient de ingebouwde variabele tick.
Er bestaat ook een procedure tick.
Die zorgt ervoor dat de teller met 1 verhoogd wordt.

★ Aan de slag 33

  1. Pas de code van de setup-knop aan:

    to setup
          clear-all
          setup-patches
          setup-turtles
          reset-ticks

    end

     

  2. Pas de code aan van de go-knop:

    to go
          if ticks > 500 [stop]
          move-turtles
          eat-grass
          reproduce
          check-death
          regrow-grass
          do-plots
          tick
    end

     

★ Aan de slag 34

In het model wordt nu altijd gestart met 100 turtles.
Bovendien worden alle turtles geboren met een vast energiepeil van 0.
Het zou leuker zijn als je die beginwaarden kon instellen.
Daarvoor gebruiken we een schuifbalk. De waarde die we instellen met behulp van de schuifknop geven we een naam.
De variabele die we zo maken is een global variabele.
De naam gebruiken we in de code zonder dat de variabele aan het begin van de code hoeft te worden gedeclareerd.

  1. Plaats een slider in het witte gedeelte naast de view.
    We gaan deze slider gebruiken voor het aangeven van het aantal turtles waarmee we het model willen laten starten.
    Je vindt de schuifknop in het menu als Slider.

  2. Geef de globale variabele de naam number en stel het maximum aantal turtles op 100 in.

  3. Pas de code van to set-up turtles aan zodat er niet altijd 100 turtles zijn aan het begin, maar net zoveel als de schuifbalk aangeeft:

    to setup-turtles
          create-turtles number
          ask turtles [setxy random-xcor random-ycor]
    end

     

  4. Maak een schuifbalk die instelt met welk energiepeil turtles worden geboren, en geef de variabele de naam birth-energy.

  5. Pas de procedure reproduce zo aan dat

    to reproduce
       ask turtles[
             if energy > birth-energy [
             set energy (energy - birthenergy)
             hatch 1 [set energy birth-energy]
             ]
       ]
    end

     

  6. Maak een schuifknop voor de energie die de turtles krijgen door het eten van gras en geef de variabele de naam energy-from-grass.

  7. Pas de code van eat-grass zo aan dat het energiepeil stijgt met de ingestelde waarde:

        to eat-grass
        ask turtles [
              if pcolor = green [
                    set pcolor black
                    set energy (energy + energy-fromgrass)
              ]
              ifelse show-energy?
                    [set label energy ]
                    [set label ""]
              ]

    end

     

F Modelleren in AI

Wat is AI?

De afkorting AI staat voor Artificial (= kunstmatige) Intelligence.
Doel van het onderzoek is het nabootsen van menselijke intelligentie.
Nu rijzen meteen nieuwe vragen:

  • Wanneer kun je zeggen dat een computer net zo intelligent is als een mens?
  • Wat is menselijke intelligentie?

In verband met de eerste vraag duikt meteen de naam Turing op.
In 1950 verscheen Turing's artikel Computing Machinery and Intelligence dat begint met de zin:

‘ I propose to consider the question, "Can machines think?" ’ .
Hij stelde voor een machine intelligent te noemen, als de machine in niets te onderscheiden zou zijn van een menselijk brein. Daartoe bedacht hij de volgende test.
Een man wordt in een kamer gezet en een vrouw in een andere kamer.
Door een vraag- en antwoordspel moet een ondervrager te weten komen in welke kamer de man en in welke kamer de vrouw zit.
De vragen en antwoorden gaan via een terminal.
De man en de vrouw kunnen de ondervrager misleiden, maar hoeven dit niet te doen.
Stel nu, zei Turing, dat we de man of de vrouw vervangen door een machine die in staat is antwoorden te geven op de terminal.
Kan zo'n machine de ondervrager dan op dezelfde manier misleiden als wanneer er een mens in de kamer zou zitten?
Deze vraag, aldus Turing, vervangt de oorspronkelijke vraag: “kunnen machines denken?” .

Turing schreef dit artikel in een tijd dat er nog nauwelijks computers waren.
Ergens in het artikel zegt hij “There are already a number of digital computers in working order, and it may be asked: "Why not try the experiment straight away?”.
Turing vertaalde intelligentie in gedrag.
Voorbeelden van intelligent gedrag zijn waarnemen, redeneren, leren, besluiten nemen en communiceren.

De test die Turing in de jaren vijftig bedacht, ging later de Turing Test heten.
Turing voorspelde dat nog vóór het jaar 2000 computers zouden slagen voor deze test. Dat is echter niet gebeurd. Ondanks de enorme vooruitgang die er is geboekt op het gebied van hard- en software.
De Turing Test richt zich op het simuleren van menselijke intelligentie. Dat blijkt nog niet zo gemakkelijk te zijn. Tegenwoordig begrijpen we veel beter wat een computer wel, maar ook wat een computer niet kan.

Bekijk maar eens de volgende video: Can a computer pass for a human?

 

 

Het doel van AI

MRI-scan

Het doel van AI is tweeledig:

  • Het ontwikkelen van machines die taken kunnen overnemen van mensen (en dan niet alleen puur mechanisch zoals het spuiten van een auto, maar ook het stellen van een medische diagnose).
  • Het begrijpen van menselijk gedrag: als menselijk gedrag kan worden nagebootstkunnen we misschien een kijkje nemen in de black box van onze hersenen.

Machines

De machines die intelligent gedrag vertonen worden agents genoemd.
Ze bestaan uit hardware en software, en moeten kunnen waarnemen door middel van sensoren, redeneren op basis van de regels waarmee ze geprogrammeerd zijn, en actie ondernemen door middel van hun actoren.

★ Aan de slag 35

Bedenk een aantal voorbeelden van een agent/toepassing van AI.
Past een schaakcomputer ook in dit rijtje?

G Modelleren en simulaties

Wat is een model?

Een model is een vereenvoudigde weergave van de werkelijkheid.
Speciaal voor deze module is een model gemaakt van een brand in een schoolgebouw.
Er zijn twee versies van een school voor dit model; de twee versies verschillen in het aantal deuren.
De bitmap school-deuren biedt minder ontsnappingsmogelijkheden dan de versie school-deuren-escape.

★ Aan de slag 36

  1. Start het model van BRAND.
    Beschrijf voor een aantal settings van de parameters het uiteindelijke resultaat.
    Verander het aantal scholieren, de snelheid van het vuur, de aanwezigheid van alarmbellen, de verschillende aantallen deuren in de 2 verschillende versies.
  2. Geef aan in welk opzicht het niet lijkt op je eigen schoolgebouw.

Wat is een model? - 2

Je zult wel inzien dat een model nooit de werkelijkheid echt kan weergeven.
Dan is het namelijk geen model meer. Waarom heb je dan toch een model nodig?
Omdat je situaties wilt testen die je in het normale leven niet kunt testen.
Je kunt in een echte test geen leerlingen laten verbranden; zelfs in de simulatie is het al gruwelijk om te zien dat leerlingen niet kunnen ontsnappen.

Wat is een goed model?

Je hebt het model BRAND getest.
Zou je op basis van deze test de directie kunnen adviseren over het vereiste aantal deuren of alarmbellen?
Waarschijnlijk niet, al was het alleen maar omdat het model in veel opzichten te onrealistisch is.
In welk opzicht lijkt het model niet op je eigen schoolgebouw, en hoe erg is dit?

Stel je zelf de volgende 7 vragen:

  1. Is het model relevant? Kun je hypotheses testen die ook gelden voor de echte wereld?
    Als in jouw schoolgebouw de vloeren een andere kleur hebben dan in het model, doet dat er niet zo veel toe.
    Maar hoe zit het met andere verschillen?
  2. Kent het model genoeg niveaus? Is er genoeg verschil tussen de verschillende entiteiten?
    Er zijn gangen, klassen, deuren en lokalen, en personen.
    Zou je binnen die entiteiten meer verschil willen aanbrengen?
  3. Is het model algemeen genoeg of geldt het alleen voor jouw school en voor weinig anderen?
    Het kan zijn dat jouw school inderdaad maar één verdieping heeft. Voor hoeveel scholen zou dat gelden?
  4. Heeft het model de juiste mate van abstractie?
    Toegegeven, er is misschien te weinig detail in het schoolgebouw.
    Aan de andere kant moet je ook uitkijken dat je niet te veel dingen toevoegt die weinig uitmaken voor hetgeen je wilt testen. Een schilderij aan de muur is niet het eerste waar je in dit kader aan denkt.
  5. Geeft het model de onderliggende mechanismes wel goed weer?
    Als je goed kijkt zie je dat de mensen in het schoolmodel vaak stil staan.
    Is dat een mechanisme dat je ook bij een echte brand zou zien?
  6. Doet het model wel wat het moet doen in de tijd die ongeveer nodig is en met het gewenste resultaat? Presteert het net zo veel als de echte wereld?
    Verspreidt het vuur zich bijvoorbeeld met een realistische snelheid?
    Heeft het alarm het goede bereik binnen de school?
  7. Klopt het medium wel?
    Als je in het schoolgebouw sproei-installaties installeert, en die spuiten de boel echt nat, zullen de vloeren glad worden.
    Kun je dat ook in je model verwerken?

Je zult concluderen dat het model van BRAND weinig realistisch is.
Er is echter een omgekeerd verband tussen de complexiteit van het model en de mate van abstractie.

Een heel abstract en simpel model is weinig realistisch, maar kan nog vrij eenvoudig worden geïmplementeerd.
Een heel realistisch model is vrijwel niet te maken, en is bovendien geen model meer.
Tussen deze twee uitersten moet een aanvaardbare tussenweg worden gevonden.

Verschillende soorten modellen

(Menselijk) gedrag is heel ingewikkeld. Kun je dat zomaar in je model stoppen?
En krijg je dan een antwoord dat algemeen geldend is?

In het voorbeeld Party werd je gevraagd om de waarde voor de parameter tolerance te geven waarbij elk groepje uit mannen en vrouwen zou bestaan.
Die waarde kun je niet berekenen maar alleen vaststellen door trial and error.
De interface van het model stelt je in staat een bepaalde waarde in te geven.
Op basis daarvan kun je het aantal gemengde groepen opschrijven.
In een vak als statistiek en methodologie leer je hoe vaak en met hoeveel feestgangers je zo'n test moet uitvoeren om een resultaat te krijgen dat algemeen geldend is.
Zo'n model noem je niet-deterministisch.

In het voorbeeld van wolf sheep predation heb je de parameters ook veranderd.
Je hebt de waarden ingesteld die het aantal schapen en wolven aangaven, als ook de snelheid waarmee ze zich voortplantten.
Daarbij heb je ook ingesteld hoe snel het gras weer aangroeide.
Hier zou je wel berekeningen kunnen uitvoeren.
Je zou in een formule kunnen weergeven hoe de aantal schapen, wolven en de eenheden gras zich zouden verhouden voor een biologisch evenwicht.
In het model kun je zien wat een goede kunstmest zou doen voor het aantal wolven: ze zouden niet uitsterven als het gras 3 x zo snel zou groeien.
Het aantal eenheden gras beïnvloedt het aantal schapen, en het aantal schapen beïnvloedt het aantal wolven dat in leven blijft.

Om de juiste verhouding te vinden hoef je nu niet een groot aantal schapen en wolven te offeren in een experiment.
In plaats daarvan kun je op basis van een aantal waarnemingen in een echte situatie experimenteren met mogelijke uitkomsten op een veel grotere schaal.
Als er een voorspelbaar effect optreedt tussen de verschillende parameters noem je het model deterministisch.

Feitelijke wereldkennis

Stel je een agent voor die zich kan voortbewegen door een aantal kamers en gangen.
Die agent moet een deur herkennen om van de ene ruimte naar de andere te gaan.
Hoe herkent die agent een deur?
Daarvoor heeft hij misschien druksensoren. De informatie van die sensoren kan hij gebruiken als hij eerst heel vaak tegen de wand rond door de deur stoot en bij iedere keer een kleine draai maakt.
Zo zal hij uiteindelijk wel de opening vinden.
Met sensoren die een visuele perceptie simuleren kan de agent de deur herkennen zoals een mens dat zou doen.

Een mens herkent een deur aan een aantal karakteristieken.
De meeste deuren zijn langwerpig en hebben rechte hoeken.
Op die manier zou een agent ook een deur kunnen herkennen. Maar ook als een deur heel scheef staat, zal een mens het als een deur herkennen.
Een mens herkent een deur door de meetbare eigenschappen van de deur in combinatie met zijn kennis van de wereld.
Die kennis van de wereld beïnvloedt zijn waarneming.
Dat kan positief zijn (een scheve deur wordt toch herkend) maar het kan ook negatief zijn zoals in het volgende voorbeeld: twee exact dezelfde afstanden worden als verschillend gezien.

Als iemand die in de westerse wereld gevraagd wordt welke van de verticale lijnen het langst is, zal het antwoord zijn: de rechter.
Het antwoord wordt beïnvloed door de lijnen die vanuit de punten lopen.
Iemand die in een wereld is opgegroeid waarin minder strakke hoeken voorkomen (bijvoorbeeld in een inheemse bevolkingsgroep in Zuid-Afrika) zal zien dat beide verticale lijnen even lang zijn.
Dit wordt de illusie van Müller-Leyer genoemd.

Een agent ziet de wereld anders dan een mens.
Als in de regels is opgenomen dat een deur te herkennen is door een aantal lijnen die loodrecht op elkaar staan, met een bepaalde verhouding tussen de horizontale lijn(en) en de verticale lijnen, herkent de agent een deur. Dan moet een deur wel kaarsrecht staan.

Bij een agent moet dat gecodeerd worden. In een domme omgeving wordt de agent zo geprogrammeerd dat hij de deur kan herkennen.
In een slimme omgeving draagt de omgeving de kennis in zich en kan de agent dus ‘dommer’ zijn.

De robot in de afbeelding moet zich bewegen in een domme omgeving.
De robot zelf moet echter heel slim worden geprogrammeerd.
Hij heeft 2 druksensoren aan de achterkant en een lichtsensor aan de voorkant.
Als je wilt dat de robot op basis van de gegevens van de sensoren een bepaalde route volgt en obstakels ontwijkt, moet het programma van de robot daarvoor zorgen.
Als je niet wilt dat de robot in cirkeltjes ronddraait, is het best een lastig programma.

In het voorbeeld van de school zijn de leerlingen en de onderdelen van de school (de patches) de agenten.
De sensoren en de actuatoren zijn gecodeerd in het programma.
Op basis van de programmacode weet een leerling waar hij is, en hoe hij een deur kan herkennen.

 

★ Aan de slag 37

Beschrijf de feitelijke wereldkennis van het BRAND model.
Kijk in de code hoe de kennis over deuren is vastgelegd.
Is BRAND een domme of een slimme omgeving?

De agent herkent een deur omdat de deur van zichzelf weet dat hij een deur is, en dat kan communiceren aan de agent.
De kennis die een leerling nodig heeft om een deur te herkennen, wordt feitelijke kennis genoemd.

Functionele wereldkennis

Het herkennen van een deur is niet genoeg.
Behalve het herkennen van een deur moet een agent ook weten waar een deur toe dient.
Door een deur kun je ontsnappen. Uit een kopje kun je drinken. Als je een kopje laat vallen, gaat het stuk.
Dit soort kennis wordt functionele kennis genoemd.
Die kennis van de wereld leert een mens simpelweg door op te groeien in die wereld.

★ Aan de slag 38

  1. Kijk naar een filmpje op YouTube over het gedrag van vogels.
    YouTube - Falcon Attack: Peregrine Divebombs Flock of Starlings


    Beschrijf wat je hebt gezien.
  2. Kijk hier voor simulaties.

Gedrag en emotie

Bij het beschrijven van het gedrag van de vogels heb je waarschijnlijk een menselijke interpretatie gebruikt.
Je beschrijft hun gedrag in menselijk termen, zoiets als: De vogels volgen een leider en houden netjes afstand van de andere vogels, zonder ze kwijt te raken.

Je gebruikt termen die behoren tot de functionele wereldkennis van mensen.
Het behoort tot onze functionele wereldkennis dat het verstandig is om in bepaalde situaties een leider te volgen, en elkaar niet uit het oog te verliezen.
Het is heel moeilijk om niet in menselijke termen te denken bij het coderen van gedrag.
Bovendien maakt het gebruik van betekenisvolle namen voor variabelen de code ook een stuk leesbaarder.

Bekijk eens deze regels code:

ask patches with [x = y and z != a]
[
      set x z
      set z c
      ask array_1 with [z = b]
      [     set z x
            set x y
      ]
]

 

Deze code wordt een stuk leesbaarder als je in plaats van x, y en z (en andere soortgelijke namen) namen voor variabelen kiest die hun functie weergeeft:

ask patches with [pcolor = orange and alarm != "yes"]
[
      set pcolor alarm
      set alarm "gone-off"
      ask neighbors with [alarm = "no"]
      [
            set alarm pcolor
            set pcolor orange
      ]
]

 

Mensen denken vaak dat het gedrag van dieren erg ingewikkeld is.
Simulatiemodellen van het vluchtgedrag van vogels laten echter zien dat er maar een drie regels zijn die dat gedrag bepalen.
Vogels blijven bij elkaar in de buurt, komen niet te dicht bij elkaar, en houden de algemene richting van de groep aan.

Als gedrag op deze manier wordt verwoord is de stap tot het programmeren van agents veel kleiner.

★ Aan de slag 39

Kijk hoe in de code van BRAND de leerlingen naar buiten lopen.
Bekijk met name de procedure progress-students en set-distance-door.

Enige aanwijzingen vind je hieronder.
Wat is de functionele kennis en wat is de feitelijke kennis die de leerlingen gebruiken om te ontsnappen?

Je ziet in de code van de set-up-patches procedure dat alle patches een escape-distance krijgen van 1000.
Hieronder zie je een stukje van het model waar alleen de patches van de school met escape-distance van 1000 die waarde ook tonen.
Je zie dat de deuren een lagere waarde hebben (anders zou je het getal 1000 hebben gezien).
Je ziet ook dat eigenlijk alleen de muren de waarde 1000 hebben.

Binnen de muren, en op de deuren, zijn er andere waarden.
Maken we die zichtbaar dan wordt de hele ondergrond zwart en onleesbaar.
We kunnen de escape-distance echter wel laten ziet op de leerlingen.
Dat plaatje staat hieronder.


Je ziet dat een leerling vlak bij de deur naar buiten een escape-distance heeft van 6.
Een leerling in een lokaal moet echter eerst door de deur naar de gang en heeft een veel hogere waarde voor escape-distance.

 

Deterministisch / niet-deterministisch

Het gedrag van agenten kan simpel zijn (waarmee nog niet is gezegd dat het ook simpel te programmeren is.)
Maar als er onvoorziene omstandigheden zijn, moet er met heel veel dingen worden rekening gehouden in de code of in het ontwerp van de agent.

Stel dat je een agent door de woestijn wilt laten rijden.
Je kunt de afstand dan meten aan het aantal omwentelingen van de wielen.
Stel dat de wielen slippen op een gladde steen: weet je dan nog waar de agent zich bevindt?
Misschien wel als je een GPS systeem inbouwt, maar niet meer op basis van de wielomwentelingen.
Het besturen van een auto in een echte wereld is een stuk lastiger dan het laten ontsnappen van een agent uit een schoolgebouw in een gesimuleerde omgeving.

De complexiteit van het model is mede afhankelijk van de vraag of de acties al dan niet voorspeld kunnen worden uit andere acties (deterministisch zijn).

Menselijk gedrag is niet altijd deterministisch. Zeker in paniek kan de ene mens heel anders reageren dan de ander.
Handelen is dan misschien wel gericht op een doel, maar de wil om te ontsnappen kan ook tot gevolg hebben dat iemand in paniek alle kanten op rent.

★ Aan de slag 40

Bedenk in welk opzicht de leerlingen minder voorspelbaar kunnen reageren dan is gecodeerd in BRAND.
Bedenk ook hoe je dat in een algoritme zou gieten.
Je kunt dit gedrag ook zelf programmeren als laatste onderdeel van deze module.

Conclusie

Door het voorbeeld van BRAND heb je inzicht gekregen in een aantal aspecten van modelleren:

  • Modelleren heeft verschillende doelen: het simuleren van menselijk handelen uit utilitaire overwegingen, en om inzicht krijgen in menselijk gedrag Een model kan de werkelijkheid niet volledig nabootsen, maar moet worden beoordeeld op een aantal karakteristieken.
  • Om agenten te programmeren moet je hen feitelijke en functionele kennis bijbrengen.
  • Een deterministisch model is eenvoudiger te ontwerpen dan een niet-deterministisch model.
  • In een niet-deterministisch model zul je een groot aantal uitkomsten met elkaar moeten vergelijken om inzicht te krijgen in het effect van de variabelen.
    Een agent die zich staande moet houden in een domme omgeving moet zelf heel slim zijn; een agent in een slimme omgeving mag zelf wat dommer zijn. Een model kan nooit de hele werkelijkheid weergeven. Het model blijft een abstractie. Als het model de werkelijkheid optimaal weergeeft, is het geen model meer. Hoe realistischer het model, hoe complexer het ontwerp. Als het model vrij abstract blijft en relatief eenvoudig te programmeren is, benadert het model de werkelijkheid minder goed.

 

Toets

In de volgende toets wordt getoetst wat je inmiddels zou moeten weten over het onderwerp Artificial Intelligence.

Artificial Intelligence

H Code schrijven

Setup en go

Tot slot ga je zelf een volledig model in NetLogo bouwen zonder dat alle stappen worden voorgedaan.
De opdracht is verdeeld in een aantal tussenstappen die achtereenvolgens in dit onderdeel worden besproken.
De code is voor een deel gebaseerd op het voorbeeld uit onderdeel E (bestand modelE.nlogo).
Je zult echter ook leren om met de User Guide om te gaan.

In het voorbeeldmodel uit onderdeel E hebben we de code voor de setup-knop en de go-knop gegeven.
In de code van deze setup-knop wordt gebruik gemaakt van de procedures setup-patches en setup-turtles.
In de code van de go-knop wordt de procedure move-turtles aangeroepen.

code setup-knop:

to setup

  clear-all

  setup-patches

  setup-turtles

  do-plots

  reset-ticks

end

 

code van de procedures to setup-patches en to setup-turtles:

to setup-patches

      ask patches [set pcolor green]

end

 

to setup-turtles

      create-turtles number

      ask turtles [setxy random-xcor random-ycor]

end

 

code go-knop:

to go

  if ticks > 500 [ stop]

  move-turtles

  eat-grass

  reproduce

  check-death

  regrow-grass

  do-plots

  tick

end

 

code van de procedure to move-turtles:

to move-turtles

  ask turtles [

  right random 360

  forward 1

  set energy (energy - 1)

  ]

end

 

★ Aan de slag 41

Bekijk de onderstaande afbeelding van de interface van het model dat je nu gaat bouwen:

  1. Open in NetLogo een nieuw bestand en sla dit op onder de naam modelH.nlogo.
  2. Ontwerp de interface van dit model.
    Er wordt gebruik gemaakt van twee knoppen (setup-knop en de go-knop), een monitor om het aantal turtles te tellen en een schuifbalk om het aantal turtles in te stellen.
  3. Neem de voorlopige code voor de setup-knop over:
    to setup
          clear-all
          setup-patches
          setup-turtles
          reset-ticks
    end
  4. Neem de voorlopige code voor de go-knop over:

    to go
          move-turtles
          tick
    end

     

 

★ Aan de slag 42

  1. In dit model hebben de turtles een ander uiterlijk gekregen.
    Bekijk daarvoor de User Manual van NetLogo. Deze manual vind je in NetLogo onder het menu-item Help.
    Onder Shapes Editor tref je een aantal standaard vormen aan waarvan ook de naam is gegeven.
    Elke turtle heeft een variabele shape die kan worden ingesteld met set.
    Schrijf nu de code voor to setup-turtles. Geef de turtles een willekeurige plek en stel de shape in op person.
    Let op: in de interface van het model wordt in een schuifbalk een globale variabele number gedefinieerd.
    Er worden evenveel turtles gemaakt als de schuifbalk aangeeft.
  2. Zorg ervoor dat de poppetjes gaan bewegen als op de go-knop wordt geklikt, maar alleen 1 op de 5.
  3. Zorg er bovendien voor dat ze af en toe stil blijven staan.
    Kijk voor de uitwerking van deze opdracht ook nog eens naar de code van model BRAND.
  4. Laat de patches onder de poppetjes wit worden als ze erover heen lopen.
    Een poppetje kan de patch waarop hij zich bevindt, vinden met patch-here.
    Doe dat in de procedure trace. De turtle draait een willekeurige richting uit en gaat één patch vooruit.
    Als de kleur van de patch waarop de turtle dan staat grijs is, krijgt deze patch de kleur wit.

    Kijk voor deze opdracht voor extra informatie in de dictionary van NetLogo (via menu Help).
    Zoek naar de p van patch.
    De procedure trace wordt aangeroepen in to go door de regel ask turtles [trace] toe te voegen.

Recursieve procedures

Als er veel turtles hun omgeving wit maken door er overheen te lopen, is de achtergrond snel in zijn geheel wit geworden.
Maar als er maar één turtle is, duurt het erg lang.
Je zou daarom willen dat de patch de boodschap kon door geven aan de patches om hem heen.
Dat kan door het toepassen van een recursieve procedure.

Een recursieve procedure voert een commando uit en roept dan zichzelf aan.

Een voorbeeld is de procedure create-offspring.
Met deze procedure laten we een turtle jongen krijgen (to hatch betekent uitbroeden).

to create-offspring

      let number-of-turtles count turtles

      if number-of-turtles < 50

      [

            hatch 10 [set color green]

      ]

end

 

Als je deze procedure aanroept in de setup-turtles procedure, en je begint met één poppetje, dan zullen dat er snel 11 zijn.
Hiervan zijn zeker 10 turtles groen.

Nu gaan we de procedure recursief maken.
Dan doen we door een soort sneeuwbaleffect te creëren: de procedure roept zichzelf aan, totdat het aantal turtles gelijk aan, of meer dan 50 is.

to create-offspring

      let number-of-turtles count turtles

      if number-of-turtles < 50

      [

            hatch 10 [set color green]

            create-offspring

      ]

end

 

Recursieve procedures zijn riskant.
Als je namelijk geen goede stopconditie formuleert, komt er geen einde aan de aanroep.
In create-offspring is de stopconditie het totaal aantal turtles.
Die wordt berekend door count.

Na het uitvoeren van het programma zie je in de monitor hieronder dat het er in totaal 51 turtles zijn.
Hiervan is één turtle niet groen maar heeft een andere kleur.

★ Aan de slag 43

  1. Neem de code voor de procedure to create-offspring over in de code van het model.
  2. Voeg aan de setup de regel ask turtles [create-offspring] toe.
    to setup

          clear-all

          setup-patches

          setup-turtles

          ask turtles [create-offspring]

          reset-ticks
    end

     

★ Aan de slag 44

In aan de slag 45 gaan we de procedure trace vervangen door de procedure make-white-recursive.
In de code van het model geven we aan dat de procedure trace niet uitgevoerd moet worden.
Dat doen we door van de code commentaar te maken.
In NetLogo doe je dat door voor elke regel een ; te plaatsen.

;to trace

;right random 360

;fd 1

;if [pcolor] of patch-here = grey

;[

  ;ask patch-here [set pcolor white]

;]

;end

De procedure to trace wordt aangeroepen in to go (ask turtles [trace]).
Ook van deze regel moet dus commentaar worden gemaakt.
Zorg er nu voor dat de code van de procedure trace tijdelijk niet wordt uitgevoerd door van de code commentaar te maken.

★ Aan de slag 45

Schrijf nu in plaats van trace een procedure make-white-recursive.
Deze procedure verandert de kleur van de patch van grijs in wit, en geeft de opdracht door aan de buurpatches, net zolang totdat alle patches wit zijn.
In de stopconditie moet dus worden getest of de patch nog grijs is. Het is nu niet de turtle die de opdracht geeft.
In plaats daarvan wordt de procedure clear-field gebruikt.

Je ziet hoe de procedure wordt aangeroepen:

; Er wordt een functie clear-field gedefinieerd.

; De turtle vraagt om de patch waarop hij staat de procedure

; make-white-recursive aan te roepen.

 

to clear-field

      ask patch-here

      [make-white-recursive]

end


Achtergrond

Je hebt in de setup-procedure tot nu toe gebruik gemaakt van een standaard achtergrond waarin je de patches grijs hebt gemaakt.
Daarin heb je vervolgens je turtles neergezet. Je kunt ook een bitmap als achtergrond gebruiken.
In de volgende opdrachten gaan we gebruik maken van een eigen gemaakte achtergrond.
Onze afbeelding heeft een grijze achtergrond met daarin een zwart blok.
Het bestand dat blok.bmp heeft, kan worden gedownload onder het menu-item Bijlagen.

★ Aan de slag 46

Pas de code van de setup-knop aan waarbij je aangeeft welke achtergrond moet worden geladen.

to setup-patches

      import-pcolors "blok.bmp"

end


Tijdens de setup wordt een door jezelf aangegeven achtergrond geladen.
In dit geval blok.bmp.
Om er voor te zorgen dat dit werkt moet het bitmap-bestand in dezelfde folder als de NetLogo-bestand staan.

 

★ Aan de slag 47

Zorg dat bij aanvang geen turtles op het blok staan.
Als de turtles gaan lopen, moeten ze zo min mogelijk op het zwarte vlak terecht komen.
Je kunt dat op twee manieren doen:

  • ze moeten meteen rechtsomkeert maken als ze op het zwarte vlak terecht dreigen te komen.
  • ze moeten naar een turtle of patch toegaan waarvan de kleur grijs is.

Programmeer een van deze twee manieren.

In je code moet je verwijzen naar de kleur van het vierkant.
Je kunt aannemen dat de kleur van het blok wordt herkend als zwart:

if [pcolor] of patch-ahead 1 = black []

Bovenstaande regel controleert of de patch vóór de turtle zwart is.
Bij zwart zullen de definities van een tekenprogramma en netlogo wel overeenkomen.
Maar je kunt de kleur in NetLogo ook controleren door er met de rechtermuisknop op te klikken.

Nu kun je de test ook uitvoeren met de getalswaarde van de kleur:

if [pcolor] of patch-ahead 1 = 0 []

Controleer ook of het grijs van paint ook wel als grijs door de turtles herkend wordt.
Als dat niet het geval is gebruik dan de waarde uit een patch monitor zoals is weergegeven.

★ Aan de slag 48

In het model brand wordt bij de setup van de patches de procedure set-distance-door uitgewerkt.
Bestudeer de code van deze procedure, en het bijbehorende commentaar.
Bestudeer ook welke waarde de variabele escape-distance heeft bij de muren en bij de deuren.
Beantwoord de volgende vragen:

  1. Waar wordt de variabele temp gedeclareerd?
  2. Waar wordt de variabele temp geïnitialiseerd (waar krijgt deze een waarde)?
  3. Schrijf nu de code voor een procedure set-distance-black waarmee bepaald kan worden hoever een turtle zich van het zwarte blok bevindt. Hiervoor moeten extra variabelen worden gemaakt.
  4. Programmeer het gedrag van de turtles nu zo dat de turtles rechtstreeks naar het zwarte blok lopen.

I Model BRAND

Eindopdracht model BRAND

Voor het maken van de eindopdrachten die horen bij het model BRAND zijn twee NetLogo bestanden beschikbaar.
Een NetLogo bestand waarin alle reeds voorgeprogrammeerde code is voorzien van commentaar en een versie waarbij dit niet is gedaan.
In de programmeercode zijn de plekken aangegeven waar de door jullie te schrijven code moet worden geplaatst.

  1. Ramen toevoegen
    1. Pas de bitmap zo aan dat er naast deuren ook ramen zijn.
      De aanwezigheid van ramen behoort tot feitelijke wereldkennis.
    2. Nu er ramen zijn, kunnen leerlingen er ook door ontsnappen.
      Daartoe moet de functionele wereldkennis van de agenten worden uitgebreid.

      Behandel de ramen op dezelfde manier als de deuren.
      Zorg er echter voor dat de leerlingen de voorkeur geven aan ontsnapping door een deur.
      (Je hoeft geen nieuwe procedure escape-through-window te schrijven.
      Je kunt gebruik maken van de bestaande procedure escape-through-door en de bestaande variabele escaping-door).

  2. Verspreiden van paniek
    In het model raken de leerlingen in paniek als ze brand ontwaren of als het alarm afgaat.
    Ze raken echter niet in paniek als ze andere leerlingen zien vluchten.
    Pas het model zo aan dat ze hun paniek verspreiden onder de leerlingen die direct naast hen staan of lopen.

  3. Deurdrangers implementeren
    Alle deuren in de school zijn bij aanvang standaard dicht (hun kleur is grijs).
    De deuren naar buiten zijn standaard open (hun kleur is geel).
    Er is echter een knop die de deurdrangers op de binnendeuren regelt.
    Voor deze is nog geen code geschreven.
    Of de knop aan of uit staat, maakt nog geen verschil voor de deuren in de school.
    Deze blijven van het type “closeddoor” hoewel leerlingen er wel doorheen kunnen lopen.
    De opdracht is om de stand ON en OFF voor de deurdrangers te coderen.
    Bij OFF moet een deur open gaan zodra de leerling de deur nadert (en moet de kleur geel worden).
    De deur blijft open staan als de leerling over de drempel is. Bij ON zijn de deurdrangers actief.
    De deur gaat op dezelfde manier open als de leerling de deur nadert (en wordt geel), maar gaat dicht zodra een leerling de drempel is gepasseerd (en wordt weer grijs).
    Of de deur open of dicht staat maakt uiteraard verschil voor de verspreiding van het vuur.
    Het verschil in de verspreiding van de brand is al geprogrammeerd in de procedure progress-fire.

  4. Verschillende typen en niet-deterministisch gedrag
    1. Maak twee typen agenten: jongens en meisjes bijvoorbeeld.
      Dit verschil behoort tot de feitelijke wereldkennis.
    2. Een verschil in feitelijke wereldkennis maakt een verschil in functionele wereldkennis waarschijnlijk.
      Een bepaalde mate van paniek kan (maar hoeft niet) je gedrag beïnvloeden.
      Het kan maken dat je doelloos rondloopt, aan de vloer vastgenageld staat, of juist heel doelbewust actie onderneemt.
      Bedenk zelf welk soort gedrag dat zou kunnen zijn en implementeer het.
      Het verschil tussen jongens en meisjes zou bijvoorbeeld kunnen zijn dat meisjes verstijven van schrik en jongens bij grote paniek andere leerlingen onder de voet lopen.

Voortgang

Bekijk hier je voortgang

Keuzedeel


Docent kan klassen aanmaken en leerlingen volgen
Een docent kan op de profielpagina klassen aanmaken. Als een docent dat gedaan heeft, kunnen de leerlignen zich aan de klas koppelen. Als de leerlingen dat gedaan hebben, kan de docent de voortgang van de leerlingen volgen.

>> Profielpagina
  • Het arrangement Artificial Intelligence is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteur
    VO-content
    Laatst gewijzigd
    2019-10-01 09:58:03
    Licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding-GelijkDelen 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding en publicatie onder dezelfde licentie vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding-GelijkDelen 4.0 Internationale licentie.

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Trefwoorden
    arrangeerbaar, leerlijn, rearrangeerbare