4.5 KiB
TP : Simulation Wa-Tor - Proies et Prédateurs
Introduction
Wa-Tor est une simulation de type proie-prédateur. Dans une mer torique, évoluent des thons (les proies) et des requins (les prédateurs). Ces deux espèces se déplacent, se reproduisent, et interagissent selon des règles spécifiques.
- Les requins doivent manger des thons pour survivre.
- Les thons vivent éternellement tant qu'ils ne sont pas dévorés.
La Mer
La mer est modélisée par une grille torique à deux dimensions.
Chaque case de cette grille peut contenir :
- Rien (case vide),
- Un thon,
- Un requin.
Chaque case possède quatre voisines :
- Nord (N),
- Sud (S),
- Est (E),
- Ouest (O).
Les Poissons
Thons
- Caractéristique : Temps de gestation.
- Initialisation : à une valeur commune, appelée durée de gestation des thons.
Requins
- Caractéristiques :
- Temps de gestation.
- Énergie.
- Initialisation :
- Durée de gestation des requins.
- Énergie des requins.
Simulation et Comportements
Étapes d'une Simulation
À chaque pas de simulation, une case est sélectionnée aléatoirement.
Deux scénarios possibles :
- La case est vide : Rien ne se passe.
- La case est occupée : Le poisson applique son comportement.
Comportement des Thons
-
Déplacement
- Le thon choisit une case voisine libre au hasard.
- Si aucune case libre, il reste sur place.
-
Reproduction
- Son temps de gestation diminue de 1.
- Si ce temps atteint 0 :
- Le thon se reproduit sur la case qu'il quitte (s'il s'est déplacé).
- Son temps de gestation est réinitialisé.
Comportement des Requins
-
Énergie
- Le requin perd 1 point d'énergie.
-
Déplacement
- Il cherche une case voisine contenant un thon pour le manger.
Si une telle case existe :- Il s'y déplace et mange le thon.
- Son énergie est réinitialisée.
- Sinon, il choisit une case voisine vide.
- S'il n'y en a pas, il reste sur place.
- Il cherche une case voisine contenant un thon pour le manger.
-
Mort
- Si l'énergie du requin atteint 0, il meurt.
-
Reproduction
- Son temps de gestation diminue de 1.
- Si ce temps atteint 0 :
- Il se reproduit sur la case qu'il quitte (s'il s'est déplacé).
- Son temps de gestation est réinitialisé.
Phénomènes Émergents
La simulation peut générer des cycles proies-prédateurs si les paramètres sont bien choisis.
Paramètres Clés
- Temps de gestation des thons.
- Énergie des requins.
- Durée de gestation des requins.
Pour observer un cycle périodique, il faut respecter :
temps gestation des thons < énergie des requins < durée gestation des requins.
Configuration Initiale
- 30% des cases occupées par des thons.
- 10% des cases occupées par des requins.
Valeurs suggérées :
- Temps gestation des thons : 2.
- Énergie des requins : 3.
- Durée gestation des requins : 5.
Travail à Réaliser
L’objectif est de programmer une simulation Wa-Tor sur un nombre donné de pas.
Étapes
- Concevoir les structures de données.
- Décomposer le programme en fonctions ou classes.
- Programmer et tester progressivement.
Questions Clés
- Quels défis vos élèves pourraient-ils rencontrer ?
- Quelles notions ce TP permet-il d’évaluer ?
Rendu Attendu
- L’activité complète en markdown.
- Corrigé détaillé.
- Notions abordées dans l'activité.
Déposez votre travail sur GitLab avec votre enseignant ajouté comme développeur.
Compléments
Affichage des Résultats
Pour visualiser l'évolution de la mer, on peut afficher l'état de la grille tous les 100 pas, avec une petite pause entre chaque affichage :
import time
time.sleep(0.1) # pause de 1/10e de seconde
Analyse des Populations
Ajoutez des variables globales pour suivre :
• Nombre de thons.
• Nombre de requins.
Enregistrez ces données à chaque pas sous forme de triplets :
(numéro du pas, nombre de thons, nombre de requins).
Tracé des Courbes
Utilisez pylab pour visualiser l’évolution des populations :
`import pylab`
`data_x = [pas1, pas2, ..., pasN]`
`data_y1 = [nb_thons1, nb_thons2, ..., nb_thonsN]`
`data_y2 = [nb_requins1, nb_requins2, ..., nb_requinsN]`
`pylab.plot(data_x, data_y1, label="Thons")`
`pylab.plot(data_x, data_y2, label="Requins")`
`pylab.title("Évolution des populations")`
`pylab.legend()`
`pylab.show()`