@@ -23,29 +23,45 @@ Random.seed!(100)
2323 μ ./= sum (μ)
2424 ν ./= sum (ν)
2525
26- # create random cost matrix
27- C = pairwise (SqEuclidean (), rand (1 , M), rand (1 , N); dims= 2 )
28-
29- # compute optimal transport map and cost with POT
30- pot_P = POT. emd (μ, ν, C)
31- pot_cost = POT. emd2 (μ, ν, C)
32-
33- # compute optimal transport map and cost with Tulip
34- lp = Tulip. Optimizer ()
35- P = emd (μ, ν, C, lp)
36- @test size (C) == size (P)
37- @test MOI. get (lp, MOI. TerminationStatus ()) == MOI. OPTIMAL
38- @test maximum (abs, P .- pot_P) < 1e-2
39-
40- lp = Tulip. Optimizer ()
41- cost = emd2 (μ, ν, C, lp)
42- @test dot (C, P) ≈ cost atol = 1e-5
43- @test MOI. get (lp, MOI. TerminationStatus ()) == MOI. OPTIMAL
44- @test cost ≈ pot_cost atol = 1e-5
45-
46- # ensure that provided map is used
47- cost2 = emd2 (similar (μ), similar (ν), C, lp; plan= P)
48- @test cost2 ≈ cost
26+ @testset " example" begin
27+ # create random cost matrix
28+ C = pairwise (SqEuclidean (), rand (1 , M), rand (1 , N); dims= 2 )
29+
30+ # compute optimal transport map and cost with POT
31+ pot_P = POT. emd (μ, ν, C)
32+ pot_cost = POT. emd2 (μ, ν, C)
33+
34+ # compute optimal transport map and cost with Tulip
35+ lp = Tulip. Optimizer ()
36+ P = emd (μ, ν, C, lp)
37+ @test size (C) == size (P)
38+ @test MOI. get (lp, MOI. TerminationStatus ()) == MOI. OPTIMAL
39+ @test maximum (abs, P .- pot_P) < 1e-2
40+
41+ lp = Tulip. Optimizer ()
42+ cost = emd2 (μ, ν, C, lp)
43+ @test dot (C, P) ≈ cost atol = 1e-5
44+ @test MOI. get (lp, MOI. TerminationStatus ()) == MOI. OPTIMAL
45+ @test cost ≈ pot_cost atol = 1e-5
46+ end
47+
48+ @testset " pre-computed plan" begin
49+ # create random cost matrix
50+ C = pairwise (SqEuclidean (), rand (1 , M), rand (1 , N); dims= 2 )
51+
52+ # compute optimal transport map
53+ P = emd (μ, ν, C, Tulip. Optimizer ())
54+
55+ # do not use μ and ν to ensure that provided map is used
56+ cost = emd2 (similar (μ), similar (ν), C, Tulip. Optimizer (); plan= P)
57+ @test cost ≈ emd2 (μ, ν, C, Tulip. Optimizer ())
58+ end
59+
60+ # https://github.com/JuliaOptimalTransport/OptimalTransport.jl/issues/71
61+ @testset " cost matrix with integers" begin
62+ C = pairwise (SqEuclidean (), rand (1 : 10 , 1 , M), rand (1 : 10 , 1 , N); dims= 2 )
63+ emd2 (μ, ν, C, Tulip. Optimizer ())
64+ end
4965end
5066
5167@testset " entropically regularized transport" begin
0 commit comments