diff options
author | Arnur Nigmetov <a.nigmetov@gmail.com> | 2017-04-04 14:20:16 +0200 |
---|---|---|
committer | Arnur Nigmetov <a.nigmetov@gmail.com> | 2017-04-04 14:20:16 +0200 |
commit | 1607071fcd9d473eae295693fc97bee8c50d6a11 (patch) | |
tree | 3cfb964a926b7c839c9b00cc2abdc963ee822b88 /geom_matching/wasserstein/src | |
parent | 2b48644a5a7d0549cc1d8e5f5cd05da984bc0669 (diff) |
Prepare to output real relative error.
In Wasserstein distance computation AuctionRunner class now has a field
relativeError which contains the relative error which we can guarantee,
so if the user asked for 0.1 accuracy, but the result is 0.03 accurate,
this information can be retrieved.
Diffstat (limited to 'geom_matching/wasserstein/src')
-rw-r--r-- | geom_matching/wasserstein/src/auction_runner_gs.cpp | 3 | ||||
-rw-r--r-- | geom_matching/wasserstein/src/auction_runner_jac.cpp | 3 | ||||
-rw-r--r-- | geom_matching/wasserstein/src/wasserstein.cpp | 6 |
3 files changed, 9 insertions, 3 deletions
diff --git a/geom_matching/wasserstein/src/auction_runner_gs.cpp b/geom_matching/wasserstein/src/auction_runner_gs.cpp index bd25442..5865325 100644 --- a/geom_matching/wasserstein/src/auction_runner_gs.cpp +++ b/geom_matching/wasserstein/src/auction_runner_gs.cpp @@ -122,6 +122,7 @@ void AuctionRunnerGS::flushAssignment(void) void AuctionRunnerGS::runAuction(void) { + relativeError = std::numeric_limits<double>::max(); #ifdef PRINT_DETAILED_TIMING std::chrono::high_resolution_clock hrClock; std::chrono::time_point<std::chrono::high_resolution_clock> startMoment; @@ -169,6 +170,7 @@ void AuctionRunnerGS::runAuction(void) std::cout << "; error bound: " << numerator / denominator << std::endl; #endif #endif + relativeError = numerator / denominator; // if relative error is greater than delta, continue notDone = ( numerator / denominator > delta ); } @@ -243,6 +245,7 @@ double AuctionRunnerGS::getDistanceToQthPowerInternal(void) auto pA = bidders[bIdx]; assert( 0 <= biddersToItems[bIdx] and biddersToItems[bIdx] < static_cast<int>(items.size()) ); auto pB = items[biddersToItems[bIdx]]; + std::cout << "pA = " << pA << ", pB = " << pB << ", pow(distLp(pA, pB, internal_p), wassersteinPower) = " << pow(distLp(pA, pB, internal_p), wassersteinPower) << ", dist = " << distLp(pA, pB, internal_p) << std::endl; result += pow(distLp(pA, pB, internal_p), wassersteinPower); } wassersteinCost = result; diff --git a/geom_matching/wasserstein/src/auction_runner_jac.cpp b/geom_matching/wasserstein/src/auction_runner_jac.cpp index b892643..c807ec9 100644 --- a/geom_matching/wasserstein/src/auction_runner_jac.cpp +++ b/geom_matching/wasserstein/src/auction_runner_jac.cpp @@ -188,7 +188,7 @@ void AuctionRunnerJac::flushAssignment(void) void AuctionRunnerJac::runAuction(void) { - // relative error + relativeError = std::numeric_limits<double>::max(); // choose some initial epsilon oracle->setEpsilon(oracle->maxVal / 4.0); assert( oracle->getEpsilon() > 0 ); @@ -210,6 +210,7 @@ void AuctionRunnerJac::runAuction(void) } else { denominator = pow(denominator, 1.0 / wassersteinPower); double numerator = currentResult - denominator; + relativeError = numerator / denominator; //std::cout << " numerator: " << numerator << " denominator: " << denominator << std::endl; //std::cout << " error bound: " << numerator / denominator << std::endl; // if relative error is greater than delta, continue diff --git a/geom_matching/wasserstein/src/wasserstein.cpp b/geom_matching/wasserstein/src/wasserstein.cpp index fc1b662..2c536ed 100644 --- a/geom_matching/wasserstein/src/wasserstein.cpp +++ b/geom_matching/wasserstein/src/wasserstein.cpp @@ -79,7 +79,8 @@ double wassersteinDistVec(const std::vector<DiagramPoint>& A, #else AuctionRunnerJac auction(A, B, q, delta, _internal_p); #endif - return auction.getWassersteinDistance(); + double result = auction.getWassersteinDistance(); + return result; } double wassersteinCostVec(const std::vector<DiagramPoint>& A, @@ -119,7 +120,8 @@ double wassersteinCostVec(const std::vector<DiagramPoint>& A, #else AuctionRunnerJac auction(A, B, q, delta, _internal_p); #endif - return auction.getWassersteinCost(); + double result = auction.getWassersteinCost(); + return result; } bool readDiagramPointSet(const std::string& fname, std::vector<std::pair<double, double>>& result) |