This project has moved and is read-only. For the latest updates, please go here.

Do NOT keep on reloading box 1 after every promotion; wait until box 1 is nearly empty!

Jan 20, 2014 at 4:55 AM
Edited Jan 20, 2014 at 5:00 AM
I am having difficulties installing the latest version of ML. The last version of ML I recall using had a major problem:
It kept on reloading box 1 after each promotion, so that its capacity remained constant.

That is HIGHLY UNDESIRABLE behavior, which should, as a minimum, be user-controlled.

The reason is that when you start studying a batch of cards in box 1 (say 30) you want to progressively focus on the harder cards in that group, by promoting to box 2 the ones you first remember (presumably the easier ones), and NOT adding new ones until you are down to 2 or 3.

The way memory works, some concepts stick to your memory much faster than others. For example, in the case of foreign vocabulary, some words are similar to the native counterparts, or are easier to remember for whatever reasons. Others may be totally unfamiliar, or may even have a misleading similarity.

When you take the initial 30-card batch, you don't know which will be easier or harder. But the system takes care of that, by promoting to the next box those you first remember.

However, if you keep on adding new cards as soon as you promote one, you never focus on the hard cards. They are always mixed with easier cards. You keep on promoting easier ones, replacing them with new easier ones, but the harder ones tend to stay in box 1.

VERY BAD.

When you do not add new ones until box 1 is nearly empty, what happens is that from the initial batch (say 30), the easiest ones (say 10) move quickly to box 2, leaving you focused on the 20 that your brain find less easy. As you keep on working on these 20, eventually the 10 less hard also move up, leaving you focused on the hardest 10. When you are down to five, those are precisely the 5 hardest from the initial batch. Eventually you will be down to the 2 super hard ones, and eventually you will have only one card left. Now you NEED to add more. And if you found this last one really hard, you may want to add relatively few (say 10) so you keep seeing this super-hard card often enough.

YOU NEVER WANT to refill box 1, one card at a time, after each and every promotion. That is VERY unhelpful.

Virgil
Jan 20, 2014 at 8:01 AM
Hello Virgil,

thanks for your feedback, but as already said in the other thread, at the moment MemoryLifter follows the rules given by Sebastian Leitner who defined it that way.
BUT in my opinion it would make very much sense to give the user the possibility to select some different behaviour like the one you suggested (optionaly - default should be Leitners algorithm).
Sadly there are nearly no development resources available to work on MemoryLifter at the moment, as the project is not funded by the initial company anymore, but feel free to create a new issue so if someone is developint new stuff for MemoryLifter it can be picked up.

regards
Jan 20, 2014 at 8:21 AM
CFI wrote:
Hello Virgil,

thanks for your feedback, but as already said in the other thread, at the moment MemoryLifter follows the rules given by Sebastian Leitner who defined it that way.
BUT in my opinion it would make very much sense to give the user the possibility to select some different behaviour like the one you suggested (optionaly - default should be Leitners algorithm).
Sorry, but NO, Leitner defines the behavior as I described. Exactly. Take that to the bank.

I know it because I was fortunate to read the entire book in Spanish, and understand some German, and have looked at the original book also.

Reloading box 1 after every promotion is a BIG mistake, for the reasons given. All you get is a bunch of hard cards in box 1 which hardly ever move up.
Jan 20, 2014 at 10:57 AM
Virgilio314 wrote:
Reloading box 1 after every promotion is a BIG mistake, for the reasons given. All you get is a bunch of hard cards in box 1 which hardly ever move up.
I think I did not understand your first post correctly then, because this DOES NOT happen. If this happens for you, you maybe found a bug - in that case could you send me your learning module so I can take a look?
Normally Box 1 is filled by wrong cards. If you answer a card correctly it is promoted from the pool to box two. Only if you answer the cards wrong you get asked cards from box 1 over and over again. I just pulled out Leitner book and read the chapter about that again and MemoryLifter behaves correctly (or at least should).
You need to keep the minor difference in mind: Leitner does not have a "pool", but puts everything into box 1 from the start. MemoryLifter uses the separate pool for new cards and only altered Leitners rule from "Ask cards from box 1 if no box is full" to "Ask cards from the pool if no box is full" which results in asking cards from box 1 only when box 1 is full.
If you think we are wrong here, I am open for a detailed discussion...

