# AI Framework - Unified Decision System ## Philosophie Le système d'IA de Warfactory repose sur un **framework unifié de prise de décision par scoring**. Tous les types d'IA (tactique, opérationnelle, économique, diplomatique) utilisent le même pattern fondamental : 1. **Générer options** disponibles dans le contexte actuel 2. **Scorer chaque option** selon poids configurables et situation 3. **Choisir la meilleure option** (highest score) 4. **Exécuter l'action** correspondante Ce pattern unifié permet : - **Cohérence** : Même logique à travers tous les systèmes IA - **Configurabilité** : Comportements ajustables via JSON - **Apprentissage** : Reinforcement Learning ajuste les poids - **Modularité** : Nouveaux types de décisions ajoutables facilement - **Testabilité** : Chaque décision isolée et vérifiable ## Architecture Globale ### Hiérarchie des Modules IA ``` AI Framework ├── Core Decision System │ ├── IDecision (interface de base) │ ├── Decision Factory (création objets) │ └── Scoring Engine (évaluation uniforme) │ ├── Helper Modules (services, pas de décisions) │ ├── PathfinderModule (calcul chemins) │ ├── AcquisitionModule (sélection cibles) │ └── MovementModule (exécution mouvement) │ ├── Decision Modules (utilisent helpers) │ ├── TacticalModule (combat temps-réel) │ ├── OperationalModule (stratégie bataille) │ ├── CompanyAIModule (business) │ └── StateAIModule (politique) │ └── Data Modules (consultés par tous) ├── DiplomacyModule (relations, traités) └── EconomyModule (marché, prix) ``` ### Flux de Décision Type ``` OperationalModule ↓ (donne posture: "rush blindé") TacticalModule ↓ (demande chemins pour flanking) PathfinderModule → retourne 3 chemins possibles ↓ (demande cibles prioritaires) AcquisitionModule → retourne 5 cibles scorées ↓ (choisit meilleure tactique) TacticalModule → décision: flanking par chemin 2, cible 1 ↓ (exécute mouvement) MovementModule → unités se déplacent ``` ## Interface IDecision - Core Pattern ### Définition Toutes les décisions IA implémentent cette interface : ```cpp class IDecision { public: virtual ~IDecision() = default; // 1. Générer toutes les options disponibles virtual std::vector