|
1 | 1 | # Releases
|
2 | 2 |
|
3 |
| -## 0.8.3dev |
| 3 | +## 0.9.0 |
| 4 | + |
| 5 | +This new release contains so many new features and bug fixes since 0.8.2 that we |
| 6 | +decided to make it a new minor release at 0.9.0. |
| 7 | + |
| 8 | +The release contains many new features. First we did a major |
| 9 | +update of all Gromov-Wasserstein solvers that brings up to 30% gain in |
| 10 | +computation time (see PR #431) and allows the GW solvers to work on non symmetric |
| 11 | +matrices. It also brings novel solvers for the very |
| 12 | +efficient [semi-relaxed GW problem |
| 13 | +](https://pythonot.github.io/master/auto_examples/gromov/plot_semirelaxed_fgw.html#sphx-glr-auto-examples-gromov-plot-semirelaxed-fgw-py) |
| 14 | +that can be used to find the best re-weighting for one of the distributions. We |
| 15 | +also now have fast and differentiable solvers for [Wasserstein on the circle](https://pythonot.github.io/master/auto_examples/plot_compute_wasserstein_circle.html#sphx-glr-auto-examples-plot-compute-wasserstein-circle-py) and |
| 16 | +[sliced Wasserstein on the |
| 17 | +sphere](https://pythonot.github.io/master/auto_examples/backends/plot_ssw_unif_torch.html#sphx-glr-auto-examples-backends-plot-ssw-unif-torch-py). |
| 18 | +We are also very happy to provide new OT barycenter solvers such as the [Free |
| 19 | +support Sinkhorn |
| 20 | +barycenter](https://pythonot.github.io/master/auto_examples/barycenters/plot_free_support_sinkhorn_barycenter.html#sphx-glr-auto-examples-barycenters-plot-free-support-sinkhorn-barycenter-py) |
| 21 | +and the [Generalized Wasserstein |
| 22 | +barycenter](https://pythonot.github.io/master/auto_examples/barycenters/plot_generalized_free_support_barycenter.html#sphx-glr-auto-examples-barycenters-plot-generalized-free-support-barycenter-py). |
| 23 | +A new differentiable solver for OT across spaces that provides OT plans |
| 24 | +between samples and features simultaneously and |
| 25 | +called [Co-Optimal |
| 26 | +Transport](https://pythonot.github.io/master/auto_examples/others/plot_COOT.html) |
| 27 | +has also been implemented. Finally we began working on OT between Gaussian distributions and |
| 28 | +now provide differentiable estimation for the Bures-Wasserstein [divergence](https://pythonot.github.io/master/gen_modules/ot.gaussian.html#ot.gaussian.bures_wasserstein_distance) and |
| 29 | +[mappings](https://pythonot.github.io/master/auto_examples/domain-adaptation/plot_otda_linear_mapping.html#sphx-glr-auto-examples-domain-adaptation-plot-otda-linear-mapping-py). |
| 30 | + |
| 31 | +Another important first step toward POT 1.0 is the |
| 32 | +implementation of a unified API for OT solvers with introduction of [`ot.solve`](https://pythonot.github.io/master/all.html#ot.solve) |
| 33 | +function that can solve (depending on parameters) exact, regularized and |
| 34 | +unbalanced OT and return a new |
| 35 | +[`OTResult`](https://pythonot.github.io/master/gen_modules/ot.utils.html#ot.utils.OTResult) |
| 36 | +object. The idea behind this new API is to facilitate exploring different solvers |
| 37 | +with just a change of parameter and get a more unified API for them. We will keep |
| 38 | +the old solvers API for power users but it will be the preferred way to solve |
| 39 | +problems starting from release 1.0.0. |
| 40 | +We provide below some examples of use for the new function and how to |
| 41 | +recover different aspects of the solution (OT plan, full loss, linear part of the |
| 42 | +loss, dual variables) : |
| 43 | +```python |
| 44 | +#Solve exact ot |
| 45 | +sol = ot.solve(M) |
| 46 | + |
| 47 | +# get the results |
| 48 | +G = sol.plan # OT plan |
| 49 | +ot_loss = sol.value # OT value (full loss for regularized and unbalanced) |
| 50 | +ot_loss_linear = sol.value_linear # OT value for linear term np.sum(sol.plan*M) |
| 51 | +alpha, beta = sol.potentials # dual potentials |
| 52 | + |
| 53 | +# direct plan and loss computation |
| 54 | +G = ot.solve(M).plan |
| 55 | +ot_loss = ot.solve(M).value |
| 56 | + |
| 57 | +# OT exact with marginals a/b |
| 58 | +sol2 = ot.solve(M, a, b) |
| 59 | + |
| 60 | +# regularized and unbalanced OT |
| 61 | +sol_rkl = ot.solve(M, a, b, reg=1) # KL regularization |
| 62 | +sol_rl2 = ot.solve(M, a, b, reg=1, reg_type='L2') |
| 63 | +sol_ul2 = ot.solve(M, a, b, unbalanced=10, unbalanced_type='L2') |
| 64 | +sol_rkl_ukl = ot.solve(M, a, b, reg=10, unbalanced=10) # KL + KL |
| 65 | + |
| 66 | +``` |
| 67 | +The function is fully compatible with backends and will be implemented for |
| 68 | +different types of distribution support (empirical distributions, grids) and OT |
| 69 | +problems (Gromov-Wasserstein) in the new releases. This new API is not yet |
| 70 | +presented in the kickstart part of the documentation as there is a small change |
| 71 | +that it might change |
| 72 | +when implementing new solvers but we encourage users to play with it. |
| 73 | + |
| 74 | +Finally, in addition to those many new this release fixes 20 issues (some long |
| 75 | +standing) and we want to thank all the contributors who made this release so |
| 76 | +big. More details below. |
| 77 | + |
4 | 78 |
|
5 | 79 | #### New features
|
6 | 80 | - Added feature to (Fused) Gromov-Wasserstein solvers herited from `ot.optim` to support relative and absolute loss variations as stopping criterions (PR #431)
|
|
0 commit comments