3. NetLogo basis: wereld, patches, turtles#
Je hebt in hoofdstuk 1 en 2 geleerd hoe je een fenomeen ontleedt in agents, regels en parameters. Nu wordt het tijd om dit te bouwen! In dit hoofdstuk maak je kennis met NetLogo, een programmeertaal speciaal ontworpen voor Agent-Based Modeling. Je leert de basis: hoe maak je agents (turtles), hoe beweeg je ze, hoe stel je de omgeving in (patches), en hoe meet je wat er gebeurt. Aan het eind bouw je je eerste werkende model: een random walk met metingen. Dit is de fundering voor alle modellen die volgen.
Leerdoel: Na dit hoofdstuk kun je NetLogo installeren, een eenvoudig model bouwen met turtles en patches, en metingen doen met monitors en plots.
3.1. Inhoud#
In dit hoofdstuk behandelen we:
NetLogo downloaden en installeren
NetLogo interface: Code/Interface/Info, buttons en sliders
Setup/go en ticks: het hart van elk model
Turtles: agents maken, bewegen, random gedrag
Patches: de omgeving met kleuren en waarden
Monitors en eenvoudige plots
Mini-model: random walk met meetwaarde
3.2. NetLogo downloaden en installeren#
Wat is NetLogo?
NetLogo is een programmeeromgeving specifiek voor Agent-Based Modeling. Het is gratis, open-source, en werkt op Windows, macOS en Linux. NetLogo maakt het makkelijk om honderden agents te simuleren zonder dat je expert-programmeur hoeft te zijn.
Downloaden en installeren:
Klik op “Download” (versie 6.4 of hoger)
Kies je besturingssysteem (Windows/Mac/Linux)
Download en installeer zoals gebruikelijk
Start NetLogo
Eerste indruk:
Als je NetLogo opent, zie je drie tabbladen bovenin: Interface, Info en Code. Dit zijn de drie kernonderdelen van elk NetLogo-model.
Tip
NetLogo Models Library
NetLogo komt met honderden voorbeeldmodellen! Ga naar File → Models Library om ze te verkennen. Kijk bijvoorbeeld eens naar “Biology → Ants” of “Social Science → Segregation”. Je kunt leren door andermans code te bekijken.
3.4. Setup/go en ticks: het hart van elk model#
Elk NetLogo-model heeft twee kernprocedures: setup en go.
Setup: de beginsituatie#
De setup procedure maakt de wereld klaar en creëert agents. Dit is als het opzetten van een bordspel: pionnen plaatsen, dobbelsteen klaarzetten.
Basis-structuur:
to setup
clear-all ; Maak alles schoon (verwijder oude agents)
create-turtles 50 ; Maak 50 turtles aan
reset-ticks ; Zet tijdsteller op 0
end
Wat doet dit?
clear-all: Verwijdert alle oude turtles, patches worden gereset, variabelen worden gewistcreate-turtles 50: Maakt 50 nieuwe turtles op willekeurige positiesreset-ticks: Zet de tick-teller op 0 (essentieel voor plots!)
Go: de simulatie laten lopen#
De go procedure is wat er gebeurt elke tick. Dit is het “stapje verder” dat je model zet.
Basis-structuur:
to go
ask turtles [ ; Vraag alle turtles om iets te doen
forward 1 ; Beweeg 1 stap vooruit
]
tick ; Tel 1 tijdstap verder
end
Wat doet dit?
ask turtles [ ... ]: Alle turtles voeren de acties tussen [ ] uitforward 1: Elke turtle beweegt 1 cel vooruit in zijn huidige richtingtick: Verhoog de tick-teller met 1 (cruciaal!)
3.5. Turtles: maken, bewegen, random#
Turtles zijn je agents. Ze kunnen bewegen, draaien, eigenschappen hebben, en met elkaar interacteren.
Turtles maken#
create-turtles 100 ; Maak 100 turtles, willekeurige positie
create-turtles 10 [ ; Maak 10 turtles EN voer code uit
set color red ; Maak ze rood
setxy 0 0 ; Zet ze in het midden (x=0, y=0)
]
Turtles bewegen#
Basis-bewegingen:
forward 1 ; Beweeg 1 stap vooruit
back 2 ; Beweeg 2 stappen achteruit
right 90 ; Draai 90 graden naar rechts (kloksgewijs)
left 45 ; Draai 45 graden naar links
Naar een positie:
setxy 10 5 ; Ga naar coördinaten x=10, y=5
move-to patch 3 7 ; Ga naar de patch op (3, 7)
Random gedrag#
Om turtles willekeurig te laten bewegen, gebruik je random:
to go
ask turtles [
right random 360 ; Draai een willekeurige hoek (0-359 graden)
forward 1 ; Beweeg 1 stap vooruit
]
tick
end
Random-functies:
random 10: Geeft een random getal van 0 tot 9 (niet inclusief 10!)random-float 1.0: Geeft een random kommagetal tussen 0 en 1one-of [red blue green]: Kies willekeurig één optie uit de lijst
Voorbeeld: random walk (willekeurige wandeling)
to setup
clear-all
create-turtles 20 [
set color blue
set size 2 ; Maak ze iets groter (standaard = 1)
]
reset-ticks
end
to go
ask turtles [
right random 360 ; Draai willekeurige richting
forward 1 ; Beweeg 1 stap
; Als je de rand raakt, stuit terug
if xcor > max-pxcor or xcor < min-pxcor [ set heading (- heading) ]
if ycor > max-pycor or ycor < min-pycor [ set heading (180 - heading) ]
]
tick
end
Wat gebeurt hier?
Turtles draaien elke tick een random hoek
Ze bewegen 1 stap
Als ze de rand van de wereld raken, “stuiteren” ze terug
Tip
Turtles volgen
Rechtermuisknop op een turtle → “Watch” om die turtle te volgen. Super handig om te zien wat één individuele turtle doet. Klik “Reset Perspective” om terug te gaan naar de normale weergave.
3.6. Patches: de omgeving met kleuren en waarden#
Patches zijn de cellen van je grid. Ze vormen de omgeving waarin turtles bewegen. Patches kunnen eigenschappen hebben en kleuren.
Patches aanpassen#
ask patches [
set pcolor green ; Maak alle patches groen
]
ask patch 0 0 [ ; Vraag één specifieke patch
set pcolor red ; Maak die patch rood
]
Patches met waarden#
Patches kunnen variabelen hebben:
patches-own [
voedsel-niveau ; Elke patch heeft een voedsel-waarde
]
to setup
clear-all
ask patches [
set voedsel-niveau random 100 ; Random waarde 0-99
set pcolor scale-color green voedsel-niveau 0 100
; Hoe hoger voedsel-niveau, hoe groener
]
reset-ticks
end
scale-color uitleg:
scale-color green voedsel-niveau 0 100Maak de patch een tint groen, afhankelijk van de waarde
Waarde 0 = lichtgroen, waarde 100 = donkergroen
Patches en turtles: interactie#
Turtles kunnen eigenschappen van hun patch opvragen:
to go
ask turtles [
; Als de patch waar ik sta voedsel heeft...
if [voedsel-niveau] of patch-here > 50 [
set color yellow ; Word geel (ik heb voedsel gevonden!)
]
forward 1
]
tick
end
Belangrijk:
patch-here: De patch waar deze turtle nu staat[voedsel-niveau] of patch-here: Vraag het voedsel-niveau van mijn huidige patch
Voorbeeld: mieren zoeken voedsel (simpele versie)#
patches-own [voedsel?] ; Boolean: heeft deze patch voedsel?
to setup
clear-all
; Maak omgeving
ask patches [
set pcolor brown ; Grond is bruin
]
; Plaats voedsel op 10 random plekken
ask n-of 10 patches [
set voedsel? true
set pcolor green ; Voedsel is groen
]
; Maak mieren
create-turtles 30 [
set color red
set shape "bug" ; Verander vorm naar insect
]
reset-ticks
end
to go
ask turtles [
; Random walk
right random 60 - 30 ; Draai -30 tot +30 graden
forward 1
; Check: sta ik op voedsel?
if [voedsel?] of patch-here [
set color orange ; Word oranje (ik heb voedsel!)
]
]
tick
end
Let op: scope en ask
Veelgemaakte fout: scope-verwarring
; FOUT:
ask turtles [
set pcolor red ; ERROR: turtles hebben geen pcolor!
]
; GOED:
ask turtles [
ask patch-here [ ; ASK de patch waar ik sta
set pcolor red ; NU kun je pcolor aanpassen
]
]
Onthoud: ask bepaalt de context. Binnen ask turtles werk je met turtle-eigenschappen. Binnen ask patches werk je met patch-eigenschappen.
3.7. Monitors en eenvoudige plots#
Je hebt nu agents die bewegen. Maar wat gebeurt er eigenlijk? Tijd om te meten.
Monitors: huidige waarde#
Een monitor toont één getal.
Monitor toevoegen op Interface:
Rechtermuisknop → “Monitor”
Plaats de monitor
Vul in: Reporter:
count turtlesKlik OK
Nuttige reporters:
count turtles ; Hoeveel turtles zijn er?
count turtles with [color = red] ; Hoeveel rode turtles?
mean [xcor] of turtles ; Gemiddelde x-positie van turtles
max [voedsel-niveau] of patches ; Hoogste voedsel-waarde
ticks ; Hoeveel ticks zijn verstreken?
Plots: verloop over tijd#
Een plot toont hoe iets verandert.
Plot toevoegen:
Rechtermuisknip → “Plot”
Geef een naam: “Aantal turtles over tijd”
X-axis label: “Ticks”
Y-axis label: “Aantal”
Klik op de “pen” (potlood-icoon) en voeg een plot-pen toe:
Name: “turtles”
Plot pen code:
plot count turtles
Klik OK
Nu zie je elke tick een punt in de grafiek verschijnen!
Meerdere lijnen in één plot:
; In plot-pen 1: rode turtles
plot count turtles with [color = red]
; In plot-pen 2: blauwe turtles
plot count turtles with [color = blue]
Voorbeeld: energie-model#
Laten we een model maken waar turtles energie verliezen en sterven als energie = 0.
turtles-own [energie] ; Elke turtle heeft een energie-waarde
to setup
clear-all
create-turtles 50 [
set energie 100 ; Start met 100 energie
set color green
]
reset-ticks
end
to go
ask turtles [
forward 1
set energie energie - 1 ; Verlies 1 energie per tick
; Als energie op is, sterf
if energie <= 0 [
die ; Verwijder deze turtle
]
; Kleur geeft energie aan: groen=vol, rood=leeg
set color scale-color red energie 0 100
]
; Stop als alle turtles dood zijn
if not any? turtles [ stop ]
tick
end
Metingen toevoegen:
Monitor 1:
count turtles(hoeveel leven er nog?)Monitor 2:
mean [energie] of turtles(gemiddelde energie)Plot: Laat beide waarden over tijd zien
Oefening 3.2 (Oefening (Toepassen))
Pas je model uit Oefening 3.1 aan:
Voeg een turtle-eigenschap toe:
energie(start = 100)Elke tick: turtle verliest 1 energie
Als energie ≤ 0: turtle sterft (
die)Voeg een monitor toe:
mean [energie] of turtlesVoeg een plot toe met twee lijnen:
Aantal turtles over tijd
Gemiddelde energie over tijd
Run je model. Wat zie je gebeuren? Na hoeveel ticks zijn alle turtles dood? Waarom?
3.8. Mini-model: random walk met meetwaarde#
Laten we alles samenvoegen in een compleet mini-model: Random Walk met Verspreiding.
Onderzoeksvraag: Hoe ver verspreiden turtles zich vanaf het centrum in een random walk? Hangt dit af van het aantal turtles?
Code#
turtles-own [
start-x ; Onthoud waar turtle startte
start-y
]
to setup
clear-all
; Maak achtergrond zwart
ask patches [ set pcolor black ]
; Maak turtles in het midden
create-turtles aantal-turtles [ ; aantal-turtles = slider
setxy 0 0 ; Start in centrum
set start-x 0
set start-y 0
set color yellow
pen-down ; Laat spoor achter
]
reset-ticks
end
to go
ask turtles [
right random 360 ; Willekeurige richting
forward 1
]
tick
; Stop na 1000 ticks
if ticks >= 1000 [ stop ]
end
; Reporter: gemiddelde afstand tot centrum
to-report gemiddelde-afstand
ifelse any? turtles [
report mean [distancexy start-x start-y] of turtles
] [
report 0
]
end
; Reporter: maximale afstand
to-report max-afstand
ifelse any? turtles [
report max [distancexy start-x start-y] of turtles
] [
report 0
]
end
Interface-elementen#
Slider:
aantal-turtles(min=1, max=100, increment=1, value=20)Button:
setupButton:
go(Forever = aan)Monitor 1:
gemiddelde-afstandMonitor 2:
max-afstandPlot: “Verspreiding over tijd”
Pen 1:
plot gemiddelde-afstand(kleur: blauw)Pen 2:
plot max-afstand(kleur: rood)
Experimenteren#
Run met aantal-turtles = 20
Noteer: gemiddelde-afstand na 1000 ticks
Run met aantal-turtles = 50
Vergelijk: is er verschil?
Verwachting: Gemiddelde-afstand zou vergelijkbaar moeten zijn (random walk is random!), maar max-afstand is groter met meer turtles (meer kans op “lucky wanderer”).
Oefening 3.3 (Oefening (Reflecteren))
Beantwoord de volgende vragen in 3-5 zinnen per vraag:
a) In het random walk model hierboven: welke variabelen zijn parameters (inputs die je instelt), en welke zijn outputs (metingen)? Noem minimaal 2 van elk.
b) Het model gebruikt pen-down om sporen te tonen. Dit is visueel handig, maar kost rekenkracht. Als je 1000 turtles zou hebben, zou je pen-down gebruiken? Waarom wel/niet?
c) Stel je voegt een regel toe: “Als turtle de rand raakt, teleporteer naar het centrum”. Hoe verandert dit de output gemiddelde-afstand? Wordt die hoger, lager, of blijft het hetzelfde? Beredeneer.
3.9. Verdiepende opgaven#
Klaar voor uitdaging? Probeer deze opdrachten om je NetLogo-vaardigheden te verdiepen.
Oefening 3.4 (Opdracht (Predator-prey basis))
Bouw een eenvoudig predator-prey model (roofdier-prooi):
Prooien (groene turtles): Bewegen random, vermenigvuldigen zich met kans 5% per tick
Roofdieren (rode turtles): Bewegen random, eten prooien (als ze op dezelfde patch staan), verliezen energie, sterven als energie = 0
Implementeer:
Setup met 50 prooien, 10 roofdieren
Prooien:
right random 60 - 30,forward 1, met kans 5%:hatch 1(maak kopie)Roofdieren: energie start=50, -1 per tick, +20 als ze prooi eten
Plot: Aantal prooien (groen) en aantal roofdieren (rood) over tijd
Experimenteer: Bij welke start-waarden overleven beide soorten? Bij welke sterft één uit?
Oefening 3.5 (Opdracht (Heatmap van beweging))
Maak een model dat bijhoudt waar turtles het meest zijn geweest:
Setup: 20 turtles, random walk
Elke patch heeft variabele
bezoeken(aantal keren dat een turtle hier was)Elke tick: verhoog
bezoekenvan de patch waar turtle staat met 1Kleur patches op basis van
bezoeken: blauw (weinig) → rood (veel)
Gebruik: set pcolor scale-color red bezoeken 0 100
Vraag: Welk patroon zie je ontstaan na 500 ticks? Is het uniform, of zijn er “hotspots”? Waarom?
Schrijf 200-250 woorden met je observaties en verklaring.
Oefening 3.6 (Opdracht (Debug challenge))
De volgende code bevat 3 fouten. Vind en corrigeer ze:
turtles-own [leeftijd]
to setup
clear-all
create-turtles 50
set leeftijd 0 ; Fout 1: scope probleem
set color blue
]
reset-ticks
end
to go
ask turtles [
forward 1
set leeftijd + 1 ; Fout 2: syntax probleem
]
ask patches [
set color red ; Fout 3: verkeerde attribuutnaam
]
end
Leg voor elke fout uit: (1) wat is fout? (2) waarom geeft dit een error of verkeerd gedrag? (3) hoe repareer je het?
3.10. PO-mijlpaal#
Na dit hoofdstuk ben je klaar voor de derde mijlpaal: een werkend model-skelet in NetLogo.
Wat lever je op na deze fase?#
Een NetLogo-bestand (.nlogo) met de basis-structuur van je eindproject:
Code:
Werkende
setupprocedure (maakt je agents en omgeving)Werkende
goprocedure (agents bewegen/handelen, tick wordt verhoogd)Minimaal 1 turtle-eigenschap (bijv.
energie,besmet?)Minimaal 1 patch-eigenschap (optioneel, als relevant voor je model)
Interface:
Button: “Setup”
Button: “Go” (Forever = aan)
Slider: 1 parameter die je in je onderzoek wilt variëren (bijv.
aantal-agents,besmettingskans)Monitor: 1 output-meting (bijv.
count turtles,mean [energie] of turtles)Plot: 1 grafiek die een output over tijd toont (of placeholder met titel)
Info:
Je naam en datum
Korte beschrijving (3-5 zinnen): Wat modelleer je? Welke onderzoeksvraag?
Lijst van je parameters en outputs
Checklist: je bent klaar als…#
Je model start foutloos met “Setup” (geen error messages)
Je model loopt met “Go” zonder vast te lopen of crashes
Je agents doen iets zichtbaars (bewegen, kleur veranderen, sterven, etc.)
Je slider werkt: als je de waarde verandert en opnieuw “Setup” doet, zie je het effect
Je monitor toont een dynamische waarde (verandert tijdens “Go”)
Je plot tekent een lijn (ook al is deze nog simpel)
Je code bevat comments (regels die starten met
;) om uit te leggen wat er gebeurtHet Info-tabblad is ingevuld (naam, onderzoeksvraag, korte uitleg)
Waar komt dit terug in je eindproject?#
Dit skelet is de technische basis van je hele project:
Hoofdstuk 4: Je gaat dit model uitbreiden met de regels uit je conceptuele canvas (hoofdstuk 2)
Hoofdstuk 5: Je gaat experimenteren met parameters en data verzamelen
Hoofdstuk 6: Je gaat je model valideren en verfijnen
Eindverslag: Code-snippets en grafieken komen uit dit model
Tips voor succes:
Start simpel: Bouw eerst een werkende basis, voeg dan stap voor stap features toe
Test vaak: Klik na elke wijziging op “Check” (in Code-tabblad) om syntax-errors te vinden
Sla op: Gebruik Save As en bewaar verschillende versies (model-v1.nlogo, model-v2.nlogo)
Vraag hulp: Als je vast zit, kijk in de NetLogo Models Library naar vergelijkbare modellen
Volgende stap: In hoofdstuk 4 ga je je conceptuele model uit hoofdstuk 2 implementeren in NetLogo. Je vertaalt je als-dan regels naar code, voegt interacties toe tussen agents, en bouwt je volledige model. Het wordt echt!