ai/agents/rule-based-agent.js

/**
 * @fileoverview
 * Agent für regelbasierte KI-Entscheidungen.
 * Nutzt Entscheidungsbäume (Decision Trees) zur Auswahl von Zügen.
 */

/**
 * Ein Agent, der Entscheidungen basierend auf einem Entscheidungsbaum trifft.
 * @class RuleBasedAgent
 * @extends Agent
 */
class RuleBasedAgent extends Agent {
    /**
     * Der Regelbaum (siehe rule-structure.js).
     * @param {DecisionTree} tree 
     */
    constructor(tree) {
        super(tree.name || "Regel-KI");
        this.tree = tree;
    }

    /**
     * Delegiert die Entscheidung an den Baum.
     * @param {GameState} gameState 
     * @returns {Object|null} Das Ergebnis des Baums.
     */
    getAction(gameState) {
        // 🔴 NEURALGISCH: RuleBasedAgent-Aufruf (Phase 3)
        DebugConfig.log(DEBUG_DOMAINS.AI_AGENTS, 'debug',
            'RuleBasedAgent.getAction() called', {
                agentName: this.name,
                treeName: this.tree.name,
                validMoves: gameState.getAllValidMoves ? gameState.getAllValidMoves().length : 0
            });
        
        const decision = this.tree.getDecision(gameState);
        
        // 🔴 NEURALGISCH: Rule Decision Result (Phase 3)
        if (decision) {
            DebugConfig.log(DEBUG_DOMAINS.AI_AGENTS, 'debug',
                'RuleBasedAgent: Decision made', {
                    move: decision.move,
                    reason: decision.reason || 'unspecified',
                    confidence: decision.confidence || 'unknown'
                });
        } else {
            DebugConfig.log(DEBUG_DOMAINS.AI_AGENTS, 'warn',
                'RuleBasedAgent: No decision made', {
                    treeName: this.tree.name,
                    boardState: 'no_applicable_rules'
                });
        }
        
        return decision;
    }
}