| BSc KI — Cursus Natuur & Berekening | 2025-26 |
Het simuleren van mensenmassa's (Eng.: crowd simulation) kent veel toepassingen. Zo is het bijvoorbeeld een belangrijk hulpmiddel om te bepalen of omgevingen waar veel mensen bij elkaar komen veilig zijn. Denk aan stadions, vliegvelden en festivalterreinen. Over Corona wil ik het niet heben.
Implementeer met een eenvoudige flockingtechniek een mensenmassa die zich beweegt van een bron (bijvoorbeeld ingang) naar een doel (bijvoorbeeld uitgang). De ruimte kan worden ingericht met obstakels. Er wordt aangenomen dat mensen op ieder moment volledige kennis hebben van de kortste weg naar het doel. Het probleem is alleen dat andere mensen dit doel ook hebben en dus in weg kunnen lopen ...
Voorkennis: flocking, zie TCBoN, Sec. 16.3.
turn”.)(*) Overal waar “zijn” staat kan ook “haar” worden gelezen. Maar eigenlijk doen we hier aan antropomorfisme.
Hier staat wat moet.* Bij afwijking van randvoorwaarden worden punten in mindering gebracht. Sommige randvoorwaarden zijn opgesteld om later de beoordeling van je programma te vergemakkelijken.
to defaults
set nr-of-turtles 150
set mean-step-size 0.35
set collision-radius 1.1
set field-of-view 1.1
set length-of-left-bar 7
;
ask box -14 9 -9 14 [ set pcolor green ]
ask box 10 -16 16 -10 [ set pcolor red ]
ask box (0 - length-of-left-bar)
0 0 0 [ set pcolor sky ]
ask box 3 0 16 0 [ set pcolor sky ]
ask box 3 -5 3 0 [ set pcolor sky ]
end
to-report box [ left-x left-y right-x right-y ]
report patches with [left-x <= pxcor and pxcor <= right-x and
left-y <= pycor and pycor <= right-y ]
end
move, uitvoeren.lg = 0.95*lg + 0.05*g.) Aan het begin van de simulatie wordt het lopend gemiddele geïnitialiseerd op nul. Elke episode-length tikken wordt het lopend gemiddelde geplot. (We kiezen er voor het lopend gemiddelde te plotten omdat de resulterende grafiek dan vloeiender verloopt en de trend daardoor beter is af te lezen.)bevrijd (o.i.d.) te plaatsen die alle aanwezige wandelaars voorzover nodig een zetje geeft, bv. op een dichtstbijzijnde bewandelbare plek zet.
in-cone.neighbors4 worden gebruikt.subtract-headings worden gebruikt.forward my-speed / -8 lijkt goed te werken. Maar andere snelheden werken ook.face.FALSE. Gebeurt er iets wat wilde bijhouden (bv. een slider is verschoven), dan zet je vlag op TRUE.random-float.Hieronder volgen snippets (codefragmenten). De snippets zijn facultatief. Het is niet verplicht ze te gebruiken, we hebben misschien zelfs liever dat je je eigen code schrijft. De snippets behoren niet tot de opdracht, en zijn zeker niet bedoeld als stappenplan. De snippets zijn meer bedoeld om je op weg te helpen mocht je vastlopen. De werking van de snippets is niet gegaranderd, en de practicumleiding is niet verplicht om er uitleg over te geven.
to paint [ c ]
if mouse-down? [
ask patch mouse-xcor mouse-ycor [
set pcolor c
]
]
endright rotation-angle * sign subtract-headings (towards goal-patch) headingDe draaihoek heb je zelf gedefinieerd (bv. 20). Het doelveld is eerder in je programma bepaald. De functie
sign is de tekenfunctie: sign(x) = 1 als x > 0, -1 als x < 0, en 0 anders. Netlogo bezit zelf geen tekenfunctie.; initially, all patches are very distant from the source ask patches [ set dist TOO_FAR ] ; inner red patches have distance zero to goal ask red-patches with [ all? neighbors [ pcolor = red ] ] [ set dist 0 ] ; do a reversed flood fill to determine, for the rest of the walkable patches, ; the distance to the source loop [ ; from patches with unknown shortest distance to goal that have neighbors ; with known shortest distance to goal, it is possible to compute their ; shortest distance to goal. such patches are called "the front" let front walkable-patches with [ dist = TOO_FAR and any? neighbors4 with [ dist < TOO_FAR ] ] if not any? front [ stop ] ask front [ set dist 1 + min [ dist ] of neighbors4 with [ dist < TOO_FAR ] ] ]De constante
TOO_FAR zul je zelf moeten definiëren. Je kunt 'm op 9E9 zetten (kortste manier om een vrij groot getal in Netlogo op te schrijven), of, intelligenter, world-width ^ 2 + world-height ^ 2.
Extra punten kunnen worden verdiend door het aanbrengen van extra features. Het aantal extra punten hangt af van het gewicht van een feature en de implementatie-kwaliteit. Geef, voor de puntentelling, duidelijk aan wat je extra features zijn, onder een kopje “Extra features” in de “Information” tab. Voorbeelden van extra features:
150), backup-schaling (eerder constant -8), draaisnelheid (eerder constant 20, perceptieradius (eerder constant 1.0), kunnen worden gevarieerd—en een knop om al deze sliders weer op default-waarden -8, 20, 1.0, ... terug te zetten.Over de titel van dit document: Hadimassa was een populair satirisch Nederlands televisieprogramma dat van 1967 tot 1972 door de VARA werd uitgezonden. Hadimassa werd in 1970 de bekroond met de Zilveren Nipkowschijf, een prestigieuze Nederlandse televisieonderscheiding.
Het volgende nakijkmodel zal worden gebruikt.
------------------------------------------------------
1. gratis punt
2. complete, nette, en intuitieve GUI
3. randvoorwaarden (kleuren, veldgrootte, stapgrootte, ..)
4. correct gedrag op wandelaar-niveau
5. correcte plot
6. kwaliteit code ; functionele one-liners zijn cool
7. executiesnelheid ; maar imperatieve constructies werken meestal sneller ...
8. documentatie (in code, in tab, *.png)
----- cijfer acht ------------------------------------
9. best of extra feature
10. "
----- cijfer tien ------------------------------------
| Laatst gewijzigd op woensdag 13 november 2024, om 15:02 uur | Auteur(s): Gerard Vreeswijk | Translate to en, ru, or tr |