# 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** : 1. *Temps de gestation*. 2. *É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 : 1. La case est vide : **Rien ne se passe**. 2. La case est occupée : **Le poisson applique son comportement**. ### Comportement des Thons 1. **Déplacement** - Le thon choisit une case voisine libre au hasard. - Si aucune case libre, il reste sur place. 2. **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 1. **Énergie** - Le requin perd 1 point d'énergie. 2. **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. 3. **Mort** - Si l'énergie du requin atteint 0, il meurt. 4. **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 1. **Concevoir les structures de données**. 2. **Décomposer le programme** en fonctions ou classes. 3. **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 : ```python 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 : ```python `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()` ```