commit d01528a063b3d747c9fe5ea5b7e56c7e85fef0a1 from: Sven M. Hallberg date: Thu Nov 09 19:11:08 2023 UTC use overall rate as baseline weight commit - 7e15a2c893e203a68e2edce3688ffbecb938cd8e commit + d01528a063b3d747c9fe5ea5b7e56c7e85fef0a1 blob - 17917dd4c6bd7662840459cb059ea173dcfb1197 blob + 18cb5b0e703211165baf00b3d5e8956b84422e2c --- NOTES +++ NOTES @@ -188,6 +188,21 @@ Own thoughts: - If the intended use is to start every session at the beginning, I think I prefer starting with 4 characters. Otherwise the initial bunch of of 7s and Qs is much too simple (only distinguishing two characters is mechanical). +- After a while of good performance on known characters, these tend to become + so rare that they are forgotten until one eventually reappears, leading to + frustrating errors and less effective learning. At first, I considered + clamping the error estimate at some minimum value, but decided against + tampering with measurements to counter their consequences. The idea I came + up with instead is to use the overall error rate as a baseline weight when + selecting the symbol to sound, i.e. each symbol's weight is the current + overall rate plus that symbol's individual rate. This means that "good" + symbols still appear less often than bad ones, but symbols are only allowed + to fade from rotation as long as the student is consistently performing very + well. + This should also counter the effect that old symbols become very rare + immediately when a new one is introduced only to suddenly reappear all + at once when that new symbol has been answered correctly a number of times + (which might not even have been very indicative of true progress). Differences in my version: - Advancement threshold is 30% error rate (overall *and* maximum individual). @@ -199,12 +214,14 @@ Differences in my version: as response time more than one sigma over average. - Response times are clamped to within one sigma of average for the purpose of updating the estimate. +- Uses overall error rate as a heuristic baseline to stop symbols from + completely disappearing from training. - No periodic resounding or automatic hinting. - Visual hint and resound on pressing Space. Hint disappears after sound finishes. - Hints appear under the cursor without advancing it. - (Like original) only prints bargraph on pause (Return). - training level (number of symbols activated), and session duration (excl. + Also training level (number of symbols activated), and session duration (excl. pauses). - Measures/displays average response time and equivalent wpm. - Measures/displays session duration (excluding pauses). blob - c8aa0f8c51695f3a093a54f420cf896c927387d7 blob + 51a2872cfb0430c612a401be8222561fe904b309 --- teach.c +++ teach.c @@ -354,15 +354,16 @@ teach(void) while (!feof(stdin) && input != 4) { /* * Pick a random character from the active training set, - * distributed according to the failure rates. + * distributed according to the failure rates and using the + * overall failure rate as a baseline. */ l = 0; for (i = 0; i < nactive; i++) - l += failprob[i]; + l += overall + failprob[i]; x = l * rand() / RAND_MAX; assert(nactive > 1); for (i = 0; i < nactive - 1; i++) { - x -= failprob[i]; + x -= overall + failprob[i]; if (x < 0) break; }