Liigu sisu juurde

NB-1 — BKT nullist

See märkmik on ~30 rida nüri, mis taastab BKT otsast lõpuni. Eesmärk: tõestada TS-i rakendamist saidil web/lib/bkt.ts vastab Pythoni viitele täpselt.

Tulekul: interaktiivne JupyterLite saidil /lab/ (3c etapp). Praegu - staatiliselt renderdatud.

import numpy as np
import matplotlib.pyplot as plt
from dataclasses import dataclass
DEFAULT = {"pInit": 0.2, "pTransit": 0.1, "pSlip": 0.1, "pGuess": 0.2}

Mudel nelja funktsiooniga

Jaotis «Mudel nelja funktsiooniga»
def p_solve(pL, params=DEFAULT):
return pL * (1 - params["pSlip"]) + (1 - pL) * params["pGuess"]
def bkt_update(pL, observed_correct, params=DEFAULT):
pS, pG, pT = params["pSlip"], params["pGuess"], params["pTransit"]
if observed_correct:
post = (pL * (1 - pS)) / (pL * (1 - pS) + (1 - pL) * pG)
else:
post = (pL * pS) / (pL * pS + (1 - pL) * (1 - pG))
return post + (1 - post) * pT
def closeness(p, target=0.7, sigma2=0.03):
return np.exp(-((p - target) ** 2) / sigma2)
def joint_p_solve(pLs, params=DEFAULT):
"""Geometric mean of per-skill P(solve)."""
p = np.array([p_solve(x, params) for x in pLs])
return np.exp(np.mean(np.log(np.clip(p, 1e-6, 1.0))))

See on kogu BKT matemaatika – alla 20 rea.

Terve mõistuse kontroll vs TS

Jaotis «Terve mõistuse kontroll vs TS»

Taasesitage ülevaadet 7. peatükist: Ivan alustab P(L0)=0.2P(L_0) = 0.2, vastab kuus korda järjekorras ✗✓✓✗✗✗, lõplik P(L)0.166P(L) \approx 0.166.

pL = 0.2
trace = [pL]
for ans in [False, True, True, False, False, False]:
pL = bkt_update(pL, ans)
trace.append(round(pL, 4))
print(trace)
# Ожидаем (с округлением):
# [0.2, 0.057, 0.247, 0.595, 0.196, 0.116, 0.166]

Numbrid täpselt vastavad TS-ile ja õppejuhendile.

fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(trace, marker='o', color='#9333ea', linewidth=2)
ax.axhline(0.7, color='orange', linestyle='--', label='ZPD target')
ax.set_xlabel('шаг')
ax.set_ylabel('P(L)')
ax.set_ylim(0, 1)
ax.set_title("P(L) Ивана — навык 'раскрытие скобок'")
ax.legend()
ax.grid(alpha=0.3)
plt.show()
xs = np.linspace(0, 1, 100)
ys = [p_solve(x) for x in xs]
plt.figure(figsize=(8, 4))
plt.plot(xs, ys, color='#0ea5e9', linewidth=2)
plt.axhline(0.7, color='orange', linestyle='--', label='ZPD')
plt.axvline(0.5, color='gray', linestyle=':', alpha=0.5)
plt.fill_between(xs, 0.6, 0.8, alpha=0.15, color='orange', label='ZPD band')
plt.xlabel('P(L)')
plt.ylabel('P(solve)')
plt.title('P(solve) = P(L)·(1−P(S)) + (1−P(L))·P(G)')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

Vaikimisi jookseb segment vahemikus (0, 0,2) kuni (1, 0,9). P(L)=0.71P(L) = 0.71P(solve)0.7P(\text{solve}) \approx 0.7 — maandub ZPD-le.

Mida see märkmik TS-is kinnitab

Jaotis «Mida see märkmik TS-is kinnitab»
FunktsioonTSPythonSobivad?
“pSolve(pL)“web/lib/bkt.ts:29”p_lahendada”
“bktUpdate(pL, c)“web/lib/bkt.ts:33”bkt_update”
“lähedus(p)""web/lib/bkt.ts:120”lähedus
ühine pSolve (GM)web/lib/bkt.ts:111ühine_p_lahendamine

Nii et TS-tuum mahub 30 Pythoni reale ja vastupidi. See lihtsus on BKT pealkirja eelis.

  • NB-2 – Parameetri tundlikkus – haprad parameetrirežiimid.
  • NB-3 — EM-liitmik (varsti).
  • NB-4 — IRT vs BKT (varsti).
  • NB-5 — klassi simulatsioon (varsti).