DarainHyder
Initial clean deploy commit: removing binary files and venv
25732fb
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)