summaryrefslogtreecommitdiff
path: root/geom_matching/wasserstein/src
diff options
context:
space:
mode:
Diffstat (limited to 'geom_matching/wasserstein/src')
-rw-r--r--geom_matching/wasserstein/src/auction_runner_gs.cpp3
-rw-r--r--geom_matching/wasserstein/src/auction_runner_jac.cpp3
-rw-r--r--geom_matching/wasserstein/src/wasserstein.cpp6
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)