regards
Christoph
Jan 20, 2014 at 11:31 AM
Edited Jan 20, 2014 at 11:46 AM
CFI wrote:
Virgilio314 wrote:
Reloading box 1 after every promotion is a BIG mistake, for the reasons given. All you get is a bunch of hard cards in box 1 which hardly ever move up.
I think I did not understand your first post correctly then, because this DOES NOT happen.
Normally Box 1 is filled by wrong cards. If you answer a card correctly it is promoted from the pool to box two. Only if you answer the cards wrong you get asked cards from box 1 over and over again. I just pulled out Leitner book and read the chapter about that again and MemoryLifter behaves correctly (or at least should).
I think you understood my post the first time, but perhaps not the second.

Question: Assume you start with 30 cards in box 1, many in the pool, and nothing else. Suppose you have just promoted one card from box 1 to box 2.
Doesn't ML IMMEDIATELY pulls one card from the pool and puts it into box 1??

I believe the answer is yes, but at this time I am unable to run ML.

If the answer is no, we have no issue. This means that after the first card goes from box 1 to box 2, the learner keeps on working with only 29 cards (the pool is left untouched for now). After a second card is promoted to box 2, the learner keeps on working with only 28 cards in box 1 (the pool remains untouched)....and so on, until box 1 is nearly empty. That is what Leitner wants. The reasons are given in my original post.

If the answer to my question is yes (meaning immediately after a card goes from box1 to box 2, ML pulls a card from the pool and puts it in box 1) then it is a mistake for the reasons given.
You need to keep the minor difference in mind: Leitner does not have a "pool", but puts everything into box 1 from the start. MemoryLifter uses the separate pool for new cards and only altered Leitners rule from "Ask cards from box 1 if no box is full" to "Ask cards from the pool if no box is full" which results in asking cards from box 1 only when box 1 is full.
Sorry, but Leitner does NOT put everything in box 1, and he does have a "pool". Leitner only explains the method with a physical shoebox subdivided into compartments. Box 1 (actually compartment 1) is by far the smallest, and can only hold 30 or so cards (I actually made the physical shoebox and used it quite a bit years ago). The "pool" is just wherever you keep the cards you have not yet studied...and yes, you do need something like that.

Leitner makes clear you should first focus only on the 30 or so cards that fit in the first compartment. You should only put cards from your "pool" into the first compartment after the first compartment is nearly empty.

Again, if ML leaves the pool alone until box1 is nearly empty or the user explicitly asks for cards from the pool, no problem. If ML keeps on transferring cards from the pool to box 1 as soon as one card goes from box 1 to box 2, ML is for sure wrong.

Virgil
Jan 20, 2014 at 3:33 PM
To answer your first question: No, ML does not put any cards in box 1 except the ones you answer wrong. And as long as no box is full ML asks cards from the pool.

Just to avoid confussion: Lets use the term "box" instead of "compartment" as ML uses that term, but both are valid translations of the german word "Fach" Leitner uses.

I have here Sebastina Leitners book "So lernt man lernen" (= How you learn to learn) edition 15 from 1988 and there he does not mention a pool (just checked again). He says that you should "prepare the first lesson with ~30-40 cards" and "if box 1 is nearly empty prepare the next lesson", nearly as you said except that he tells to put all cards you create directly into box 1, but he only talks about creating the 30-40 cards which can actually fit into box 1.
If I think about it again I am not 100% shure if ML does it in the optimal way (I was not the one who initialy programmed this algorithm so I do not know the initial thoughts, but we talked about this a few times). Maybe we actually should put cards from the pool into box one when it is nearly empty and question cards from box one until another box is full?
The concept of the lessons from Leitner where developed inside ML using the Chapters, so you can add all cards at once and then enable chapter by chapter to "add more cards"...

I will talk to my collegue who also was part of the development team until it was open-sourced - maybe he has more insights about this topic, but please share your additional thought also.
Jan 20, 2014 at 6:36 PM
Edited Jan 20, 2014 at 6:49 PM
CFI wrote:
To answer your first question: No, ML does not put any cards in box 1 except the ones you answer wrong. And as long as no box is full ML asks cards from the pool.
Then, if I understand correctly, ML is wrong anyhow.

Suppose again you start with a box 1 full with 30 "unlearned" cards (that is, box 1 capacity is 30, and it is full).
There are many cards in the pool (not yet studied), and the other boxes are empty.

