Skip to main content

Implementation of the Alberta Plan for AI Research - continual learning with meta-learned step-sizes

Project description

Alberta Framework

CI PyPI License Python 3.13+

A JAX-based research framework implementing components of The Alberta Plan for AI Research in the pursuit of building the foundations of Continual AI.

"The agents are complex only because they interact with a complex world... their initial design is as simple, general, and scalable as possible." — Sutton et al., 2022

Overview

The Alberta Framework provides foundational components for continual reinforcement learning research. Built on JAX for hardware acceleration, the framework emphasizes temporal uniformity every component updates at every time step, with no special training phases or batch processing.

Project Context

This framework is developed as part of my D.Eng. work focusing on the foundations of Continual AI. For more background and context see:

Roadmap

Depending on my research trajectory I may or may not implement components required for the plan. The current focus of this framework is the Step 1 Baseline Study, investigating the interaction between adaptive optimizers and online normalization.

Step Focus Status
1 Meta-learned step-sizes (IDBD, Autostep) Complete
2 Feature generation and testing Planned
3 GVF predictions, Horde architecture Planned
4 Actor-critic with eligibility traces Planned
5-6 Off-policy learning, average reward Planned
7-12 Hierarchical, multi-agent, world models Future

Installation

pip install alberta-framework

# With optional dependencies
pip install alberta-framework[gymnasium]  # RL environment support
pip install alberta-framework[dev]        # Development (pytest, ruff)

Requirements: Python >= 3.13, JAX >= 0.4, NumPy >= 2.0

Quick Start

import jax.random as jr
from alberta_framework import LinearLearner, IDBD, RandomWalkStream, run_learning_loop

# Non-stationary stream where target weights drift over time
stream = RandomWalkStream(feature_dim=10, drift_rate=0.001)

# Learner with IDBD meta-learned step-sizes
learner = LinearLearner(optimizer=IDBD())

# JIT-compiled training via jax.lax.scan
state, metrics = run_learning_loop(learner, stream, num_steps=10000, key=jr.key(42))

Core Components

Optimizers

Supervised Learning:

  • LMS: Fixed step-size baseline
  • IDBD: Per-weight adaptive step-sizes via gradient correlation (Sutton, 1992)
  • Autostep: Tuning-free adaptation with gradient normalization (Mahmood et al., 2012)

TD Learning:

  • TDIDBD: TD learning with per-weight adaptive step-sizes and eligibility traces (Kearney et al., 2019)
  • AutoTDIDBD: TD learning with AutoStep-style normalization for improved stability

Streams

Non-stationary experience generators implementing the ScanStream protocol:

  • RandomWalkStream: Gradual target drift
  • AbruptChangeStream: Sudden target switches
  • PeriodicChangeStream: Sinusoidal oscillation
  • DynamicScaleShiftStream: Time-varying feature scales

TD Learning

For temporal-difference learning with value function approximation:

from alberta_framework import TDLinearLearner, TDIDBD, run_td_learning_loop

learner = TDLinearLearner(optimizer=TDIDBD(trace_decay=0.9))
state, metrics = run_td_learning_loop(learner, td_stream, num_steps=10000, key=jr.key(42))

Gymnasium Integration

from alberta_framework.streams.gymnasium import collect_trajectory, learn_from_trajectory, PredictionMode
import gymnasium as gym

env = gym.make("CartPole-v1")
observations, targets = collect_trajectory(env, policy, num_steps=10000, mode=PredictionMode.REWARD)
state, metrics = learn_from_trajectory(learner, observations, targets)

Publication Tools

Multi-seed experiments with statistical analysis and publication-ready outputs:

from alberta_framework.utils import ExperimentConfig, run_multi_seed_experiment, pairwise_comparisons

results = run_multi_seed_experiment(configs, seeds=30, parallel=True)
significance = pairwise_comparisons(results, test="ttest", correction="bonferroni")

Documentation

Full documentation available at j-klawson.github.io/alberta-framework or build locally:

pip install alberta-framework[docs]
mkdocs serve  # http://localhost:8000

Contributing

Contributions are welcome, particularly for upcoming roadmap steps. Please ensure tests pass and follow the existing code style.

pytest tests/ -v

Citation

If you use this framework in your research, please cite:

@software{alberta_framework,
  title = {Alberta Framework: A JAX Implementation of Alberta Plan components},
  author = {Lawson, Keith},
  year = {2026},
  url = {https://github.com/j-klawson/alberta-framework}
}

Key References

@article{sutton2022alberta,
  title = {The Alberta Plan for AI Research},
  author = {Sutton, Richard S. and Bowling, Michael and Pilarski, Patrick M.},
  year = {2022},
  eprint = {2208.11173},
  archivePrefix = {arXiv}
}

@inproceedings{sutton1992idbd,
  title = {Adapting Bias by Gradient Descent: An Incremental Version of Delta-Bar-Delta},
  author = {Sutton, Richard S.},
  booktitle = {Proceedings of the AAAI Conference on Artificial Intelligence},
  year = {1992}
}

@inproceedings{mahmood2012autostep,
  title = {Tuning-free Step-size Adaptation},
  author = {Mahmood, A. Rupam and Sutton, Richard S. and Degris, Thomas and Pilarski, Patrick M.},
  booktitle = {IEEE International Conference on Acoustics, Speech and Signal Processing},
  year = {2012}
}

@inproceedings{kearney2019tidbd,
  title = {Learning Feature Relevance Through Step Size Adaptation in Temporal-Difference Learning},
  author = {Kearney, Alex and Veeriah, Vivek and Travnik, Jaden and Sutton, Richard S. and Pilarski, Patrick M.},
  booktitle = {International Conference on Machine Learning},
  year = {2019}
}

License

Apache License 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

alberta_framework-0.5.1.tar.gz (127.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

alberta_framework-0.5.1-py3-none-any.whl (66.8 kB view details)

Uploaded Python 3

File details

Details for the file alberta_framework-0.5.1.tar.gz.

File metadata

  • Download URL: alberta_framework-0.5.1.tar.gz
  • Upload date:
  • Size: 127.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for alberta_framework-0.5.1.tar.gz
Algorithm Hash digest
SHA256 ee29fc6adb453afd5d4e987d5be876f13bc714b44cd69a726a3572ceac813b1a
MD5 dcff28c149b24ab2d4e293942b0c83da
BLAKE2b-256 12b8166195aab908e30ba8c65da5587a51a64f0d0a3e41ccc58e96e61a9fc764

See more details on using hashes here.

Provenance

The following attestation bundles were made for alberta_framework-0.5.1.tar.gz:

Publisher: publish.yml on j-klawson/alberta-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file alberta_framework-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for alberta_framework-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 31331210d75f0bc95d7591cdc1c4c8ecdd3f23ce1a74d715516754daf422c51e
MD5 78dc6f9383b6bd15d503c212dd834ca1
BLAKE2b-256 0a4959bc2634d6674831cc2b8775b0c7ecb7b7c281fbc49da65512e992b35b8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for alberta_framework-0.5.1-py3-none-any.whl:

Publisher: publish.yml on j-klawson/alberta-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page