Repository navigation
Releases: ericdunipace/approxOT
Releases · ericdunipace/approxOT
Release list
approxOT 1.3
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 duringR CMD check). UseapproxOT_threads(n)to change this,approxOT_threads()to see the current value, or setoptions(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++. epsilonis 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 givenepsilonwill differ from earlier versions; to reproduce them, useepsilon * median(cost), wherecostis the cost matrix after raising it to the powerp.
Minor Improvements and Bug fixes
- The
shortsimplex.hheader 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 = TRUEinwasserstein()andsinkhorn_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 whetherniterwas 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
nitermay 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 handlesmethod = "exact"(mapped to"networkflow").- Fixed argument matching for
observation.orientationinwasserstein_calc_cost().
Documentation
- Clarified that
epsilonis 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.mdfile to track changes to the package. - Added a
as.matrixfunction to convert transportation plans to matrices. - Added a
as.transport.planto 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
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.mdfile to track changes to the package. - Added a
as.matrixfunction to convert transportation plans to matrices. - Added a
as.transport.planto 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
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.mdfile to track changes to the package. - Added a
as.matrixfunction to convert transportation plans to matrices. - Added a
as.transport.planto 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
Version 1.1
- Added a
NEWS.mdfile to track changes to the package. - Added a
as.matrixfunction to convert transportation plans to matrices. - Added a
as.transport.planto 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