[mlpack-svn] r13976 - mlpack/trunk/src/mlpack/core/tree/cover_tree

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Dec 4 18:22:52 EST 2012


Author: rcurtin
Date: 2012-12-04 18:22:52 -0500 (Tue, 04 Dec 2012)
New Revision: 13976

Modified:
   mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp
Log:
Use Prescore() to prune reference children without evaluating the base case.


Modified: mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp
===================================================================
--- mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp	2012-12-04 23:22:28 UTC (rev 13975)
+++ mlpack/trunk/src/mlpack/core/tree/cover_tree/dual_tree_traverser_impl.hpp	2012-12-04 23:22:52 UTC (rev 13976)
@@ -393,6 +393,7 @@
       const size_t refIndex = frame.referenceIndex;
       const size_t refPoint = refNode->Point();
       const size_t queryIndex = frame.queryIndex;
+      const size_t queryPoint = queryNode.Point();
       double baseCase = frame.baseCase;
 
 //      Log::Debug << "Currently inspecting reference node " << refNode->Point()
@@ -413,11 +414,11 @@
       // If this is a self-child, the base case has already been evaluated.
       // We also must ensure that the base case was evaluated with this query
       // point.
-      if ((refPoint != refIndex) || (queryNode.Point() != queryIndex))
+      if ((refPoint != refIndex) || (queryPoint != queryIndex))
       {
 //        Log::Warn << "Must evaluate base case " << queryNode.Point() << " "
 //            << refPoint << "\n";
-        baseCase = rule.BaseCase(queryNode.Point(), refPoint);
+        baseCase = rule.BaseCase(queryPoint, refPoint);
 //        Log::Debug << "Base case " << baseCase << std::endl;
       }
 
@@ -459,6 +460,23 @@
         const size_t queryIndex = queryNode.Point();
         const size_t refIndex = refNode->Child(j).Point();
 
+        // We need to incorporate shell() here to try and avoid base case
+        // computations.  TODO
+//        Log::Debug << "Prescore query " << queryNode.Point() << " scale "
+//            << queryNode.Scale() << ", reference " << refNode->Point() <<
+//            " scale " << refNode->Scale() << ", reference child " <<
+//            refNode->Child(j).Point() << " scale " << refNode->Child(j).Scale()
+//            << " with base case " << baseCase;
+        childScore = rule.Prescore(queryNode, *refNode, refNode->Child(j),
+            frame.baseCase);
+//        Log::Debug << " and result " << childScore << ".\n";
+
+        if (childScore == DBL_MAX)
+        {
+          ++numPrunes;
+          continue;
+        }
+
         // Calculate the base case of each child.
         baseCase = rule.BaseCase(queryIndex, refIndex);
 




More information about the mlpack-svn mailing list