Creation of a learning activity based on Grapholearn graphical presentation.
The activity presents many solution to a single question, the user needs to select the correct one.
This can be used for many different learning cases:
- letter according to its sound,
- results of multiplication/addition tables,
- chemical symbols vs full names
- translated vocabulary
- capital vs countries
etc etc
The activity needs to be configurable using the current multipledataset functionnality.
This activity has two concurrent modes:
- Spaced repetition: used to consolidate already learned facts,
https://en.wikipedia.org/wiki/Spaced_repetition
- Spaced learning: used to learned new facts
https://en.wikipedia.org/wiki/Spaced_learning
Spaced repetition is used using algorithm SM2 in the popular Anki program
Spaced learning is also using a slightly modified version of SM2.
They are both described in details in these two following links (in french so deepL will be helpful here)
https://linuxfr.org/users/anaseto/journaux/mes-peripeties-avec-la-repetition-espacee
https://linuxfr.org/users/anaseto/journaux/chronocram-memorisation-espacee-rapide-d-associations
You will need to install Morji and Chronogram to understand where we are aiming to.
We need to think about a clever way to go from the repetition mode to the learning mode, to allow pupils to train what they realise they do not know within playing the repetition mode.
We also need a "only repetition mode" to offer an evaluation mode to the teacher.
Here is an explanation of the algorithm SM2 which is used in both cases:
We are using cards to present the questions/answers.
The frequency to present the cards depends on the ability of the user to answer the questions.
Notation: card the card to be revised now .rev révision number (0 for non memorised or forgotten) .R R card factor .DP date for with the revision is due (if already memorised one time) .DA date of the previous revision cards cards database (json) (sorted by .DP) GoodAnswer(card): D = actual date if card.rev == 0: # first memorisation card.DP = D + 1-2 days card.DA = D si card.rev == 1: # particular case card.DP = D + 4-6 days card.DA = D else: I = D - card.DA # number of days since the last revision card.DP = D + I*card.R*(1 ± 0.5%) card.DA = D card.rev += 1 card.Actualising(card) WrongAnswer(card): D = actual date if card.rev > 0: card.R -= 0.15 # could be modified if card.R < 1.3: card.R = 1.3 # less than 1.3 is not working anymore card.rev = 0 card.DP = D card.Actualising(card) AskQuestion(): D = actual date L = card.GetBack({card or .DP <= D and .rev > 0}) As long as L is not empty: For card in L: display question get pupil answer if goodAnswer: goodAnswer(card) sinon: wrongAnswer(card) L = cartes.getBack({card forgotten with .rev == 0 and .DP <= D + limited number of new cards with .rev == 0 and without .DP})