Spaced Repetition Custom Sets

Spaced Repetition Options

Spaced repetition is a memory learning method that allows you to maximise recall, while minimising learning time. Essentially it tries to present you with problems you are having trouble with more often that those that you have already shown you can do well. You can read more about spaced repetition at the Wikipedia Spaced Repetition Article.

You can create a spaced repetition set by enabling the "Spaced repetition" option for the problem selection type (instead of the default "Random Selection"). The selector can be found just above the problem set ordering options.

For spaced repetition sets, you get two new numbers next to the problem set count at the bottom of the problem board, for example: Problem Set: TestSR ( 91 in set) ( Learning: 8, Scheduled: 4 )

"Learning" is the number of problems in the set that we are currently actively learning.

"Scheduled" is the number of problems that are currently due for review.

When "Scheduled" = 0, each time you do a problem, a new problem will be added to the set for learning. When "Learning" is the same as the number of problems in the set , trying to do problems when Scheduled = 0 will lead to problems being done in order of the next one that would be scheduled (i.e. you'll be solving problems "early", before they are due for review). If you can't be given problems early without repeating the last scheduled problem, then you'll be told you need to wait for the next scheduled problem to be due.

If you get a problem wrong, it will be scheduled for serving again in 5 minutes. The first time you get a problem correct, it is scheduled for review in 1 day from when you solved it. After the second correct attempt in a row, the next problem serving time is determined by the gap between the last two times you saw the problem, and a factor estimating how difficult the problem was for you. The difficulty factor is currently decided by the ratio of your most recent solve time on the problem compared to the average solve time for all users. By default, the problem will be scheduled to be served again at a time that is two times longer than the last time gap between solving it. If you solve it under the average time, then you will not see it again for up to 3 times longer (depending on how much quicker you solved it compared to average). If you solve it slower than the average time, then the gap to the next view will be reduced to as little as 1.3 times the last gap between solutions (again depending on exactly how much slower).

Over time, the problems you know well will get increasingly large gaps between serving times, those you are having trouble with will get served more often, until they too become "well known".

You can use most of the problem search/custom set options with spaced repetition sets, although there are some exceptions. Ordered sets, are not compatible with spaced repetition, as the spaced repetition scheduling will override the sort order of the set. Also some sets such as "problems I've never seen before" don't make sense with SR sets, as they will lead problems to drop out of the set, as soon as you've done them the first time. Merged sets are also currently incompatible with spaced repetition sets, so merged sets where one or more subsets are spaced repetition set types will not work as expected.

It can be useful to create spaced repetition sets based on a custom tag as the search criteria , so you can add specific problems to your spaced repetition set by tagging the problems. However, you can also use other search criteria such as "all forks from 1200-1400" etc to define set membership.

Spaced Repetition Options

Spaced repetition custom sets have several options which change the way problems are served up. To understand how these options work it is important to understand how the formula used to grow the gap between attempts on the same problem operates:

gap_factor=max(min(log(DIFFICULTY_ESTIMATE)+Spacing Growth Rate),Maximum Space Grow),Minimum Space Growth)

and

next gap interval = last_gap * gap_factor

So for example if the difficulty estimate is 1.0, Spacing Growth Rate is 2.0 and Maximum and Minimum space growth is 3.0 and 1.0, and the last gap between correct attempts on the problem was 10 days. The gap factor will be:

max(min(log(1.0)+2.0,3.0),1.0)

or

max(min(0+2.0,3.0),1.0)

=

2.0

so the next attempt on this problem will be scheduled 10 days *2.0 = 20 days into the future. A more difficult problem (i.e. one which was solved more slowly) would have a smaller gap factor, and would be served up again more quickly, how quickly would depend on how slow the attempt was, and the value of the Minimum Space Growth parameter.

DIFFICULTY_ESTIMATE is a value that approximates how hard you found your last attempt on the problem. The value used here depends on the difficulty estimate method chosen.

The current list of parameters are:

Learning Period Length (in Problems)
The learning period is a period during which the gap between problems is not expanding , and instead uses a fixed gap between attempts. This gives you a chance to learn the problem with quickly scheduled attempts, before you switch to trying to retain the problem in memory during the spacing of subsequent attempts on the problem. By default, only the first correct attempt generates a fixed gap, after 2 or more correct attempts, the spacing algorithm mentioned above is applied.
Learning Period Gap (in days)
This is the fixed gap between correct problem attempts during the initial learning period (e.g. 1 day).
Spacing Growth Rate
Controls how quickly the gap between correct attempts will grow. Larger numbers lead to a more rapidly expanding gap after each correct attempt.
Minimum Space Growth
The minimum growth rate that the previous gap between attempts will be multiplied by to give the next gap in serving time.
Maximum Space Growth
The maximum growth rate that the previous gap between attempts will be multiplied by to give the next gap in serving time.
Difficulty Estimate Method
This option selects the method used to determine the difficulty of the previous correct attempt on the problem. The difficulty estimate then helps control how quickly the next attempt will be scheduled. Methods are:
Average Time
Difficulty is estimated by your most recent solve time compared to the average solve time by all users on the problem.
Minimum Time
Difficulty is estimated by comparing your shortest time during the current sequence of correct attempts to your most recent solve time.
Recent Time
Difficulty is estimated by comparing the average solve time of your own current sequence of correct attempts to your most recent solve time.
Target Seconds/Move
Difficulty is estimated by comparing a fixed amount of time per move to your most recent correct solve time (in which case the time you took on the last attempt is also calculated as seconds/move).
Target Seconds/Problem
Difficulty is estimated by comparing a fixed total problem solve time to your most recent correct solve time on the problem.