Skip to content

Use the scheduled epsilon in the discrete barycenter update - #710

Open
shaneraphel wants to merge 1 commit into
ott-jax:mainfrom
shaneraphel:barycenter-epsilon-schedule
Open

shaneraphel wants to merge 1 commit into
ott-jax:mainfrom
shaneraphel:barycenter-epsilon-schedule

Conversation

@shaneraphel

@shaneraphel shaneraphel commented Oct 5, 2026 •

Copy link
Copy Markdown

Summary

The discrete barycenter step updates the dual potential by

ε(t) log a − softmin_{ε(t)}(c − f − g),

where ε(t) = max(init · decay^t, 1) · target. update_potential and update_scaling read that value from epsilon_scheduler(iteration), and None means the target. The vmapped update accepted the iteration and did not forward it, so every step, including the annealed ones, ran at the final ε. The debiased correction already passed iteration. The log-sum-exp and scaling updates now do the same.

Tests

tests/solvers/linear/discrete_barycenter_test.py: 6 passed on macOS arm64 (the two existing grid cases, the two point-cloud cases, and a new schedule check in both modes).

The new check uses ε with target 0.2, init 8, decay 0.5, so ε(0) = 1.6 and the target is 0.2. After one iteration the stored potentials match update_potential / update_scaling at iteration 0, and they do not match the same update with the iteration omitted.

Fixes #705

The entropic step is ε(t) log a - softmin_ε(t)(c - f - g). The vmap
accepted the iteration and then dropped it, so the scheduler returned
its target ε instead of init * decay^t * target.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

F scaling/potential not updated with current epsilon schedule in discrete barycenter

1 participant