[WIP] Implementation of FUGW and UCOOT by 6Ulm · Pull Request #677 · PythonOT/POT
Types of changes
This PR is dedicated to the implementation of
1.Fused Unbalanced GW (or more correctly, its lower bound)
2. (Fused) Unbalanced COOT.
Since their structures, it is enough to write a common template, then write a wrapper for each divergence.
More precisely, we create a method called fused_unbalanced_cross_spaces_divergence , in which
reg_type="independent"corresponds to (Fused) UCOOT. This yieldsunbalanced_co_optimal_transportmethod.reg_type="joint"corresponds to FUGW. This yieldsfused_unbalanced_gromov_wassersteinmethod.
We also allow for unregularized approximation of FUGW and UCOOT, i.e. $\varepsilon = 0$, thanks to the Majorization-Minization ot.unbalanced.mm_unbalanced and ot.unbalanced.lbfgsb_unbalanced L-BFGS-B methods.
This implementation also allows for $2$ types of marginal penalization: Kullback-Leibler divergence and squared L2 norm. We also allow the cost to be sub-differentiable w.r.t the input matrices and reference distributions. This is implemented in unbalanced_co_optimal_transport2 and fused_unbalanced_gromov_wasserstein methods.
Motivation and context / Related issue
How has this been tested (if it applies)
PR checklist
- I have read the CONTRIBUTING document.
- The documentation is up-to-date with the changes I made (check build artifacts).
- All tests passed, and additional code has been covered with new tests.
- I have added the PR and Issue fix to the RELEASES.md file.