Mecanismo de Límites Diarios en Anki: Análisis de Fallos y Soluciones Técnicas

Funcionamiento del Sistema de Límites y sus Limitaciones

El sistema de límites diarios en Anki controla la cantidad máxima de tarjetas nuevas y de repaso mediante dos componentes principales:

  • Módulo de planificación: Gestiona la lógica de presentación de tarjetas (v3.py)
  • Sistema de configuración de mazos: Administra parámetros de límites (decks.py)

Deficiencias Clave Identificadas

Aálisis del código revela dos fallos críticos:

  1. Conteo recursivo erróneo: Duplicación de tarjetas al existir en múltiples mazos
  2. Manejo incorrecto de zonas horarias: Asignación incorecta de repasos cerca de la medienoche
# Ejemplo de código defectuoso
def calcular_tarjetas(self, ids_mazo, incluir_submazos):
    if isinstance(ids_mazo, int):
        ids_mazo = {ids_mazo}
    else:
        ids_mazo = set(ids_mazo)
    if incluir_submazos:
        ids_mazo.update([hijo[1] for id_actual in ids_mazo for hijo in self.hijos(id_actual)])
    cadena_ids = convertir_a_cadena(ids_mazo)
    total = self.bd.consultar(
        f"SELECT COUNT() FROM tarjetas WHERE did IN {cadena_ids} OR odid IN {cadena_ids}"
    )
    return total

Estrategias de Corrección

Ajustes de Configuración

  • Desactivar conteo recursivo en submazos
  • Sincronizar zona horaria con el sistema
  • Usar mazos filtrados con condiciones como: esta:pendiente propiedad:vencida<=1 propiedad:intervalo<10

Modificaciones de Código

Corrección de Conteo Recursivo

def calcular_tarjetas(self, ids_mazo, incluir_submazos):
    ids_mazo = {ids_mazo} if isinstance(ids_mazo, int) else set(ids_mazo)
    todos_ids = set(ids_mazo)
    
    if incluir_submazos:
        cola = list(ids_mazo)
        while cola:
            id_actual = cola.pop(0)
            for _, id_hijo in self.hijos(id_actual):
                if id_hijo not in todos_ids:
                    todos_ids.add(id_hijo)
                    cola.append(id_hijo)
    
    cadena_ids = convertir_a_cadena(todos_ids)
    total = self.bd.consultar(
        f"SELECT COUNT(DISTINCT id) FROM tarjetas WHERE did IN {cadena_ids} OR odid IN {cadena_ids}"
    )
    return total

Corrección de Zona Horaria

from anki.utils import obtener_fecha_local

def obtener_tarjetas_pendientes(self, limite=1, solo_aprendizaje_intradia=False):
    fecha_actual = obtener_fecha_local()
    return self.motor.obtener_tarjetas_pendientes(
        limite=limite,
        solo_aprendizaje_intradia=solo_aprendizaje_intradia,
        fecha_referencia=fecha_actual
    )

Validación de Soluciones

Procedimiento de Prueba

  1. Crear estructura de mazos con submazos anidados
  2. Establecer límites variables por mazo
  3. Verificar comportamiento en transiciones de día
  4. Comprobar consistencia en múltiples dispositivos

Optimizaciones Avanzadas

{
  "limitesDinamicos": true,
  "limiteBaseNuevas": 20,
  "limiteBaseRepasos": 100,
  "sensibilidadRendimiento": 1.2,
  "ajusteMaximoPorcentaje": 50
}

Etiquetas: Anki Planificador ConfiguracionMazos Horario Python

Publicado el 7-1 18:59