File size: 7,574 Bytes
a23022a 5b6a5d0 a23022a f16ce6c 161c930 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
---
license: other
language:
- fr
pipeline_tag: robotics
tags:
- Chiot robot
- Simulation de décisions
- cerveau d'animaux de compagnie (IA)
---
## 📄 Documentation du Modèle MiRobot

### 🤖 Présentation du Modèle MiRobot : Simulation de Chiot Robot
**MiRobot** est un modèle de robotique basé sur l'**Apprentissage par Renforcement (RL)**, conçu pour simuler le comportement primaire et les interactions d'un chiot robot. Développé par Clemylia, ce modèle vise à démontrer comment un agent d'Intelligence Artificielle peut apprendre à répondre à des commandes externes tout en gérant ses besoins internes.
Ce modèle est idéal pour l'étude et l'expérimentation dans les domaines de la robotique simulée et des systèmes d'agents autonomes.
-----
### 🚀 Démarrage Rapide
Pour utiliser MiRobot, vous devez disposer d'un environnement Python avec les bibliothèques **Gymnasium** et **Stable Baselines3** installées.
#### 1\. Installation des Dépendances
```bash
pip install gymnasium stable-baselines3 huggingface_hub
```
#### 2\. Chargement et Exécution du Modèle
Le script suivant télécharge automatiquement l'environnement personnalisé et le modèle entraîné depuis Hugging Face, puis exécute une courte simulation.
```python
import gymnasium as gym
from stable_baselines3 import PPO
from gymnasium import register
from huggingface_hub import hf_hub_download
import os
# --- PARAMÈTRES DU DÉPÔT ---
REPO_ID = "Clemylia/MiRobot"
MODEL_FILE = "mirobot_final_model.zip"
ENV_SCRIPT_FILE = "MiRobotEnv.py"
ENV_ID = 'MiRobot-v0'
# 1. Téléchargement des Fichiers
env_path = hf_hub_download(repo_id=REPO_ID, filename=ENV_SCRIPT_FILE)
model_path = hf_hub_download(repo_id=REPO_ID, filename=MODEL_FILE)
# 2. Chargement de la Classe d'Environnement (MiRobotEnv)
try:
with open(env_path, 'r') as f:
exec(f.read())
except Exception as e:
print(f"Erreur lors du chargement de l'environnement: {e}")
exit()
# 3. Enregistrement de l'Environnement Custom
try:
register(
id=ENV_ID,
entry_point='MiRobotEnv:MiRobotEnv',
)
except gym.error.UnregisteredEnv:
pass # Déjà enregistré
# 4. Chargement du Modèle Entraîné (PPO)
model = PPO.load(model_path)
print("✅ Modèle MiRobot chargé et prêt pour l'inférence.")
# 5. Simulation (Inférence)
env = gym.make(ENV_ID)
obs, info = env.reset()
action_map = {0: "S'Arrêter", 1: "Avancer", 2: "Tourner G", 3: "Tourner D"}
print("\n--- Démarrage de la Simulation MiRobot ---")
for i in range(20):
action, _states = model.predict(obs, deterministic=True)
obs, reward, terminated, truncated, info = env.step(action)
print(f"[Pas {i+1}] Action Choisie: {action_map[action]}")
env.render() # Affiche l'état interne de MiRobot
if terminated or truncated:
obs, info = env.reset()
env.close()
print("\nSimulation terminée.")
```
-----
### 🧠 Détails du Modèle et de l'Environnement
Le modèle **MiRobot** prend ses décisions en interprétant un vecteur d'état (Observation) et choisit une action parmi quatre options (Action).
#### A. Espace d'Observation (L'état du Chiot)
L'observation est un vecteur de 5 nombres décimaux (`float`) que l'agent d'IA utilise pour prendre une décision.
| Index | Nom de la Variable | Plage de Valeurs | Rôle |
| :---: | :--------------- | :-------------- | :--- |
| **0** | `Commande_Avancer` | $0.0$ ou $1.0$ | Commande binaire du maître (1 si demande d'avancer). |
| **1** | `Commande_Tourner` | $0.0$ ou $1.0$ | Commande binaire du maître (1 si demande de tourner). |
| **2** | `Faim` | $0.0$ (Pleine) à $1.0$ (Affamée) | Niveau de faim interne (augmente avec le temps). |
| **3** | `Sommeil` | $0.0$ (Éveillé) à $1.0$ (Fatigué) | Niveau de fatigue interne (augmente avec le temps). |
| **4** | `Humeur` | $-1.0$ (Mauvaise) à $1.0$ (Joyeuse) | État émotionnel du chiot (influencé par la faim/sommeil). |
#### B. Espace d'Action (Ce que MiRobot peut faire)
Le modèle sélectionne une action discrète à chaque pas de temps.
| ID d'Action | Action du Robot |
| :---------: | :------------- |
| **0** | **S'arrêter** (ou ne rien faire) |
| **1** | **Avancer** |
| **2** | **Tourner à gauche** |
| **3** | **Tourner à droite** |
-----
### 🏅 Fonction de Récompense (Ce que MiRobot apprend)
Le modèle PPO a été entraîné pour maximiser la récompense cumulée, ce qui signifie qu'il a appris à :
* **Obéir (Récompense Positive 🏆) :** Choisir l'action demandée par le maître (`Commande_Avancer` ou `Commande_Tourner`).
* **Maintenir le bien-être (Récompense/Pénalité) :** L'agent est pénalisé proportionnellement à ses niveaux de **Faim** et de **Sommeil**, encourageant implicitement l'intégration future d'actions de bien-être (dormir, manger) si le modèle est étendu.
-----
### 🛠️ Contribution et Extension
Ce projet est une preuve de concept. Nous encourageons les développeurs à étendre **MiRobot** en ajoutant :
1. **Actions Supplémentaires :** Ajouter des actions comme "Manger" ou "Dormir" pour que l'agent puisse activement réduire ses états de `Faim` et `Sommeil`.
2. **Simulation 2D/3D :** Intégrer un rendu visuel (avec Pygame ou Unity) à la méthode `render()` pour visualiser le chiot se déplaçant dans un espace physique.
N'hésitez pas à forker le dépôt sur Hugging Face pour proposer des améliorations \!
code exemple d'utilisation
```
import gymnasium as gym
from stable_baselines3 import PPO
from gymnasium import register
from huggingface_hub import hf_hub_download
import os
import sys # Import sys
# --- PARAMÈTRES DU DÉPÔT ---
REPO_ID = "Clemylia/MiRobot"
MODEL_FILE = "mirobot_final_model.zip"
ENV_SCRIPT_FILE = "MiRobotEnv.py"
ENV_ID = 'MiRobot-v0'
# 1. Téléchargement des Fichiers
env_path = hf_hub_download(repo_id=REPO_ID, filename=ENV_SCRIPT_FILE)
model_path = hf_hub_download(repo_id=REPO_ID, filename=MODEL_FILE)
# 2. Chargement de la Classe d'Environnement (MiRobotEnv)
# Extract the directory of the downloaded environment script
env_dir = os.path.dirname(env_path)
# Add this directory to sys.path so Python can find it as a module
if env_dir not in sys.path:
sys.path.insert(0, env_dir) # Add to the beginning of sys.path
try:
# No need for exec(f.read()) anymore, as gymnasium.make will handle the import
pass
except Exception as e:
print(f"Erreur lors du chargement de l'environnement: {e}")
exit()
# 3. Enregistrement de l'Environnement Custom
try:
register(
id=ENV_ID,
entry_point='MiRobotEnv:MiRobotEnv', # This will now try to import MiRobotEnv module
)
except gym.error.UnregisteredEnv:
pass # Déjà enregistré
# 4. Chargement du Modèle Entraîné (PPO)
model = PPO.load(model_path)
print("✅ Modèle MiRobot chargé et prêt pour l'inférence.")
# 5. Simulation (Inférence)
env = gym.make(ENV_ID)
obs, info = env.reset()
action_map = {0: "S'Arrêter", 1: "Avancer", 2: "Tourner G", 3: "Tourner D"}
print("\n--- Démarrage de la Simulation MiRobot ---")
for i in range(20):
action, _states = model.predict(obs, deterministic=True)
obs, reward, terminated, truncated, info = env.step(action)
print(f"[Pas {i+1}] Action Choisie: {action_map[action.item()]}") # Fixed: Use .item() to get scalar from numpy array
env.render() # Affiche l'état interne de MiRobot
if terminated or truncated:
obs, info = env.reset()
env.close()
print("\nSimulation terminée.")
``` |