Each topic node has an estimated mastery level and a fixed
difficulty. Before recommending, the engine estimates the
learner's probability of success on every not-yet-mastered topic
using a logistic (item-response-style) model, then picks the one
whose predicted success sits closest to the target — the
"desirable difficulty" zone that maximizes learning without
triggering frustration or boredom.
P(correct) = 1 / (1 + exp(-(mastery - difficulty)))
next = argmin_topic | P(correct) - target |
mastery' = mastery + lr · (correct ? (1-mastery) : -0.3·mastery)
- Target success probability — the sweet-spot success rate the recommender aims for on each pick; higher targets choose easier topics, lower targets choose harder ones.
- Learning rate — how much a single practice attempt moves the mastery estimate.
- Recommend next / Auto-run — steps the engine one recommendation at a time, or runs continuously.
- Presets — Cautious (high target, gentle pacing), Balanced (classic ~75% zone of proximal development), Challenge (low target, harder picks).
This mirrors how real adaptive-learning platforms sequence
content: rather than a fixed curriculum, the next item is chosen
per-learner from a live estimate of what they can almost, but not
quite yet, do on their own.