Back

How do you go about learning 50+ kanji a day?

#11
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
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)
EDIT:
Removed [code]...[/code] markup to workaround broken displaying of code...

EDIT2:
- Restored [code]...[/code] markup.
- 356 -> 365
Edited: 2014-12-26, 7:02 pm
Reply

Messages In This Thread