{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/a-push-relabel-based-additive-approximation","title":"A Push-Relabel Based Additive Approximation for Optimal Transport","arxiv_id":"2203.03732","date":"2022-03-07","proceeding":null,"authors":["Nathaniel Lahn","Sharath Raghvendra","Kaiyi Zhang"],"abstract":"Optimal Transport is a popular distance metric for measuring similarity between distributions. Exact algorithms for computing Optimal Transport can be slow, which has motivated the development of approximate numerical solvers (e.g. Sinkhorn method). We introduce a new and very simple combinatorial approach to find an $\\varepsilon$-approximation of the OT distance. Our algorithm achieves a near-optimal execution time of $O(n^2/\\varepsilon^2)$ for computing OT distance and, for the special case of the assignment problem, the execution time improves to $O(n^2/\\varepsilon)$. Our algorithm is based on the push-relabel framework for min-cost flow problems. Unlike the other combinatorial approach (Lahn, Mulchandani and Raghvendra, NeurIPS 2019) which does not have a fast parallel implementation, our algorithm has a parallel execution time of $O(\\log n/\\varepsilon^2)$. Interestingly, unlike the Sinkhorn algorithm, our method also readily provides a compact transport plan as well as a solution to an approximate version of the dual formulation of the OT problem, both of which have numerous applications in Machine Learning. For the assignment problem, we provide both a CPU implementation as well as an implementation that exploits GPU parallelism. Experiments suggest that our algorithm is faster than the Sinkhorn algorithm, both in terms of CPU and GPU implementations, especially while computing matchings with a high accuracy.","url_abs":"https://arxiv.org/abs/2203.03732v1","url_pdf":"https://arxiv.org/pdf/2203.03732v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"a-push-relabel-based-additive-approximation","repo_url":"https://github.com/kaiyiz/push-relabel-ot","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":null,"task_name":"CPU"},{"task_slug":null,"task_name":"GPU"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2203.03732","atlas_url":"https://app.syntology.ai/?focus=2203.03732","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2203.03732"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/kaiyiz/push-relabel-ot","reach":null}],"summary":{"ran_fixture":4,"ran_draft_wrong":2,"unverified":1},"by_repo_kind":{"official":{"samples":7,"ran":6,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":7,"samples":[{"code_sha256_prefix":"c480810757dc7322","entry":"find_ind_range","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"transport.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/transport.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c480810757dc7322"}},{"code_sha256_prefix":"ea056b66e9f470fd","entry":"matching_cpu","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"matching.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/matching.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ea056b66e9f470fd"}},{"code_sha256_prefix":"4ad7d2619004e70a","entry":"matching_gpu","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"matching.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/matching.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4ad7d2619004e70a"}},{"code_sha256_prefix":"808a0d4226050be2","entry":"partial_release_a","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"transport.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/transport.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"808a0d4226050be2"}},{"code_sha256_prefix":"6f33e7e2ea2767a5","entry":"partial_release_a","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"transport.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/transport.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6f33e7e2ea2767a5"}},{"code_sha256_prefix":"dba625d155fc3d0d","entry":"transport_tensor","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"transport.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/transport.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"dba625d155fc3d0d"}},{"code_sha256_prefix":"c19a6b44f3835401","entry":"find_ind_range","repo":"kaiyiz/push-relabel-ot","repo_kind":"official","path":"transport.py","file_url":"https://github.com/kaiyiz/push-relabel-ot/blob/HEAD/transport.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c19a6b44f3835401"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}