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})