Diagnostic Medical - Système de Diagnostic Multi-Contraintes
Vue d’ensemble
Ce projet implémente un système de diagnostic médical intelligent combinant quatre approches algorithmiques complémentaires :
- Agent de Diagnostic Rationnel : Classification basée sur des règles cliniques
- Algorithme A* : Recherche informée dans l’espace d’états diagnostiques
- Algorithmes Génétiques : Optimisation évolutionnaire des paramètres diagnostiques
- Solveur Z3 : Validation par contraintes des protocoles thérapeutiques
Chacune de ces approches répond à une facette distincte du problème (classer, chercher, calibrer, vérifier) ; leur intégration en un pipeline cohérent — davantage que la maîtrise isolée de chacune — est précisément la thèse de ce cas d’étude :
flowchart LR
C1["Classer<br/>le patient"] -->|"règles cliniques"| R["Agent rationnel"]
C2["Chercher<br/>le diagnostic"] -->|"heuristique admissible"| A["Recherche A*"]
C3["Calibrer<br/>les paramètres"] -->|"espace vaste"| G["Algorithme génétique"]
C4["Vérifier<br/>le protocole"] -->|"garantie formelle"| Z["Solveur Z3"]
R --> DEC["Aide à la décision<br/>thérapeutique"]
A --> DEC
G --> DEC
Z --> DEC
Objectifs pédagogiques
- Maîtriser les algorithmes de recherche (BFS, DFS, A*)
- Comprendre la programmation par contraintes (Z3, CSP)
- Implémenter des algorithmes génétiques pour l’optimisation
- Analyser la complexité et les performances
- Appliquer l’IA au domaine biomédical (diabète type 2)
Structure du projet
Diagnostic-Medical/
├── student/
│ └── Diagnostic-Medical.ipynb # Template étudiant (à compléter)
├── solution/
│ └── Diagnostic-Medical.ipynb # Solution de référence
├── data/
│ └── patients.csv # Données de test (10 patients)
├── subject.md # Sujet complet
└── README.md # Ce fichier
Installation
Prérequis
- Python 3.8+ (recommandé: Python 3.9 ou 3.10)
- Jupyter Notebook ou JupyterLab
- Conda (optionnel mais recommandé)
Option 1 : Installation avec Conda (recommandé)
# Créer un environnement virtuel
conda create -n cc1-diagnostic python=3.9
conda activate cc1-diagnostic
# Installer Jupyter
conda install jupyter notebook
# Installer les dépendances
pip install numpy pandas matplotlib seaborn z3-solverOption 2 : Installation avec pip
# Créer un environnement virtuel
python -m venv venv
# Activer l'environnement
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# Installer Jupyter et les dépendances
pip install jupyter notebook numpy pandas matplotlib seaborn z3-solverDépendances requises
| Package | Version | Description |
|---|---|---|
numpy |
>= 1.20.0 | Calculs scientifiques |
pandas |
>= 1.3.0 | Manipulation de données |
matplotlib |
>= 3.4.0 | Visualisation |
seaborn |
>= 0.11.0 | Visualisation statistique |
z3-solver |
>= 4.8.0 | Solveur de contraintes SMT |
Utilisation
1. Pour les Étudiants
# Démarrer Jupyter
jupyter notebook
# Ouvrir le fichier
student/Diagnostic-Medical.ipynbInstructions : 1. Lisez attentivement chaque cellule markdown (théorie et explications) 2. Complétez les cellules de code marquées avec # TODO 3. Testez chaque partie avant de passer à la suivante 4. Utilisez les exemples fournis pour valider votre implémentation
2. Pour les Évaluateurs
# Ouvrir le notebook corrigé
jupyter notebook solution/Diagnostic-Medical.ipynbActions : 1. Exécuter toutes les cellules (Cell → Run All) 2. Vérifier que tous les tests passent 3. Comparer avec les travaux étudiants 4. Utiliser la grille d’évaluation du fichier subject.md
Données de test
Le fichier data/patients.csv contient 10 patients avec des profils variés :
| ID | Nom | Âge | Glycémie Jeun | HbA1c | Type |
|---|---|---|---|---|---|
| 1 | Alice | 45 | 110.0 | 6.8 | Pré-diabète |
| 2 | Bob | 58 | 140.0 | 8.2 | Diabète Type 2 |
| 3 | Claire | 35 | 90.0 | 5.5 | Normal |
| … | … | … | … | … | … |
Format CSV : - Colonnes : id, nom, age, glycemie_jeun, glycemie_postprandiale, hba1c, symptomes, antecedents, pression_arterielle, imc - Symptômes : Séparés par ; (exemple: fatigue;soif intense) - Antécédents : Séparés par ; (exemple: hypertension;surpoids)
Tests et validation
Tests Intégrés
Le notebook corrigé inclut des tests automatisés pour valider chaque composant :
# Exécuter la suite de tests complète
tests_automatises()Tests Manuels
Pour tester individuellement chaque partie :
# Test Agent de Diagnostic
tester_agent_diagnostic()
# Test Performance A*
tester_performance_astar()
# Test Convergence Génétique
tester_convergence_genetique()
# Test Validation Z3
tester_validation_z3()Exécution du Pipeline Complet
# Exécuter le pipeline d'intégration
main()Problèmes courants et solutions
1. ImportError: No module named ‘z3’
# Solution
pip install z3-solver2. FileNotFoundError: data/patients.csv
# Vérifier le chemin relatif
# Le notebook doit être exécuté depuis le répertoire Diagnostic-Medical/3. Erreur de convergence A*
# Augmenter le nombre max d'itérations
astar = AStarDiagnostic()
# Dans la méthode rechercher_diagnostic_optimal, modifier:
max_iterations = 2000 # au lieu de 10004. Z3 Solver très lent
# Simplifier les contraintes ou réduire le timeout
self.solver.set("timeout", 5000) # 5 secondesRessources complémentaires
Théorie IA
- Russell & Norvig : Artificial Intelligence: A Modern Approach, Chapitres 1, 3, 4, 6
- Dechter : Learning While Searching in Constraint-Satisfaction Problems
- Pearl : Heuristics: Intelligent Search Strategies
Algorithmes Spécifiques
- A* Search : https://en.wikipedia.org/wiki/A*_search_algorithm
- Genetic Algorithms : https://en.wikipedia.org/wiki/Genetic_algorithm
- Z3 Solver : https://github.com/Z3Prover/z3
- Constraint Programming : https://en.wikipedia.org/wiki/Constraint_programming
Applications Médicales
- ADA/EASD Guidelines : Standards diabète type 2
- WHO Diabetes : Recommandations internationales
- Medical CSP : Programmation par contraintes en santé
Critères d’évaluation
Chaque cellule à remplir ou compléter sera évaluée pour constituer la note finale sur 20.
Bonus (jusqu’à +2 points) : - Innovation algorithmique - Interface utilisateur - Tests exhaustifs - Performance exceptionnelle
Exercices d’extension
Trois exercices d’extension, laissés en squelette dans le notebook étudiant, permettent d’approfondir le pipeline au-delà du barème principal :
- un score de risque composite qui agrège plusieurs facteurs cliniques au-delà de la règle de classification de l’agent rationnel ;
- une heuristique alternative pour A* — comparer une seconde fonction admissible à celle du notebook et en mesurer l’effet sur le nombre de nœuds explorés ;
- l’ajout de contraintes d’interaction médicamenteuse au solveur Z3, pour enrichir la validation formelle du protocole thérapeutique.
Compétences développées
À la fin de ce devoir, vous aurez acquis :
- Maîtrise des algorithmes de recherche informée (A*)
- Compréhension de la programmation par contraintes (Z3)
- Pratique des algorithmes génétiques
- Application de l’IA au domaine biomédical
- Analyse de complexité et optimisation
- Documentation technique et tests
Conclusion
Ce cas d’étude illustre une idée centrale de l’IA appliquée : aucun paradigme isolé ne suffit à un problème de diagnostic réaliste. Les quatre briques se complètent au lieu de se concurrencer :
- l’agent à base de règles encode le savoir clinique explicite et fournit une première classification interprétable ;
- la recherche A* explore efficacement l’espace des hypothèses diagnostiques en se laissant guider par une heuristique admissible ;
- les algorithmes génétiques calibrent les paramètres là où l’espace de recherche est trop vaste pour une exploration exacte ;
- le solveur Z3 apporte la garantie formelle que le protocole thérapeutique retenu respecte toutes les contraintes médicales.
La valeur pédagogique tient précisément à cette intégration : reconnaître, pour chaque facette d’un problème (classer, chercher, optimiser, vérifier), quel outil est le mieux adapté, puis composer ces outils en un pipeline cohérent. C’est cette capacité d’orchestration — davantage que la maîtrise de chaque algorithme pris isolément — qui distingue un système d’aide à la décision robuste.
Bonne chance avec votre implémentation !