[mlpack] Range search with periodic boundary conditions

Ryan Curtin ryan at ratml.org
Wed May 13 11:34:23 EDT 2015


On Wed, May 13, 2015 at 11:14:58PM +0800, 董理 wrote:
> Dear Ryan,
> 
> I have encountered the following error when compiling my search codes with CoverTree:
> 
> /opt/packman/mlpack/1.0.12/0/include/mlpack/methods/range_search/range_search_impl.hpp:245:63: error: implicit instantiation of undefined template
>       'mlpack::tree::CoverTree<geomtk::DomainMetric<geomtk::SphereDomain>, mlpack::tree::FirstPointIsRoot,
>       mlpack::tree::EmptyStatistic>::SingleTreeTraverser<mlpack::range::RangeSearchRules<geomtk::DomainMetric<geomtk::SphereDomain>,
>       mlpack::tree::CoverTree<geomtk::DomainMetric<geomtk::SphereDomain>, mlpack::tree::FirstPointIsRoot, mlpack::tree::EmptyStatistic> > >'
>     typename TreeType::template SingleTreeTraverser<RuleType> traverser(rules);
>                                                               ^
> /Users/dongli/Works/lasm/src/AdvectionManager.cpp:206:12: note: in instantiation of member function
>       'mlpack::range::RangeSearch<geomtk::DomainMetric<geomtk::SphereDomain>, mlpack::tree::CoverTree<geomtk::DomainMetric<geomtk::SphereDomain>,
>       mlpack::tree::FirstPointIsRoot, mlpack::tree::EmptyStatistic> >::Search' requested here
>     search.Search(r, neighbors, distances);
>            ^
>> /opt/packman/mlpack/1.0.12/0/include/mlpack/core/tree/cover_tree/cover_tree.hpp:212:9: note: template is declared here
>   class SingleTreeTraverser;
>         ^
> 1 error generated.
> 
> 
> The metric class is defined in my codes as:
> 
> template <class DomainType>
> class DomainMetric {
> public:
>     static const DomainType *domain;
> 
>     DomainMetric() {}
> 
>     template <typename VecType1, typename VecType2>
>     static double
>     Evaluate(const VecType1 &x, const VecType2 &y) {
>         return domain->calcDistance(x, y);
>     }
> 
>     string
>     ToString() const {
>         return "Implement me!”;
>     }
> }; // DomainMetric
> 
> template <class DomainType>
> const DomainType* DomainMetric<DomainType>::domain = NULL;
> 
> And I define the RangeSearch template as
> 
> typedef geomtk::DomainMetric<typename Mesh::DomainType> MetricType;
> typedef mlpack::tree::CoverTree<MetricType> TreeType;
> typedef mlpack::range::RangeSearch<MetricType, TreeType> SearchType;
> 
> Any idea? Thanks in advance!

My first guess is that you're including
src/mlpack/core/tree/cover_tree/cover_tree.hpp, when really you should
include src/mlpack/core/tree/cover_tree.hpp, which then includes
everything else associated with the cover tree.

Probably the right thing to do on the mlpack side is to make sure that
cover_tree.hpp includes everything that it needs...

-- 
Ryan Curtin    | "What? Facts?"
ryan at ratml.org |   - Joe Cairo


More information about the mlpack mailing list