All files / web/src/test/journey-simulator/profiles average-learner.ts

0% Statements 0/78
0% Branches 0/1
0% Functions 0/1
0% Lines 0/78

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79                                                                                                                                                             
/**
 * Average Learner Profile (Hill Function Model)
 *
 * A student with typical learning characteristics:
 * - Medium K value (reaches 50% mastery at 12 exposures)
 * - Standard hill coefficient (balanced curve)
 * - Most skills learned normally, but MISSED the five complements lesson
 * - Moderate help usage
 *
 * REALISTIC SCENARIO: Student wasn't paying attention during five complements.
 * They understand basics and can do ten complements, but five complements confuse them.
 *
 * With K=12, n=2.0:
 * - 36+ exposures → P ≈ 90%+ (strong skills - HIGH CONTRAST)
 * - 0 exposures → P = 0% (missed skills)
 *
 * KEY: Strong skills must be ~90%+ for BKT to distinguish from weak (0%)
 */

import type { StudentProfile } from '../types'

/**
 * Average learner who missed five complements lesson.
 * Strong in basics and ten complements, weak in five complements.
 */
const initialExposures: Record<string, number> = {
  // Basic skills - well learned (40 exposures → ~92%)
  'basic.directAddition': 40,
  'basic.heavenBead': 38,
  'basic.simpleCombinations': 36,
  'basic.directSubtraction': 38,
  'basic.heavenBeadSubtraction': 36,
  'basic.simpleCombinationsSub': 35,
  // Five complements - MISSED THIS LESSON (0 exposures → 0%)
  'fiveComplements.4=5-1': 0,
  'fiveComplements.3=5-2': 0,
  'fiveComplements.2=5-3': 0,
  'fiveComplements.1=5-4': 0,
  // Ten complements - well learned (36 exposures → ~90%)
  'tenComplements.9=10-1': 40,
  'tenComplements.8=10-2': 38,
  'tenComplements.7=10-3': 36,
  'tenComplements.6=10-4': 36,
  'tenComplements.5=10-5': 36,
}

/** Skills this student is weak at (for test validation) */
export const AVERAGE_LEARNER_WEAK_SKILLS = [
  'fiveComplements.4=5-1',
  'fiveComplements.3=5-2',
  'fiveComplements.2=5-3',
  'fiveComplements.1=5-4',
]

export const averageLearnerProfile: StudentProfile = {
  name: 'Average Learner (Missed Five Complements)',
  description: 'Strong in basics and tens, missed five complements lesson',

  // K = 12: Reaches 50% proficiency at 12 exposures (average)
  halfMaxExposure: 12,

  // n = 2.0: Standard curve with balanced onset
  hillCoefficient: 2.0,

  initialExposures,

  // Moderate help usage: 55% no help, 45% uses help
  helpUsageProbabilities: [0.55, 0.45],

  // Help bonus: 15% additive when help is used
  helpBonuses: [0, 0.15],

  // Average response time
  baseResponseTimeMs: 5500,

  // Moderate variance
  responseTimeVariance: 0.35,
}