Files
TermNSI/Projets/wator/README.md

194 lines
4.5 KiB
Markdown
Raw Normal View History

2024-11-18 08:29:38 +01:00
# 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
Lobjectif 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
- **Lactivité 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()`
```