As soon as you promote a card from box 1 to box 2, box 1 becomes non-full. Then, as I have been saying, and you seem to be also saying, ML pulls one card from the pool and puts it in box 1 (hence, box 1 stays full always, obviously), or even worse. ML asks a card from the pool, which is the same or even worse.

Since the cards in the pool have not yet been studied, asking directly from the pool will almost certainly result in a wrong answer, meaning that the card would go from the pool to the back of box 1 (might as well put it directly from the pool to the back of box 1).

Cards should be asked from box 1. Demoted cards are treated the same as the cards you initially try to learn.
The pool should just be a convenient place to keep cards you plan to eventually study.

What ML should do, according to Leitner and for the reasons given above, is simply to keep on asking cards from box 1, until box 1 is nearly empty.

There are two simple ways to proceed from that point:
1) Manual pool: the pool is left alone until the user explicitly asks for "n" cards to be transferred from the pool to box 1 (n can be also specified by the user at each loading time)

2) Automatic reload: only when the number of cards in box 1 is "m", cards are transferred from the pool to box 1, to make box 1 full ("m"=3 per Leitner, but may be specified by the user.

Either of those two options would be fine, and it would seem to be fairly straightforward to implement, since it would NOT affect the logic of the rest of the program.

Thanks.

Virgil
Jan 20, 2014 at 6:46 PM
Edited Jan 20, 2014 at 6:47 PM
Sorry, but you still got the main point wrong for ML's implementation:
ML DOES NOT "move a card to box 1" and you never start with a box 1 full with 30 cards - and thats the main difference to Leitner IMO.

You start e.g. with a pool and 30 "enabled Cards" (e.g. only chapter 1 enabled) and then ML asks the first card WITHOUT putting it in box 1 first. ONLY if you answer that first card wrong it will be put in box 1, but if you answer it correctly it will be put into box 2 directly. Meaning if you get nothing wrong at all, you will never have anything in box 1.

Belive me, we talked a lot about this and made sure it is "not wrong", but very likely not optimal as well and I agree, that your second solution would be probably a better aproach as it reflects Leitners intends "directly"...

P.S.: Thanks for the nice discussion - it may actually gives me the motivation to spend some of my "non-existing free time" on ML again :D...
Jan 20, 2014 at 6:59 PM
Edited Jan 20, 2014 at 7:07 PM
CFI wrote:
Sorry, but you still got the main point wrong for ML's implementation:
ML DOES NOT "move a card to box 1" and you never start with a box 1 full with 30 cards - and thats the main difference to Leitner IMO.

You start e.g. with a pool and 30 "enabled Cards" (e.g. only chapter 1 enabled) and then ML asks the first card WITHOUT putting it in box 1 first. ONLY if you answer that first card wrong it will be put in box 1, but if you answer it correctly it will be put into box 2 directly. Meaning if you get nothing wrong at all, you will never have anything in box 1.

Belive me, we talked a lot about this and made sure it is "not wrong", but very likely not optimal as well and I agree, that your second solution would be probably a better aproach as it reflects Leitners intends "directly"...
Hi, you answered while I was still editing my message...I saved it to make sure I did not lose anything if there was a tech problem.

Since the cards in the pool have not yet been studied, asking directly from the pool will almost certainly result in a wrong answer, meaning that the card would go from the pool to the back of box 1 (might as well put it directly from the pool to the back of box 1). That is what I had in mind (remember I am not able to run ML right now).

Cards should always be asked from box 1, just as in the Leitner's physical box. Demoted cards are also put in box 1, and then are treated the same as the cards you initially try to learn.

The pool should just be a convenient place to keep cards you plan to eventually study.

To reiterate, there are two simple ways to proceed:
1) Manual pool: the pool is left alone until the user explicitly asks for "n" cards to be transferred from the pool to box 1 (n is specified by the user at each loading time).

2) Automatic reload: only when the number of cards in box 1 fall to "m", are cards transferred from the pool to box 1, to make box 1 full again ("m"=3 per Leitner, but may be specified by the user).

Either of those two options would be fine, and it would seem to be fairly straightforward to implement, since it would NOT affect the logic of the rest of the program.

Thanks again.

Virgil
Jan 20, 2014 at 7:14 PM
I almost agree with you ;)...
Only that in practical usage it makes no big difference if you ask cards directly from the pool (set up correctly e.g. via chapters), as the asked card is in most cases exactly the same as if you "auto move" them to box 1 if box 1 is nearly empty...

