Bonjour, ici John Boward, pour les cours du Complexity Explorer
Nous allons regarder les étapes pour les solutions aux
derniers problèmes de la série dynamique pour niveau avancé
et ce sera très amusant. Nous allons construire un modèle Net Logo
à partir de rien et vous pourrez voir mes techniques pour construire des modèles.
Bien sûr, il existe plusieurs façons de le faire
et le plus important lorsqu'on programme est de tester et jouer avec les commandes et
ne pas avoir peur de faire beaucoup d'erreurs, car le seul moyen d'apprendre
est de faire des milliers d'erreurs.
J'ai déjà utilisé ces modèles,
j'ai construit des centaines de modèles et je suis certain que je vais faire des erreurs
en programmant celui-là
mais cela fait partie de la programmation.
Niveau avancé : nous allons faire
un modèle
qui utilise des dynamiques de populations basées sur des agents.
Nous ne basons pas cela sur une équation, nous allons créer de petites entitées qui
reproduisent, et nous allons voir si nous pouvons
créer un comportement qui est conforme
à ce que le modèle logistique des populations
prétend décrire. Dans un sens, on crée
un comportement qui dérive du
comportement véritable des agents.
Philosophiquement, c'est intéressant
car ces types de modèles sont de bas niveau
et le véritable comportement collectif provient des
propriétés et interactions des agents.
Commençons tout de suite. Voici Net Logo, l'écran que nous voyons lorsque l'on débute.
Une simple interface.
Lorsque je commence un nouveau modèle, j'ajoute toujours
un bouton Setup
et typiquement un bouton Step,
dans un modèle comme celui-là,
et un bouton Go.
Bien sûr, ils réfèrent à des procédures qui n'ont pas encore été écrites.
Alors je suis toujours prudent et
je les enligne et laisse toujours le même espace entre les boutons
c'est une habitude étrange chez moi, mais c'est ainsi que je le fais.
J'étiquette aussi
mes modèles pour me souvenir de leur emplacement
dans le futur. Alors voilà.
Ce sont les bases que je fais lorsque je commence à faire un modèle.
Commençons. Regardons ce que nous voulons faire: nous voulons créer
quelques agents et nous voulons qu'ils
reproduisent et nous allons dessiner
un graphique pour voir si cela a l'air d'une courbe sigmoïde. Alors nous allons aussi tracer.
Débarassons-nous des bases
et nous pouvons nommer ce graphique
'population'
Nous savons que
ce sera la population en fonction du temps. C'est toujours une bonne idée d'étiquetter dès le départ
les
axes pour ne pas oublier.
[tape au clavier]
Alors, nous nous sommes débarrassés de quelques préléminaires.
Ensuite, nous allons faire
un modèle Setup qui crée des agents, alors voyons tout de suite le code
et nous disons 'to setup'
et j'écris toujours le
début et la fin en premier, parce je sais qu'ensuite nous aurons à le faire.
Nous savons que nous voulons créer un certain nombre
initial. Nous avons probablement un
curseur pour le faire mais nous pouvons simplement
en créer un maintenant pour que nous puissons mettre cela
hors de notre chemin. Retournons à l'interface.
Créer un curseur et le nommer
'population initiale'
et nous copions cela
et nous allons
créer ce nombre de
populations initiales, et nous avons ensuite l'opportunité de
leur donner
des entités nouvellement créées, ainsi que des propriétés. Je vais les mettre de couleur
verte. Et leur forme
disons, un cercle
et leur taille...
à... laissons-la ainsi. Initialement, leur taille est de 1.
Maintenant nous
allons rencontrer un problème avec cela maintenant, et je veux
vous le montrer parce que...
Setup fonctionne maintenant et va créer 50 individus par défaut alors je vais
faire cela. Je vais
partir Setup et vous remarquerez qu'on
dirait qu'il n'y a qu'un seul agent créé, mais en fait il y en a 27 et
ils sont tous
créés les uns par-dessus les autres.
Alors pour les déplacer
nous devons aller plus loin,
and leur dire que chacun doit s'avancer de 10.
Ensuite nous partons Setup, et nous voyons
qu'ils vont tous, puisqu'ils ont un déplacement aléatoire, qu'ils vont tous se déplacer à l'extérieur.
Ce n'est pas exactement ce que nous voulons, n'est-ce pas? Ça a un air
trop organisé et trop
artificiel alors nous ne nous sommes toujours pas débarrassés
de notre 1 initial. Cela me rappelle que lorsque l'on fait un Setup
nous commençons presque toujours avec 'clear-all' ('vider-tout')
dont le raccourci est 'ca' et 'clear-all' va tout annuler cela.
À la place d'utiliser cette commande de création, ce qui est la
façon la plus simple de
créer une population d'agents
nous allons faire autre chose et nous allons
'ask the patches' ('demander aux taches')
et je vais demander un certain nombre de patches (taches) avec 'ask n-of'
population initiale
alors je demande à ce nombre de taches
de
'sprout' ('germer')
et, bien sûr, une fois que j'ai décidé à qui je parle, (je parle aux taches)
et ce que je leur demande de faire est cela:
'sprout' veut dire:
"vous les 12 taches...
je veux que chacune de vous en fasse germer une autre et ensuite...
lui dire de se colorer en vert, et que sa forme est un cercle...
et d'avancer de 10", mais nous n'avons plus besoin de ce 'forward 10' maintenant.
Regardons si cela fonctionne.
Bien sûr,
il demande aléatoirement aux taches, à chaque fois qu'on le pèse...
demande aléatoirement à certains jeux de taches...
27, dans notre cas, ou 80 si on le veut.
Alors nous avons une population initiale de taches
que nous pouvons contrôler avec seulement une ligne de code.
Alors la prochaine étape est...
...de penser à cela: qu'allons-nous vouloir faire avec ceux-ci? Nous voulons
demander aux
agents, ces petits points verts
de se reproduire, c'est ce que nous voulons.
Ils auront besoin d'avoir la capacité de mourir
parce que nous voulons pas que les générations s'entre-coupent alors
nous avons une génération-mère qui donnera la génération-fille
et la génération-mère meurt. Cela signifie que nous pourrons suivre les suites de générations.
Nous avons aussi
besoin qu'elles se dispersent pour qu'elles ne
finissent pas les unes sur les autres et
ce sera tout simplement plus facile de les suivre visuellement si elles sont
chacunes placées sur leur propre taches.
Nous n'avons aucune reproduction. Nous pouvons le faire mais tout
sera plus compliqué. Alors regardons simplement comment le faire.
Je vais dire qu'à
chaque temps, ils se reproduiront. Alors
je vais dire 'Step'. Ils feront tout ce qu'ils ont besoin de faire
alors ceci n'est qu'un genre de pseudocode.
Je vais dire qu'ils ont besoin de
se reproduire...
que les parents doivent mourir...
et que ceux qui restent doivent se disperser.
Maintenant c'est fait.
Ce ne seront que les noms des procédures que je n'ai pas écrit encore.
Mais cette étape est seulement celle pour laquelle nous nommons les procédures alors
pensons à la façon dont nous allons faire fonctionner la reproduction.