Skip to content

Releases: ericdunipace/approxOT

approxOT 1.3

Choose a tag to compare

@ericdunipace ericdunipace released this 15 Oct 18:19
7197624

Changes in Version 1.3

Major changes

  • Added OpenMP support for the Sinkhorn algorithm. The log-scale Sinkhorn updates were also rewritten to avoid N×M temporary matrices, giving roughly a 1.4× speedup even on a single thread.
  • By default, approxOT uses half of the available processors (never more than OMP_THREAD_LIMIT, and at most 2 during R CMD check). Use approxOT_threads(n) to change this, approxOT_threads() to see the current value, or set options(approxOT.threads = n) before loading the package.
  • Packages linking to the approxOT headers run single-threaded unless they call approxOT_set_threads(n) from C++.
  • epsilon is now used directly as the entropy penalty, on the same scale as the cost, as documented. Previously it was multiplied by the median of the cost matrix. Sinkhorn and Greenkhorn results for a given epsilon will differ from earlier versions; to reproduce them, use epsilon * median(cost), where cost is the cost matrix after raising it to the power p.

Minor Improvements and Bug fixes

  • The shortsimplex.h header caused a false positive warning on gcc-asan due to the posibility of feeding negative integer to the function; however, this would never happen due to higher level code always passing a positive integer since it is set by the size of the corresponding mass (i.e., an empirical measure passed to the function always has length greater than 0). A guard has been placed to prevent this gcc-asan warning.
  • Fixed the self-transport potentials used for the unbiased Sinkhorn divergence (unbiased = TRUE in wasserstein() and sinkhorn_pot()). The symmetric problems now use the averaged update of Feydy et al. (2019). Previously the self potentials were offset by a constant (and, on the log scale, did not converge and depended on whether niter was even or odd), so earlier unbiased Sinkhorn divergences were biased.
  • The log-scale Sinkhorn transport plan now includes the sample weights. Previously they were left out, so plans were wrong for non-uniform weights. Uniform weights were unaffected.
  • Greenkhorn now picks the row or column with the largest absolute margin violation instead of the largest Bregman divergence, which avoids computing logarithms on every iteration and handles zero weights. It stops when the largest violation is below the tolerance. Results at a given niter may differ slightly.
  • Unbiased Sinkhorn divergences that are slightly negative due to rounding are now set to 0 instead of returning NaN.

Changes in Version 1.2

Major changes

  • C++ code is now header-only; headers have moved to inst/include/approxOT/. Packages linking to approxOT should update their include paths.
  • Updated for compatibility with CGAL 6.0.
  • Now requires C++17.

Bug fixes

  • transport_plan() now correctly handles method = "exact" (mapped to "networkflow").
  • Fixed argument matching for observation.orientation in wasserstein_calc_cost().

Documentation

  • Clarified that epsilon is the entropy penalty itself (must be > 0), not a multiple of the median cost.

Changes in Version 1.1.1

Minor Improvements and Bug fixes

  • Minor bug fix to update a few Eigen C++ functions (Thank you Andrew Johnson!)
  • Removing older functions that are no longer used to speed up build
  • No changes to user interface

Changes in Version 1.1

  • Added a NEWS.md file to track changes to the package.
  • Added a as.matrix function to convert transportation plans to matrices.
  • Added a as.transport.plan to convert from transportation matrix to transportation plan.
  • Added classes to support these two functions.
  • Added support for log domain calculations for the sinkhorn method. This can be accessed with "sinkhorn_log" as the method.
  • Fixed typo in C files incorrectly referencing Rcpp::stop
  • updated DLL registrations in Namespace

approxOT 1.2

Choose a tag to compare

@ericdunipace ericdunipace released this 10 Jan 02:28

Changes in Version 1.1.1

Minor Improvements and Bug fixes

  • Minor bug fix to update a few Eigen C++ functions (Thank you Andrew Johnson!)
  • Removing older functions that are no longer used to speed up build
  • No changes to user interface

Changes in Version 1.1

  • Added a NEWS.md file to track changes to the package.
  • Added a as.matrix function to convert transportation plans to matrices.
  • Added a as.transport.plan to convert from transportation matrix to transportation plan.
  • Added classes to support these two functions.
  • Added support for log domain calculations for the sinkhorn method. This can be accessed with "sinkhorn_log" as the method.
  • Fixed typo in C files incorrectly referencing Rcpp::stop
  • updated DLL registrations in Namespace

approxOT 1.1.1

Choose a tag to compare

@ericdunipace ericdunipace released this 31 Jan 07:08

Changes in Version 1.1.1

Minor Improvements and Bug fixes

  • Minor bug fix to update a few Eigen C++ functions (Thank you Andrew Johnson!)
  • Removing older functions that are no longer used to speed up build
  • No changes to user interface

Changes in Version 1.1

  • Added a NEWS.md file to track changes to the package.
  • Added a as.matrix function to convert transportation plans to matrices.
  • Added a as.transport.plan to convert from transportation matrix to transportation plan.
  • Added classes to support these two functions.
  • Added support for log domain calculations for the sinkhorn method. This can be accessed with "sinkhorn_log" as the method.
  • Fixed typo in C files incorrectly referencing Rcpp::stop
  • updated DLL registrations in Namespace

approxOT 1.1

Choose a tag to compare

@ericdunipace ericdunipace released this 16 Jan 18:20

Version 1.1

  • Added a NEWS.md file to track changes to the package.
  • Added a as.matrix function to convert transportation plans to matrices.
  • Added a as.transport.plan to convert from transportation matrix to transportation plan.
  • Added classes to support these two functions.
  • Added support for log domain calculations for the sinkhorn method. This can be accessed with "sinkhorn_log" as the method.
  • Fixed typo in C files incorrectly referencing Rcpp::stop
  • updated DLL registrations in Namespace