...and that was the initial thought IMO - but as said above I will check with my collegue...
Jan 20, 2014 at 7:44 PM
CFI wrote:
I almost agree with you ;)...
Only that in practical usage it makes no big difference if you ask cards directly from the pool (set up correctly e.g. via chapters), as the asked card is in most cases exactly the same as if you "auto move" them to box 1 if box 1 is nearly empty...
Not really the same, I am afraid. For reasons given in the OP, you want the learner to work ONLY on an initial set of 30-40 cards, until all but a few have been promoted to box 2. With the current behavior that does not happen, best I can see...

By the way, in Leitner's original system, cards in an upper box (2 to 5) are reviewed only when the box is full, and room needs to be made for cards promoted from a lower box....In that case, the oldest 30-40 cards from the full box are asked, and those still remembered are promoted, while those already forgotten are demoted all the way to box 1...then you have room for promoting from below...I hope ML does that, but can't be sure now.
Jan 20, 2014 at 7:47 PM
Virgilio314 wrote:
CFI wrote:
Only that in practical usage it makes no big difference if you ask cards directly from the pool (set up correctly e.g. via chapters), as the asked card is in most cases exactly the same as if you "auto move" them to box 1 if box 1 is nearly empty...
Not really the same, I am afraid. For reasons given in the OP, you want the learner to work ONLY on an initial set of 30-40 cards, until all but a few have been promoted to box 2. With the current behavior that does not happen, best I can see...
Thats what I meant with "set up correctly" - if you only enable the first chapter with e.g. 40 cards in it, it does work...
The process of "make new cards to add to box 1" the learner then enables the next chapter.
By the way, in Leitner's original system, cards in an upper box (2 to 5) are reviewed only when the box is full, and room needs to be made for cards promoted from a lower box....In that case, the oldest 30-40 cards from the full box are asked, and those still remembered are promoted, while those already forgotten are demoted all the way to box 1...then you have room for promoting from below...I hope ML does that, but can't be sure now.
Yes, it does...
Jan 20, 2014 at 8:00 PM
CFI wrote:
Thats what I meant with "set up correctly" - if you only enable the first chapter with e.g. 40 cards in it, it does work...
The process of "make new cards to add to box 1" the learner then enables the next chapter.
But you still need to worry about what happens to cards that have been demoted to box 1.
Under Leitner's original system, you only add new cards to box 1 (from the pool or wherever) when you are down to 3 cards. That includes demoted cards... 3 total cards in box 1.

If I understand correctly, even with chapters, ML would ask cards from the pool, when there are many more than 3 cards in box 1, no?
Jan 21, 2014 at 8:22 AM
Yes, exactly. ML continuous to ask pool-questions until box 1 is full and thats the point where ML is definitely not optimal.
And just to say it again: I think your solution 2) from above is better and I will discuss with my collegue...
Jan 21, 2014 at 1:01 PM
CFI wrote:
Yes, exactly. ML continuous to ask pool-questions until box 1 is full and thats the point where ML is definitely not optimal.
And just to say it again: I think your solution 2) from above is better and I will discuss with my collegue...
Great. In your discussions, please, consider the possibility of implementing (1) and (2) together (as a user choice). Perhaps the algorithm to implement (2) could with only minor modifications implement (1) ("killing two birds with the same stone"!).

Manual reloading (1) could be preferred and/or be useful under certain scenarios. In fact, it comes closest to Leitner's original scheme (obviously, with a physical box, the user has to reload box 1 himself).

Manual reload can be viewed, in principle, as a special case of the other.

Let
C1 be the capacity of box1
n1 be the current number of cards in box 1
r1 be the level at which automatic reload of box1 occurs

Option (2):
            IF n1 <= r1 THEN reload_box1.
reload_box1 adds the top C1-n1 cards from the pool to box 1, so that box1 becomes full again (n1 now equals to C1).

To accomplish (1), set r1 to a negative number. Obviously, n1 can never be less than zero! Hence, with r1 negative, automatic reload will never occur (the user would have to explicitly ask for it).

Just some thoughts.

Virgil
Jan 21, 2014 at 1:09 PM
I think 1) is not really necessary, as you can "simulate that" with the chapters - not as convinient, but possible...

But as you said it could possibly be implemented together with 2).

As I said I will talk to my collegue when I meet him next time (he works in a different team now), but just as a reminder: ML does not have "full-time/paid developers" anymore, so it will take time in any case...