Opdracht 2: Ka'aba
Inleiding
- Dit is een aanvullende programmeeropdracht.
- Het is toegestaan de opgave met z'n tweeën te maken, echter beiden moeten ingeschreven staan als herkansers voor de aanvullende programmeeropdracht. De docent is niet verantwoordelijk voor het koppelen van herkansers.
- De Netlogo documentatie-tab bevat je naam (namen), studentnummer(s), en een clausule waarin je verklaart dat je de opgave zelf danwel alleen met z'n tweeën hebt gemaakt. Als de opgave met z'n tweeën is gemaakt, dan moet in de informatietab ook heel duidelijk staan wie wat heeft gedaan. Bij twijfel heeft de docent het recht vooralsnog geen cijfer toe te kennen en beide kandidaten uit te nodigen voor een gesprek.
- Submit op de gebruikelijk manier.
- Succes!
Globale omschrijving
Simuleer de dynamiek van een groep bedevaartgangers rond de Ka'aba in Mekka. Het is de uitdaging om met enkele eenvoudige flocking-regels geloofwaardig gedrag te simuleren.
(De foto is van redicecreations.com.)
Randvoorwaarden
Hier staat wat moet.* Bij afwijking van randvoorwaarden worden punten in mindering gebracht. Het voldoen aan de randvoorwaarden levert i.i.g. het cijfer zes op.
- Veldafmetingen. Max-pxcor = max-pycor = 64.
- Ka'aba. Deze wordt als volgt gecreëerd:
set kaaba patches with [ abs(pxcor) < 15 and abs(pycor) < 15 ]
crt 1 [ set size 30 set shape "square" set color gray set heading 0 ]
- Bedevaartgangers. Er zijn ten alle tijde 400 bedevaartgangers op het terrein. Bedevaartgangers zijn rood, bezitten een default vorm, size 4. Als ze de ka'aba aangeraakt hebben, kleuren ze wit.
- Pace. Bedevaartgangers bezitten elk een eigen pace (kruissnelheid). Deze is Gaussiaans verdeeld met μ=0.3 lengte-eenheden (vakjes) per iteratie, en standaardafwijking σ=0.05 lengte-eenheden per iteratie. Onder een iteratie wordt één aanroep van “
ask bedevaartgangers [ ... ]” verstaan.
- Roulatie. Als witte bedevaartgangers zich meer dan max-pxcor van de oorsprong bevinden, worden ze rood. (Dit is een eenvoudige manier om in- en uitloop te simuleren.)
- Doorloop. In een grafiek wordt bijgehouden hoeveel bedevaartgangers per minuut het terrein verlaten.
- Collision detection. Bedevaartgangers mogen elkaar niet overlopen. Daartoe dient een elementaire vorm van collision detection (botsing-detectie) te worden geïmplementeerd. Bij een collision mag een bedevaartganger afwijken van zijn/haar kruissnelheid (stilhouden/vertragen/versnellen). Een bedevaartganger mag niet sneller bewegen dan 3x zijn/haar kruissnelheid. De gemiddelde snelheid van een bedevaartganger mag niet groter zijn dan zijn/haar kruissnelheid.
- Collisions per seconde. Het totale aantal collisions per seconde wordt bijgehouden in een dezelfde grafiek als waarin de doorloop wordt bijgehouden. (Schaal zonodig de doorloop danwel het aantal collisions per seconde. Besef verder dat meetmomenten niet samen hoeven te vallen met plotmomenten.)
- Zicht en integriteit. Bedevaartgangers bezitten allemaal een zicht van 90o naar links en 90o naar rechts. Buiten dit gezichtsveld zien (of voelen) ze geen anderen. Verder bezitten bedevaartgangers een integriteitsgebied van 3 lengte-eenheden (i.e., vakjes). Als anderen binnen dit gebied komen wordt dit als een hindering (collision) ervaren. (Hint: de vermelde parameters kunnen gecombineerd worden gebruikt middels
in-radius.)
- Me. Eén turtle krijgt het label “me”. Van deze turtle wordt de afstand tot de oorsprong in een grafiek bijgehouden.
Aanwijzingen
- Modi. Net zoals bij andere flocking technieken is het handig gedrag te verdelen in modi, bijvoorbeeld: normaal lopen, lopen bij hindering (“separatie”), ..., etc.
- Parameters. Bedevaartgangers worden gestuurd middels parameters. Suggesties:
| Inwaartse hoek: |
hoek die rode ongehinderde bedevaartganger loopt. Bij hoek 0 zal de bedevaartganger een zuivere cirkel lopen. Bij hoek ongelijk 0 spiralen. |
| Uitwaartse hoek: |
hoek die witte ongehinderde bedevaartganger loopt |
| Separatie-hoek: |
hoek die bedevaartganger draait in geval van een hindering |
| Remfactor: |
vertragingsfactor die bedevaartganger toepast bij geval van hindering |
Dit zijn slechts suggesties. Andere en/of meer parameters kunnen worden gebruikt.
Alle parameters kunnen worden gevarieerd met sliders of andere widgets. Voeg evt. buttons toe om interessante en/of optimale parameterconfiguraties te setten.
Extra
|
|
| Normale Netlogo (2D), in 3D view. |
|
Extra punten kunnen worden verdient door het aanbrengen van één of meer van de volgende features.
- Intelligentie. Implementeer loopgedrag dat intelligenter is dan het simpelweg volgen van de massa en het vermijden van botsingen.
- Optimalisatie. Middels grafieken en/of andere hulpmiddelen kan duidelijk worden aangetoond dat de gekozen parameterinstellen leiden tot een minimaal aantal hinderingen per seconde danwel een maximaal aantal roulaties per minuut. (Merk op dat dit twee verschillende optimalisatiecriteria zijn.)
- Hatim. De Hatim is een lage witte halfronde muur ten noorden van de Ka'aba. Laat middels grafieken en/of andere hulpmiddelen duidelijk het effect zien van de Hatim op globaal gedrag. (Hint: gebruik een switch om specifieke bebouwing neer te zetten danwel te verwijderen.)
*Naast de algemene randvoorwaarden voor de programmeeropdrachten en de algemene randvoorwaarden voor de programmeeropdrachten die specifiek in Netlogo worden uitgevoerd. Zie de pagina met clausules.