This repository contains experimental code for solving discrete optimal transport on NVIDIA GPUs. The following paper describes the methods implemented in this repository:
A one-time step is required to set up the necessary packages on the local machine:
$ julia --project -e 'import Pkg; Pkg.instantiate()'
Instances of optimal transport are wrapped in the following structure:
mutable struct OptimalTransportProblem
cost_matrix::Matrix{Float64}
source_distribution::Vector{Float64}
target_distribution::Vector{Float64}
end
The recommended function to run PDOT is located in scripts/solve.jl
:
function solve_instance_and_output(
output_directory::String,
instance_name::String,
instance::PDOT.OptimalTransportProblem;
tolerance = 1.0e-4
)
If PDOT is useful or relevant to your research, please kindly recognize our contributions by citing our paper:
@article{lu2024pdot,
title={PDOT: a Practical Primal-Dual Algorithm and a GPU-Based Solver for Optimal Transport},
author={Lu, Haihao and Yang, Jinwen},
journal={arXiv preprint arXiv:2407.19689},
year={2024}
}