Simulation avec Netlogo
Sébastien Rey Coyrehourcq
Rouen
2023-2024
Programme
...indicatif...
Modéliser (1) & prise en main Netlogo
Modéliser (2)
Modèle multi-agents
Echangent des messages
Réflechissent ...
Bougent et perçoivent
Evoluent dans un environnement
Agissent sur l'environnement
(plus ou moins ...)
[Ferber 1999, Drogoul 2009]
ville
fourmis
moustique
individu
arbre
[Drogoul Treuil 2008]
Modèle multi-agents
Un méta-modèle plus qu'un modèle
flexibilité de représentation & emboitement d'échelle !
KISS
KIDS
Stylisé
Particulier
[Sanders & Banos 2011, 2013, Banos 2013]
Une variété de pratiques
peu de règles
beaucoup de règles
espace simplifié
espace réaliste
Schelling
Schelling - Sakoda simulation
[1916 - 2005]
[1921 - 2016]
Journal of Mathematical Sociology (Vol 1) 1971
Journal of Mathematical Sociology (Vol 2) 1971
- The checkerboard model of social interaction -
- Dynamic models of segregation -
Phd Dissertation 1949
Schelling
Sénat - 1966
Crédit : Henry Griffin / Associated Press
Schelling model
vacancies
blue people
pink people
random position of people on a 2D grid
Schelling model
False
Move to
random
True
Stay here
Moore
Neumann
% of similar around me
Schelling model
What could we expect if we accept some heterogeneity ?
=
finally 70 % similar
Schelling model
Play with differents threshold
Play with more or less vacancies
experiment on netlogo
Try to identify different states of the Schelling model and place them on this diagram
Try to identify different states of the Schelling model and place them on this diagram
[Gauvin 2009, Daude 2007]
Joshua Epstein
Social Simulation Conference 2015
Sugarscape model
KISS
KIDS
Stylized
Particular
[Sanders & Banos 2011, 2013, Banos 2013]
Schelling
Sugarscape
Sugarscape model
max sugar by patch
world - n * n patch -
Sugarscape model
Sugarscape model
limited vision, growing sugar
Sugarscape model
Sugarscape model
Sugarscape model
exploring resilience concept ?
Resilience is the ability of a system to maintain certain functions, processes, or populations after experiencing a disturbance.
Sugarscape model
farm workers
farm owners
tax
https://hal.archives-ouvertes.fr/hal-01094421
Collectif MAPS :
more rules !
Sugarscape model
reproduction
Sugarscape model
play with tax and note observation
Tax | 0.05 | 0.10 | 0.20 | 0.30 |
---|---|---|---|---|
Gini | ||||
Total population | ||||
% capitalist | ||||
% farmers | ||||
Mean ressources farm owners | ||||
Mean ressources farm workers |
value at ticks = 2000
Tax | 0.05 | 0.10 | 0.20 |
---|---|---|---|
Gini | 0,40 | 0.28 - 0.38 | 0.35 - 0.38 |
Total population | 430 | 250 | 240 |
% capitalist | 5 | 12 | 20 |
% farmers | 95 | 88 | 80 |
Mean ressources capitalist | 25 | 28 | 26 |
Mean ressources farmers | 22 | 22 | 23 |
not so big differences between roles ... need some new visualisation ...
smaller population, higher share of farm workers, more inequalities
... possible collapse of system or
new equilibrium ...
add some new visualisations
right clic in blank zone in interface
change pen name
change plot name
change xy
advanced pen
mode "Bar"
name | pen name | interval |
---|---|---|
Wealth-Rentiers | WR | 5 |
Wealth-Recoltants | WRe | 5 |
parameters for 2 plots
Sugarscape model
Go to "code" tab, search "update-lorenz-and-gini-plots" function, add this source code ...
;; .... At the end of this function ....
;; .... add this code to plot Distribution of Wealth
set-current-plot "Wealth-Rentiers"
set-current-plot-pen "WR"
if any? turtles with [class = ClasseRentier]
[histogram [sugar] of turtles with [class = ClasseRentier] ]
set-current-plot "Wealth-Recoltants"
set-current-plot-pen "WRe"
if any? turtles with [class = ClasseRécoltant]
[histogram [sugar] of turtles with [class = ClasseRécoltant] ]
Sugarscape model
... then return to "interface" tab, and relaunch simulation
Tax | 0.05 | 0.10 | 0.20 | 0.30 | 0.40 |
---|---|---|---|---|---|
Little catastroph | resilient | ||||
medium catastroph | |||||
Big catastroph | |||||
Cataclysme |
Sugarscape model
quelques
definitions ...
To an observer B, an object A* is a model of an object A to the extent that B can use A* to answer questions that interest him about A
Beaucoup de définitions ... statique ou dynamique
En construisant un modèle (model building), on crée une représentation idéalisée de la réalité afin de faire apparaître certaines de ses propriétés
[Minsky 1965]
[Hagget 1965]
"le terme de modélisation désigne à la fois l’activité pour produire un modèle et le résultat de cette activité" .
[Langlois 2005]
Le concept de modélisation est donc « [...] plus large que celui de modèle, car il recouvre l’activité humaine qui aboutit au modèle achevé, alors que le modèle est un objet (concret ou abstrait), volontairement dépouillé de l’activité qui l’a créé »
Modéliser ? Simuler ?
un objet médiateur qui a pour fonction de faciliter une opération cognitive dans le cadre d’un questionnement orienté, opération cognitive qui peut être de cognition pratique (manipulation, savoir-faire, apprentissage de gestes, de techniques, de conduites, etc.) ou théorique (récolte de données, formulation d’hypothèses, hypothèses de mécanismes théoriques, etc.)
"simplifier" ou "faciliter" ??
[Varenne 2013]
ce n’est pas tant « le modèle » que ce qu’il y a « dans le modèle » qui nous intéresse
[Sander 2000, Besse 2000]
Puisque l’usage du modèle est relatif (à un observateur et à un questionnement), on ne peut dire que le modèle doit être un objet simple en lui-même ou dans l’absolu. Il convient donc de regarder sous quel aspect exactement il doit apparaître simplificateur, sous quel aspect il devient un outil facilitateur, un outil de facilitation. [...] on comprend déjà qu’un modèle n’est pas ce qui est recherché en tant que tel, mais ce qui facilite la recherche d’information au sujet d’un système réel ou fictif [...] Il est le moyen plus que la fin.
[Varenne 2008]
Modéliser ? Simuler ?
un objet médiateur qui a pour fonction de faciliter une opération cognitive dans le cadre d’un questionnement orienté, opération cognitive qui peut être de cognition pratique (manipulation, savoir-faire, apprentissage de gestes, de techniques, de conduites, etc.) ou théorique (récolte de données, formulation d’hypothèses, hypothèses de mécanismes théoriques, etc.)
fusion et/ou émergences des objectifs
[Varenne 2013]
~ 20 fonctions épistémiques qui peuvent se recouper
exemples => performance ; parcimonie ; compression d'information ; la compréhension ; la pédagogie ; co-construire ; etc ...
Modéliser ? Simuler ?
Large bibliographie en fr.
Déjà + 20 ans de littérature ...
Src : Heppenstal, 20 years of geocomputation 2016
ABM en géographie ?
Exemples SMA
GAMA (gaml)
Netlogo (logo)
plateformes SMA
ou java/scala
6 exemples
KISS
KIDS
Stylisé
Particulier
MicMac
& une grande diversité de besoins en calculs : Grille & HPC !
"épidémiologie"
MicMac
[Banos et al. 2015]
agents = personnes & avion & villes ; couplage avec ODE
4 stratégies à explorer
2 objectifs à minimiser (écon. vs épi.)
pas de données
Question : Quel est la combinaison de stratégies (quarantaine, évitement, responsabilisation ind., protection ind.) qui permet de limiter à la fois les pertes économiques, et la diffusion de l'épidémie dans un tel système ?
~ 5/10 minutes d'exécution
1 simulation par CPU
MicMac
[Banos et al. 2015]
KISS
KIDS
Stylisé
Particulier
M03
épidémiologie
MicMac
Mo
[Maneerat et al. 2017]
3
agents = moustiques & nids
résolution inf. 1m
exécution : + 12 heures
+ 50 paramètres
1 simulation = 1 cpu
16 Go Ram
DOE : LHS sur grille EGI
500000 sim, ~20 ans calculs
Objectif : Comprendre et lutter contre l'émergence et la diffusion de la Dengue dans les milieux urbains
Moma
Mode
Momos
Micro
Macro
[Misslin 2017]
résolution 30m,
ville entière
[Daudé et al. 2017]
[Cebeillac et al. 2017]
résolution inf. 1m, quartier 10km²
paysage synthétique
agent: individu mobile avec agenda
résolution 30m,
ville entière
données: twitter
modèle
surrogate
exploration
exploration
indice env.
2011 & 2019
ou ?
comment ?
quand ?
KISS
KIDS
Stylisé
Particulier
SimpopLocal
ATP
5AD
M03
ESCAPE
risques & santé
HUME
SimFeodal
MicMac
Escape
Objectif : Le projet ESCAPE a pour objectif de développer un système d’aide à la modélisation et à la simulation d’évacuation de villes afin d’évaluer des scénarios de gestion de crise.
[Daudé et al. 2019]
2016
Trois démonstrateurs :
Rouen (risque tech),
Hanoï et val d’Authion (risque nat)
agents: automobiles, bus, piétons, organisations, etc.
mécanismes: pop synthétique, agenda, multimodalité, arbres décisions, etc.
données : traffic (voiture, transports en communs), Insee, EMD, etc.
1 simulation = 1 coeur
~ 8/16 Go Ram
+30 minutes
KISS
KIDS
Stylisé
Particulier
5AD
géo. santé
MicMac
M03
5Ad
[Cottineau et al. 2020, à paraitre]
~ 25 minutes d'exécution
~ 3 Go ram par simulation
1 core, mais multithreading possible
test : 100.000 execution
calibrage: 200.000 executions
% personnes en bonne santé
agents: personnes / 8.16 M agents mobiles, en interaction
espace: IDF à 1km x 1km
données: nombreuses, et à différentes dates (NPPS, CSP 18 catégories, OD, baromètre santé, etc.)
mesure d'inégalité entre les extrême des groupe d'éducation à sexe et âge égal
1 modèle changement d'opinion
5 paramètres
3 objectifs à minimiser
4 scénarii de mobilité (random, données, etc.)
Etudier l'effet de la segregation sociale dans l'évolution des comportements de santé sur une journée type de 24h.
Question : Arrive-t-on à reproduire de façon cohérente les données et l'inégalité de comportement de santé en fonction des groupes sociaux ?
KISS
KIDS
Stylisé
Particulier
SimpopLocal
archéologie
5AD
M03
MicMac
SimpopLocal
Question : La production et la diffusion de l'innovation
est il un mécanisme nécessaire pour produire une hiérarchisation crédible du système de peuplement en 4000 ans au néolithique ?
agents: villes & innovations
7 paramètres libres
4 mécanismes
très peu de données en entrée/sorties
1 loi empirique à reproduire
Espace
système de peuplements
src :
SimpopLocal
SimpopLocal
1 simulation = 1 coeur
1 Go Ram
~ 5/10 minutes d'exécution
500 millions de simulation
eq. 20 ans de calculs
4000 cpu EGI Biomed
Calibration
Analyse de sensibilité
NSGA 2 - Ilôts
CP-Profile
1 simulation = 1 coeur
1 Go Ram
~ 1/2 minutes d'exécution
eq. 12 ans calcul par profil
15 jours de calculs (profil x 6)
4000 cpu EGI Biomed
[Schmitt et al. 2015]
[Reuillon et al. 2015]
réécriture modèle
1 objectif : f = max(01,02,03)
3 objectifs : (temps, forme, taille)
obj. f est impossible si 0 innovations
KISS
KIDS
Stylisé
Particulier
SimpopLocal
SimFeodal
5AD
M03
archéologie
MicMac
SimFeodal
Objectif : Il s’agit de simuler les transformations du système de peuplement Nord-Ouest européen entre 800 et 1100, période de transition d’un système majoritairement dispersé à un système hiérarchisé et polarisé.
interdisciplinarité
src :
SimFeodal
Un pas de temps de simulation (i.e. une itération du modèle) représente une durée de 20 ans, ce qui correspond approximativement à la durée de vie d’une génération à l’époque médiévale.
KISS
KIDS
Stylisé
Particulier
SimpopLocal
ATP
5AD
M03
archéologie
SimFeodal
MicMac
Rin ATP
1 simulation = 1 coeur
1 Go Ram
~ 20 minutes d'exécution
... campagne en cours ...
Objectif : Simuler pour mieux comprendre les règles de circulation des archéomatériaux (craies) depuis les carrières jusqu'aux sites de construction, en Normandie, entre le 11ème - 15ème siècle
agents: carrières et sites
espace :
données : très peu, fait stylisés & ordre de grandeurs
observable : volume par type de matériaux par type de batiments
processus
ordre de grandeurs
acteurs / objets
modèle(s)
simulation(s)
interdisciplinarité
Rin ATP
Modèle incrémental : complexification progressive des axes (espace, carrieres, monuments) pour mesurer le poids de chaque hypothèse sur les sorties du modèles.
Exploration (en cours) :
- distance moyenne parcourue par les archéomatériaux => quel paramètres pour quels patterns de distribution ?
- Calibrer distance moyenne obs. vs. simulé => quel paramètres produisent les meilleurs résultats ?
Rin ATP
interdisciplinarité
distribution "besoins"
distribution qté de batiment prioritaires
distribution qualité craie par carrières
distribution besoins pour les monuments
distribution de la capacité des carrière
population de monuments et de carrières
KISS
KIDS
Stylisé
Particulier
SimpopLocal
ATP
5AD
M03
HUME
archéologie
SimFeodal
MicMac
HUME
Objectif : Explorer les processus qui conduisent un espace initialement vierge de toute présence humaine à se peupler sous l’effet d’un flux migratoire, et cela dans un contexte de perturbations environnementales. L’objectif est d’explorer les effets de différents paramètres et de différentes situations initiales sur la configuration spatiale et le rythme du peuplement. Le processus central est celui de la migration
(HUman Migration and Environment)
Un flux de groupes migrants pénètre l’espace (représenté par une grille) par le nord-ouest. Ces groupes exploitent les ressources des cellules sur lesquelles ils sont localisés. Face à une pénurie de ressources, le groupe se déplace mais il a aussi une certaine probabilité d’innover qui lui permet de survivre tout en prélevant moins de ressources.
HUME
(HUman Migration and Environment)
src :
KISS
KIDS
Stylisé
Particulier
SimpopLocal
ATP
5AD
M03
HUME
SimFeodal
Kites
archéologie
MicMac
Desert Kites (wip)
Objectif : Modèle exploratoire pour mieux comprendre et évaluer les modes de chasses tenant compte de la morphologie des Desert kites.
Axes de complexification :
- Gazelle => algo. spécifique
- Chasseurs
- Espace
src :
KISS
KIDS
Stylisé
Particulier
SimpopLocal
ATP
5AD
M03
HUME
SimFeodal
Kites
Gerhaies
géormophologie
MicMac
GerHaies (revival)
Objectif : Explorer l'impact de différente stratégies de gestion sur l'évolution du linéaire de haies dans le territoire Normand
agents: Haies & Exploitants
2 indicateurs d'évolution
4 modes de gestion
Données réelles raster
Représentation multi-faces de chaque haie
Introducing Netlogo platform
Logo langage 1966
Seymour Papert
Logo turtle 1969-70 inspired by
Walter Grey's turtle in 1948
to square
repeat 4 [forward 50 right 90]
end
1928 - 2016
Introducing Netlogo platform
StarLogo
& Netlogo
NetLogo
Workspace
NetLogo
Model library
NetLogo
Dictionary
NetLogo
World of wonders
xcor
ycor
color
size
shape
anything you want
heading
pxcor
pycor
pcolor
anything you want
Turtles
Patches
Time
NetLogo
World of wonders
xcor
ycor
color
size
shape
anything you want
heading
pxcor
pycor
pcolor
anything you want
Observer
Turtles
create-turtles
clear-all
reset-ticks
Patches
Time
reset-ticks
(ticks)
tick
tick
tick
tick
NetLogo
birth of turtles
xcor
ycor
color
size
shape
anything you want
turtles-own [
;declare variable you want for turtles
]
create-turtles <number of turtles> [
; init turtles variables
]
create-turtles 2 [
set shape "turtle"
set color orange
set size random 3
set xcor random-xcor
set ycor random-ycor
]
1
2
heading
xcor 1
ycor 2
heading 280
size 1
xcor 4
ycor 1
heading 20
size 2
NetLogo
Action !
ask [
set color blue
]
ask with
[ color = orange ]
set color blue
]
NetLogo
Action !
ask [
set color orange
]
2
3
4
1
5
4
4
1
5
3
2
ask (turtle-set ) [
set heading 180
]
4
1
5
3
2
4
2
3
4
1
5
2
NetLogo
move your body
0
-5
0
5
(patch 3 -1)
-5
5
5
-5
NetLogo
move your body
0
0
5
ask [
set heading towards (patch 3 -1) ]
ask [ face (patch 3 -1) ]
-5
-5
5
5
-5
NetLogo
move your body
0
0
5
ask [
set heading towards ]
-5
-5
5
5
-5
NetLogo
move your body
0
-5
0
5
ask [
set heading towardsxy 0.5 -1.5 ]
- 0.5
0.5
-5
5
5
-5
Need distance ?
show [distance patch 3 -1 ]
of
ask [
show distance patch 3 -1 ]
ask [
show distance ]
NetLogo
move your body
NetLogo
move your body
forward 1
centroid to centroid
NetLogo
move your body
NetLogo
move your body 2
forward 1
centroid to centroid
NetLogo
move your body
NetLogo
move your body
forward 1
centroid to not centroid
NetLogo
move your body
patch-left-and-ahead 45 1
patch-right-and-ahead 45 1
NetLogo
move your body
patch-right-and-ahead 45 1
NetLogo
move your body
patch-right-and-ahead 45 1
move-to
NetLogo
move your body
knowing future patch ? => see model library
NetLogo
Leaving command center
Command Center is great to DEBUG your program, at any time, by asking turtles, patches, trying commands ...
BUT
this is not the way we write our programs
[credits: stan openshaw]
NetLogo
Leaving command center
to setup
clear-all
create-turtles 2
reset-ticks
end
to go
ask turtles [
fd 1 ;; forward 1 step
rt random 10 ;; turn right
lt random 10 ;; turn left
]
tick
end
setup
go
interface tab
code tab
NetLogo
Leaving command center
to setup
clear-all
create-turtles nb-turtles
reset-ticks
end
to go
ask turtles [
fd 1 ;; forward 1 step
rt random 10 ;; turn right
lt random 10 ;; turn left
]
tick
end
setup
go
interface tab
code tab
nb-turtles
4
NetLogo
Leaving command center
to whatyouwant
ask turtles [
set color first shuffle [orange blue]
]
end
setup
go
interface tab
code tab
whatyouwant
...
NetLogo
Exercice
to move-by-color
; move turtle of color = my-color to one specified patch
end
setup
go
interface tab
code tab
...
move-by-color
Algorithms in one word : LOOP
NetLogo
How do you ask our turtle to do something ?
ask [
... do something ...
]
1
3
8
2
Agenset
...
1
3
8
2
...
List
foreach [self] of [ t ->
ask t [
... do something ...
]
]
list contain anything you want
agentset contain only agents
RANDOMIZED
SAME ORDER
Algorithms in one word : IF
NetLogo
How do you manage differents behaviors for our turtle ?
energy > 15
?
?
sinon
sinon
energy > 15
...
SI [EXPRESSION] == TRUE ALORS
INSTRUCTION
FIN SI
...
ex : (2 + 2 <= 4)
jump
Algorithms in one word : IF
NetLogo
a = 3
SI [EXPRESSION] == TRUE ALORS
INSTRUCTIONS
FIN SI
...
ex : (2*a <= 4)
jump
jump
Algorithms in one word : IF
NetLogo
a = "foo"
SI [EXPRESSION] == TRUE ALORS
INSTRUCTIONS
SINON SI [EXPRESSION] == TRUE
INSTRUCTIONS
SINON
INSTRUCTIONS
FIN SI
ex : (a != "bar")
jump
jump
ex : a == "Foo"
Algorithms in one word : IF
NetLogo
Algorithms in one word : IF
NetLogo
IF <condition > [
... code ...
IFELSE < condition > [
... code ...
]
][
]
ask turtles with [color = white] [
ifelse energy > 15 [
set color green
]
[
set color orange
]
]
ask turtles [
ifelse color = white and energy > 15[
set color green
]
[
if color = white [
set color orange
]
]
]
ask turtles [
if color = white and energy > 15 [
set color green
]
]
... code ...
Algorithms in one word : IF
NetLogo
( IFELSE
< condition > [
]
]
ask turtles [
(ifelse
energy > 15 and color = white [
set color green
]
color = white
[
set color orange
])
]
<condition 2> [
<condition n > [
...
... code ...
... code ...
][
... code ...
])
... code ...
NetLogo
it's alive !
turtle to breeds
xcor
ycor
color
size
shape
heading
inherit
speed
energy
target
breed [diplodocus a-diplodocus]
diplodocus-own [
sleeping-time ; sleep
childrens ; nb of childrens
]
builtin variables
sleeping-time
childrens
aggressivity
breed [velociraptors a-velociraptor]
velociraptors-own [
aggressivity ; level of aggressivity
target ; target to kill
group ; my group of hunters
]
group
NetLogo
Exercice
breed [houses house]
breed [diplodocus a-diplodocus]
diplodocus-own [ target ]
to setup
; a) create nb houses
; b) create nb diplodocus
; with a random house as target
end
to go
; a) if distance to target = 0
; -> change target of diplodocus
; b) if distance to target < 1
; -> move to target
; -> else forward 1
; tick
end
t0
t1
t0
t1
NetLogo
list vs agentset / patchset
1
15
3
8
2
4
6
ask
with
set
let
...
one-of
min-one-of
max-one-of
any?
member?
of
...
RANDOMIZED
at each call
count
NetLogo
list vs agentset / patchset
Agentset are returned by primitive
or created manually
turtle-set ( list
1
3
ask turtles with [color = orange]
ask turtle 4 [ show other turtles-here ]
ask patch -9 -5 [ show turtles-on neighbors ]
ask turtles with [color = green] [ show turtles-on neighbors ]
)
(turtle-set
1
3
)
NetLogo
list vs agentset / patchset
List are returned / used by primitive
or created manually with many possibilities
list (random 10) (random 10)
list
1
3
[ 3 4 5 9]
foreach
sort / sort-by / sort-on
<- anonymous function
map
filter
similar to agentset but
MAINTAIN ORDER
NetLogo
Understanding Context
ask
[
]
set
let
color
mycolor
mycolor
blue
set
size
random 3
NetLogo
Understanding Context
ask
[
]
set
let
color
mycolor
mycolor
blue
set
size
random 3
ask
patch-here [
set
pcolor
mycolor2
let
mycolor2
mycolor - 2
]
patch-here
NetLogo
my dear neighbors
5
5
ask [
ask in-radius x [
...
]
]
1
2
0
0
NetLogo
my dear neighbors
5
5
ask [
ask in-radius 1 [
set color green
]
]
0
0
NetLogo
my dear neighbors
5
5
ask [
ask neighbors4 [
set pcolor green
]
]
0
0
NetLogo
my dear neighbors
5
5
ask [
ask neighbors with [any? turtles-here] [
set pcolor red
]
]
0
0
NetLogo
my dear neighbors
5
5
ask [
ask in-radius 1 [
set pcolor green
]
]
0
0
.
.
.
.
.
.
.
.
.
NetLogo
my dear neighbors
5
5
ask [
ask in-radius 1 [
set pcolor green
]
]
0
0
.
.
.
.
.
.
.
.
.
NetLogo
of ? or ask ?
[ energy] of
Get a value for a turtle, or values for turtles
or use it with ask to do complex things in few lines ...
ask [ in-radius 3] of
[ set color red ]
[ energy] of
[ energy] of
sum, max, min
NetLogo
of ? or ask ?
Different taste of of
max-n-of 2 [energy]
max-n-of 2 with [color = blue] [energy]
1
5
1
8
1
8
3
5
[ 15, 8, 12, 6 ]
max-n-of 2 with [color = blue] [energy]
max-one-of [energy]
1
NetLogo
of ? or ask ?
Also works with patches or agenset
1
8
5
[ 15, 8, 12, 6 ]
1
1
3
3
8
ask max-one-of [ sum [energy] of turtles-here ] [ show sum [energy] of turtles-here]
ask with-max [count turtles-here with [energy > 10]] [ set pcolor red]
NetLogo
Communicate T - P
... in-radius <number> ...
( T to T )
( T to P )
... patch-here ...
( P to T )
... other turtles-here ...
... neighbors ... ou ... neighbors4 ...
... turtles-on ...
... turtles-on ...
... patch-right/left-and-ahead ...
... turtles-at ...
... in-cone <distance> <angle> ...
NetLogo
Organize your code
With procedure and function
NetLogo
Organize your code
With procedure and function
NetLogo
Organize your code
With "finite state machine" pattern
DinoLogo
DinoLogo
step 1 : diplodocus
DinoLogo
step 2 : velociraptor
DinoLogo
step 3 : humans
DinoLogo
step 4 : Dying
DinoLogo
step 4 : state
state = next-state
apply current state
compute next-state
state
next-state
state
to-report compute-new-diplodocus-state
(ifelse
state = "exploring" [
; ... switch to eating
; ... or continue to explore
]
state = "eating" [
; ... switch to exploring
; ... or continue to eat
])
report ???
end
to apply-current-diplodocus-state
(ifelse
state = "exploring" [
; ... move action
]
state = "eating" [
; ... switch to exploring
; ... eat action
])
end
to go-diplo
ask diplodocus [
set state next-state
apply-current-diplodocus-state
set next-state compute-new-diplodocus-state
]
end
next-state
"eating"
"exploring"
DinoLogo
step 5 : obstacle
- use nw:turtles-in-radius 3
- compute all nodes & links accessible
- use nw:turtles-on-path-to
get path to next-target
get accessible nodes only
... max-one-of ...
select target (grass-qty) in these accessible patches
go to target !
sprout + create-link + neighbors
Simulation avec Netlogo - Formation M2
By sebastien rey coyrehourcq
Simulation avec Netlogo - Formation M2
- 120