/**
* @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;
}
}