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 :

  1. Agent de Diagnostic Rationnel : Classification basée sur des règles cliniques
  2. Algorithme A* : Recherche informée dans l’espace d’états diagnostiques
  3. Algorithmes Génétiques : Optimisation évolutionnaire des paramètres diagnostiques
  4. 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-solver

Option 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-solver

Dé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.ipynb

Instructions : 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.ipynb

Actions : 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-solver

2. 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 1000

4. Z3 Solver très lent

# Simplifier les contraintes ou réduire le timeout
self.solver.set("timeout", 5000)  # 5 secondes

Ressources 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 !

Retour au sommet