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] [tape au clavier] [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.