import math from datetime import datetime class KnowledgeRuleEngine: """ Expert system for knowledge tracking decisions. """ def calculate_forgetting(self, last_practice_date, current_knowledge): """ Apply Ebbinghaus forgetting curve. """ if not last_practice_date: return current_knowledge days_elapsed = (datetime.utcnow() - last_practice_date).days if days_elapsed <= 0: return current_knowledge # R = e^(-t/S) # Stability (S) increases with knowledge strength stability = max(1, current_knowledge * 30) retention = math.exp(-days_elapsed / stability) return current_knowledge * retention def predict_growth(self, current_knowledge, is_correct, difficulty): """ Predict new knowledge level after an interaction. """ learning_rate = 0.1 difficulty_weight = 1.0 if difficulty == "advanced": difficulty_weight = 1.2 elif difficulty == "beginner": difficulty_weight = 0.8 if is_correct: # Logarithmic growth: harder to improve as you get closer to 1.0 growth = learning_rate * difficulty_weight * (1 - current_knowledge) return min(1.0, current_knowledge + growth) else: # Penalty is smaller than growth penalty = learning_rate * 0.5 * current_knowledge return max(0.0, current_knowledge - penalty)