Source code for unilab.base.curriculum
"""Curriculum learning for adaptive difficulty adjustment."""
from __future__ import annotations
import numpy as np
[docs]
class EpisodeLengthTracker:
"""Track moving average of episode length."""
[docs]
def __init__(self, num_envs: int, window_size: int = 1000):
self.num_envs = num_envs
self.window_size = max(1, int(window_size * num_envs / 4096))
self.average_length = 0.0
[docs]
def update(self, episode_lengths: np.ndarray) -> None:
"""Update average with new episode lengths."""
if len(episode_lengths) == 0:
return
current_avg = float(np.mean(episode_lengths))
weight = min(len(episode_lengths) / self.window_size, 1.0)
self.average_length = self.average_length * (1 - weight) + current_avg * weight