🌹 Unifloral: Aprendizaje por Refuerzo Offline Unificado
Implementaciones unificadas y evaluación rigurosa para el aprendizaje por refuerzo offline - desarrollado por Matthew Jackson, Uljad Berdica, y Jarek Liesen.
💡 Filosofía del Código
- ⚛️ Archivo único: Implementamos algoritmos como archivos Python independientes.
- 🤏 Mínimo: Solo editamos lo necesario entre algoritmos, facilitando las comparaciones.
- ⚡️ Acelerado por GPU: Usamos JAX y compilamos todo el código de entrenamiento de extremo a extremo, permitiendo entrenamientos ultrarrápidos.
🤖 Algoritmos
Proveemos dos tipos de implementación de algoritmos:
- Independiente: Cada algoritmo está implementado como un archivo único con dependencias mínimas, facilitando su comprensión y modificación.
- Unificado: La mayoría de los algoritmos están disponibles como configuraciones para nuestra implementación unificada
unifloral.py.
.npz en final_returns/ para análisis usando nuestro protocolo de evaluación.Todos los scripts soportan D4RL y usan Weights & Biases para el registro, con configuraciones provistas como archivos de barrido WandB.
Sin modelo
| Algoritmo | Independiente | Unificado | Extras |
| --- | --- | --- | --- |
| BC | bc.py | unifloral/bc.yaml | - |
| SAC-N | sac_n.py | unifloral/sac_n.yaml | [[ArXiv]](https://arxiv.org/abs/2110.01548) |
| EDAC | edac.py | unifloral/edac.yaml | [[ArXiv]](https://arxiv.org/abs/2110.01548) |
| CQL | cql.py | - | [[ArXiv]](https://arxiv.org/abs/2006.04779) |
| IQL | iql.py | unifloral/iql.yaml | [[ArXiv]](https://arxiv.org/abs/2110.06169) |
| TD3-BC | td3_bc.py | unifloral/td3_bc.yaml | [[ArXiv]](https://arxiv.org/abs/2106.06860) |
| ReBRAC | rebrac.py | unifloral/rebrac.yaml | [[ArXiv]](https://arxiv.org/abs/2305.09836) |
| TD3-AWR | - | unifloral/td3_awr.yaml | [[ArXiv]](https://arxiv.org/abs/2504.11453) |
Basado en modelos
Implementamos un único script para el entrenamiento del modelo de dinámica: dynamics.py, con configuración dynamics.yaml.
| Algoritmo | Independiente | Unificado | Extras |
| --- | --- | --- | --- |
| MOPO | mopo.py | - | [[ArXiv]](https://arxiv.org/abs/2005.13239) |
| MOReL | morel.py | - | [[ArXiv]](https://arxiv.org/abs/2005.05951) |
| COMBO | combo.py | - | [[ArXiv]](https://arxiv.org/abs/2102.08363) |
| MoBRAC | - | unifloral/mobrac.yaml | [[ArXiv]](https://arxiv.org/abs/2504.11453) |
Nuevos próximamente 👀
📊 Evaluación
Nuestro script de evaluación (evaluation.py) implementa el protocolo descrito en nuestro artículo, analizando el rendimiento de un bandido UCB sobre un rango de evaluaciones de políticas.
from evaluation import load_results_dataframe, bootstrap_bandit_trials
import jax.numpy as jnpLoad all results from the final_returns directory
df = load_results_dataframe("final_returns")Run bandit trials with bootstrapped confidence intervals
results = bootstrap_bandit_trials(
returns_array=jnp.array(policy_returns), # Shape: (num_policies, num_rollouts)
num_subsample=8, # Number of policies to subsample
num_repeats=1000, # Number of bandit trials
max_pulls=200, # Maximum pulls per trial
ucb_alpha=2.0, # UCB exploration coefficient
n_bootstraps=1000, # Bootstrap samples for confidence intervals
confidence=0.95 # Confidence level
)Access results
pulls = results["pulls"] # Number of pulls at each step
means = results["estimated_bests_mean"] # Mean score of estimated best policy
ci_low = results["estimated_bests_ci_low"] # Lower confidence bound
ci_high = results["estimated_bests_ci_high"] # Upper confidence bound
📝 ¡Cítanos!
@misc{jackson2025clean,
title={A Clean Slate for Offline Reinforcement Learning},
author={Matthew Thomas Jackson and Uljad Berdica and Jarek Liesen and Shimon Whiteson and Jakob Nicolaus Foerster},
year={2025},
eprint={2504.11453},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2504.11453},
}--- Tranlated By Open Ai Tx | Last indexed: 2026-01-08 ---