ugtc / README.md
Ekrem-the-second's picture
Initial release: UGTC - Uncertainty-Gated Temporal Credit
d92d8cf verified
|
Raw
History Blame Contribute Delete
4.21 kB
---
license: mit
language:
- en
tags:
- reinforcement-learning
- advantage-estimation
- temporal-credit
- uncertainty
- actor-critic
- PPO
- TD3
- SAC
- DDPG
- pytorch
pipeline_tag: reinforcement-learning
---
# UGTC: Uncertainty-Gated Temporal Credit
[![Paper](https://img.shields.io/badge/Paper-Zenodo%2019715116-blue)](https://doi.org/10.5281/zenodo.19715116)
[![UYES](https://img.shields.io/badge/Published-UYES%20Journal-green)](https://doi.org/10.5281/zenodo.19715116)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow)](LICENSE)
[![GitHub](https://img.shields.io/badge/GitHub-ethosoftai%2Fugtc-black)](https://github.com/ethosoftai/ugtc)
> **Accepted — Ulysseus Young Explorers in Science (UYES) Journal**
> Preprint DOI: [10.5281/zenodo.19715116](https://doi.org/10.5281/zenodo.19715116) · Journal DOI forthcoming
> Author: Yağız Ekrem Dalar | Ethosoft AI
---
## What is UGTC?
**UGTC** is a backbone-agnostic plug-in advantage estimator for actor-critic reinforcement learning. It resolves the bias–variance trade-off in temporal credit assignment by maintaining two critics with different GAE λ values and blending their estimates using a sigmoid uncertainty gate:
```
A^UGTC_t = u(sₜ) · A^slow_t + (1 - u(sₜ)) · A^fast_t
u(s) = sigmoid(-β · (σ̂(s) - 1))
σ̂(s) = std(V¹_slow, ..., Vᴹ_slow)(s) / σ_EMA
```
- **Low ensemble disagreement**`u → 1` → use slow critic (accurate, λ=0.99)
- **High ensemble disagreement**`u → 0` → use fast critic (stable, λ=0.80)
## Fixed Hyperparameters (same across all benchmarks)
| Parameter | Value |
|-----------|-------|
| λ_fast | 0.80 |
| λ_slow | 0.99 |
| Ensemble size M | 3 |
| Gate temperature β | 5.0 |
| EMA momentum | 0.99 |
## Installation
```bash
git clone https://github.com/ethosoftai/ugtc.git
cd ugtc
pip install -e .
```
Or from this repo:
```bash
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('Ethosoft/ugtc', local_dir='ugtc')"
cd ugtc && pip install -e .
```
## Quick Usage
```python
from ugtc import UGTCModule
ugtc = UGTCModule(obs_dim=17) # e.g. Hopper-v4
# In your actor-critic update — replace standard GAE with:
advantages = ugtc.compute_advantages(
obs=obs, # (T, obs_dim)
next_obs=next_obs, # (T, obs_dim)
rewards=rewards, # (T,)
dones=dones, # (T,)
gamma=0.99,
)
```
## Supported Algorithms
| Algorithm | Key Change |
|-----------|-----------|
| **UGTC-PPO** | A^UGTC replaces standard GAE in clipped surrogate |
| **UGTC-TD3** | UGTC baseline correction on actor gradient |
| **UGTC-SAC** | V^UGTC replaces value baseline in actor loss |
| **UGTC-DDPG** | UGTC advantage scales actor update *(extension)* |
## Repository Structure
```
ugtc/ Core Python package
module.py UGTCModule — backbone-agnostic core
ppo.py UGTC-PPO integration
td3.py UGTC-TD3 integration
sac.py UGTC-SAC integration
ddpg.py UGTC-DDPG integration (extension)
utils.py Evaluation utilities (IQM, bootstrap CI, AUC)
examples/ Runnable examples (CartPole, Pendulum, MuJoCo)
benchmarks/ Procgen + MuJoCo benchmark scripts
tests/ Unit and integration tests
implementations/
cpp/ugtc.hpp C++ header-only reference
java/UGTCModule.java Java reference
pseudocode/ Algorithm pseudocode (PPO, TD3, SAC)
configs/ YAML configs for all benchmarks
docs/ GitHub Pages documentation source
```
## Citation
```bibtex
@misc{dalar2026ugtc,
author = {Dalar, Yağız Ekrem},
title = {{UGTC}: Uncertainty-Gated Temporal Credit},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.19715116},
url = {https://doi.org/10.5281/zenodo.19715116},
note = {Accepted — Ulysseus Young Explorers in Science (UYES) Journal.
Journal DOI forthcoming.}
}
```
## Links
- **Paper:** https://doi.org/10.5281/zenodo.19715116
- **GitHub:** https://github.com/ethosoftai/ugtc
- **Docs:** https://ethosoftai.github.io/ugtc
- **Demo Space:** https://huggingface.co/spaces/Ethosoft/ugtc