All this talking about SM model/workload vs. new cards per day prompted me to script the learning process with SuperMemo algorithm (Anki uses SM-2, in case you didn't know).
Get the script below, run the simulation and see for yourself how adding 50 cards a day is going to be like. The format of the output is:
day(day-number) -> cards-to-review total-number-of-cards-in-learning
EDIT:
Removed [code]...[/code] markup to workaround broken displaying of code...
EDIT2:
- Restored [code]...[/code] markup.
- 356 -> 365
Get the script below, run the simulation and see for yourself how adding 50 cards a day is going to be like. The format of the output is:
day(day-number) -> cards-to-review total-number-of-cards-in-learning
Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
DAYS = 2 * 365 # Period under consideration in days
NIPD = 50 # New Items Per Day
SAAD = 2200 / NIPD # Stop Adding After Day
FI = 0.2 # Forgetting Index
INTERVALS = [1, 3, 7, 16, 40, 98, 245, 611, 1526]
class Item:
pass
items = []
def review_items():
items_due = []
for item in items:
item.due -= 1
if item.due == 0:
items_due.append(item)
print len(items_due), len(items)
due_fail_nb = len(items_due) * FI
due_cnt = 0
while True:
ln = len(items_due)
if ln == 0:
break
i = random.randint(0, ln - 1)
item = items_due[i]
# pass
if due_cnt > due_fail_nb:
item.interval_idx += 1
# fail
else:
item.interval_idx = 0
item.due = INTERVALS[item.interval_idx]
due_cnt += 1
items_due.remove(item)
def add_items(n):
for i in range(0, n):
item = Item()
item.id = len(items)
item.interval_idx = 0
item.due = INTERVALS[item.interval_idx]
items.append(item)
for day in range(0, DAYS):
print 'day(' + str(day) + ') -> ',
review_items()
if day < SAAD:
add_items(NIPD)Removed [code]...[/code] markup to workaround broken displaying of code...
EDIT2:
- Restored [code]...[/code] markup.
- 356 -> 365
Edited: 2014-12-26, 7:02 pm
