Ce projet est une implémentation complète d'un système multi-agents (MAS) appliqué à une smart home, réalisée dans le cadre du cours Agents Intelligents.
L'objectif est de mettre en œuvre les concepts fondamentaux du modèle BDI (Belief – Desire – Intention) et agents réactifs à travers des agents autonomes capables de raisonner et d'agir dans un environnement partagé.
- ✅ Comprendre le fonctionnement d'un agent intelligent
- ✅ Implémenter une architecture BDI complète
- ✅ Implémenter des agents réactifs avec règles condition-action
- ✅ Séparer clairement : l'agent, l'environnement, les croyances, désirs et intentions
- ✅ Mettre en place des mécanismes de coordination et communication inter-agents
- ✅ Implémenter une organisation par rôles
- ✅ Fournir une base simple, extensible et compréhensible
Le projet est structuré en packages Java :
src/
└── com/
└── smarthome/
├── agent/
│ ├── Agent.java # Classe abstraite de base
│ ├── BDIAgent.java # Agent BDI générique
│ ├── ReactiveAgent.java # Agent réactif
│ ├── CleaningAgent.java # Agent spécialisé (nettoyage)
│ ├── DishwasherAgent.java # Agent spécialisé (vaisselle)
│ ├── GarbageCollectorAgent.java # Agent spécialisé (ordures)
│ ├── OrganizerAgent.java # Agent spécialisé (organisation)
│ ├── CoordinatorAgent.java # Agent coordinateur
│ ├── Message.java # Classe de communication
│ ├── MessageBroker.java # Courtier de messages (Singleton)
│ └── AgentRole.java # Énumération des rôles
├── bdi/
│ ├── BeliefBase.java # Base de croyances améliorée
│ ├── Desire.java # Énumération des désirs
│ └── Intentions.java # Intentions (actions à effectuer)
├── environment/
│ ├── Environment.java # Environnement principal
│ ├── Room.java # Représentation d'une pièce
│ ├── Task.java # Classe pour les tâches
│ └── SmartObject.java # Objets intelligents
├── planning/ # Logique décisionnelle complexe
│ ├── State.java # Représentation d'un état (S)
│ ├── Action.java # Représentation d'une action (A)
│ └── MDPPlanner.java # Le moteur de calcul (Solveur)
└── simulator/
└── SmartHomeSimulator.java # Simulateur principal
Utilisent un processus de délibération pour décider des actions :
-
CleaningAgent : Responsable du nettoyage des pièces
- Désir: Nettoyer l'environnement
- Cible: Pièces sales
-
DishwasherAgent : Responsable du lavage de la vaisselle
- Désir: Compléter les tâches
- Cible: Tâches WASH_DISHES
-
GarbageCollectorAgent : Responsable de la gestion des ordures
- Désir: Compléter les tâches
- Cible: Tâches THROW_GARBAGE
-
OrganizerAgent : Responsable de l'organisation des objets
- Désir: Maintenir l'ordre
- Cible: Tâches ORGANIZE_OBJECTS
-
CoordinatorAgent : Coordonne les tâches entre les agents
- Désir: Aider les autres
- Fonctionnalité: Allocation de tâches centralisée
Répondent immédiatement aux stimuli environnementaux sans délibération :
- ReactiveAgent : Applique des règles condition-action
- Pas de phase de délibération
- Réaction directe aux perceptions
┌─────────────────────────────────────────────┐
│ AGENT PERCEPTION-DELIBERATION-ACTION CYCLE │
├─────────────────────────────────────────────┤
│ 1. PERCEIVE │
│ └─ Mettre à jour les croyances │
│ sur l'état de l'environnement │
│ │
│ 2. PROCESS MESSAGES │
│ └─ Lire les messages d'autres agents |
│ |
│ 3. DELIBERATE │
│ └─ Analyser les croyances │
│ └─ Activér les désirs │
│ └─ Former les intentions │
│ │
│ 4. ACT │
│ └─ Exécuter les intentions │
│ └─ Modifier l'environnement │
│ │
│ 5. CONSUME ENERGY │
│ └─ Réduire l'énergie selon activité │
└─────────────────────────────────────────────┘
- Informations que l'agent possède sur l'état du monde
- Pièces sales, tâches en attente, tâches complétées
- Historique des messages reçus
- Capacités des autres agents
- Mis à jour à chaque cycle de perception
- Objectifs que l'agent souhaite atteindre
- Chaque agent a un ensemble de désirs
- Chaque désir a une priorité
- Exemples: Nettoyer, Compléter les tâches, Minimiser l'énergie, Aider les autres
- Actions concrètes que l'agent s'engage à exécuter
- Formées pendant la phase de délibération
- Basées sur les croyances et désirs
- Exécutées pendant la phase d'action
- Rooms : Pièces (cuisine, salon, chambre, salle de bain)
- Objects : Objets (vaisselle, ordures, outils, meubles)
- Tasks : Tâches à accomplir (CLEAN_ROOM, WASH_DISHES, THROW_GARBAGE, ORGANIZE_OBJECTS)
- Task States : États des tâches (PENDING, ONGOING, COMPLETED, FAILED)
Les agents peuvent percevoir :
- Pièces sales
- Tâches en attente
- Tâches en cours
- Tâches complétées
- Objets disponibles
Les agents peuvent :
- Nettoyer une pièce
- Assigner une tâche
- Compléter une tâche
- Déplacer un objet
- Envoyer des messages
MessageBroker (Pattern Singleton) :
- Courtier centralisé pour les messages
- Boîtes aux lettres individuelles pour chaque agent
- Types de messages: REQUEST, RESPONSE, INFORM, QUERY, NEGOTIATE
// Exemple d'envoi de message
sendMessage("AgentB", Message.MessageType.REQUEST, "Peux-tu nettoyer la cuisine?");CoordinatorAgent :
- Reçoit les tâches en attente
- Alloue les tâches aux agents appropriés
- Équilibre la charge de travail
- Considère les rôles et les capacités
AgentRole (Enum) :
- CLEANER: Nettoyeur
- DISHWASHER: Lave-vaisselle
- GARBAGE_COLLECTOR: Collecteur d'ordures
- ORGANIZER: Organisateur
- COORDINATOR: Coordinateur
- MONITOR: Moniteur
Les agents peuvent uniquement exécuter les tâches compatibles avec leur rôle.
- Java
- Aucun outil de build requis (ni Maven, ni Gradle)
Se placer dans le dossier src :
cd src
javac com/smarthome/agent/*.java com/smarthome/bdi/*.java com/smarthome/environment/*.java com/smarthome/simulator/*.javaPour lancer la simulation :
java com.smarthome.simulator.SmartHomeSimulatorLa simulation démarre avec :
- 1 CoordinatorAgent pour la coordination
- 4 BDI Agents spécialisés (Cleaner, Dishwasher, Garbage Collector, Organizer)
- 1 Reactive Agent pour démontrer les agents réactifs
- 30 pas de simulation maximum
Modifier SmartHomeSimulator.main() pour :
- Changer le nombre d'agents
- Modifier les rôles des agents
- Ajuster le nombre de pas de simulation
- Ajouter/supprimer des tâches initiales
╔══════════════════════════════════════════════════════════╗
║ ║
║ SMART HOME MULTI-AGENT SYSTEM SIMULATION ║
║ ║
╚══════════════════════════════════════════════════════════╝
📋 Initial Configuration:
Agents: 5
Max Steps: 30
Environment: Smart Apartment (4 rooms)
🤖 Agent Roster:
- Cleaner-1 (Cleaner)
- Washer-1 (Dishwasher)
- Collector-1 (Garbage Collector)
- Organizer-1 (Organizer)
- ReactiveBot-1 (Cleaner)
============================================================
SIMULATION STEP: 1
============================================================
🔍 Agent Status:
Cleaner-1 [Energy: 95] [Intentions: 0] [Active: ✓]
Washer-1 [Energy: 95] [Intentions: 0] [Active: ✓]
...
-
Singleton Pattern
MessageBroker: Instance unique pour toute la communicationEnvironment: Instance unique partagée par tous les agents
-
Abstract Factory Pattern
Agent: Classe abstraite avec usines de sous-classes
-
Strategy Pattern
- Différentes stratégies de délibération pour BDI et Reactive
-
Observer Pattern
- Agents observent l'environnement et réagissent aux changements
-
State Pattern
- États des tâches (PENDING, ONGOING, COMPLETED, FAILED)
- États des agents (ACTIVE, INACTIVE)
Agent Component Responsibility
─────────────────────────────────────────────
Agent Cycle PDA, comportement général
BDIAgent Délibération BDI spécialisée
ReactiveAgent Règles condition-action
Specialized Agents Comportements spécifiques aux rôles
CoordinatorAgent Allocation de tâches et coordination
─────────────────────────────────────────────
Environment État du monde
Room Gestion de pièce
Task Gestion de tâche
SmartObject Gestion d'objet
─────────────────────────────────────────────
BeliefBase Stockage des croyances
Desires Énumération des désirs
Intentions Gestion des intentions
─────────────────────────────────────────────
MessageBroker Communication
Message Structure de message
─────────────────────────────────────────────
SmartHomeSimulator Orchestration globale
- Le système utilise une simulation discrète par étapes
- Les croyances sont mises à jour à chaque cycle de perception
- L'énergie des agents diminue avec les actions (5 points par intention, 1 point au repos)
- Les tâches ont des priorités et des durées estimées
- Les agents peuvent communiquer directement via le
MessageBroker - Le système est thread-safe pour les opérations basiques
Ce projet illustre :
-
Architecture d'Agent
- Boucle de perception-délibération-action
- Gestion de l'énergie et des ressources
- Communication inter-agents
-
BDI (Belief-Desire-Intention)
- Formation de croyances par perception
- Gestion des désirs et priorités
- Sélection des intentions
-
Agents Réactifs
- Règles condition-action
- Pas de mémoire ou historique
- Réaction immédiate aux stimuli
-
Coordination Multi-Agent
- Allocation centralisée de tâches
- Communication par messages
- Évitement des conflits
-
Patterns de Conception
- Application pratique des design patterns
- Modularité et extensibilité
Réalisé dans le cadre du cours Agents Intelligents - L3 Informatique, Université Côte d'Azur
- Wooldridge, M. (2009). An Introduction to MultiAgent Systems
- Rao, A. S., & Georgeff, M. P. (1992). Modeling Rational Agents within a BDI Architecture
- Reactive Agent Architecture: Subsumption Architecture (Brooks, R.)