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

![MiRobot](http://www.image-heberg.fr/files/17604561812362382903.jpg)

### 🤖 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.")
```