Parasol Planning Library (PPL)
LazyQuery.h
Go to the documentation of this file.
1 #ifndef PMPL_LAZY_QUERY_H_
2 #define PMPL_LAZY_QUERY_H_
3 
4 #include "QueryMethod.h"
5 
6 
20 class LazyQuery : virtual public QueryMethod {
21 
22  public:
23 
26 
28  typedef typename RoadmapType::VID VID;
29  typedef typename RoadmapType::EdgeID EdgeID;
30  typedef std::unordered_set<VID> VIDSet;
31 
35 
36  LazyQuery();
37  LazyQuery(XMLNode& _node);
38  virtual ~LazyQuery() = default;
39 
43 
44  virtual void Print(std::ostream& _os) const override;
45 
46  virtual void Initialize() override;
47 
51 
55  override;
56 
58 
59  protected:
60 
63 
64  typedef std::unordered_set<VID> VertexSet;
65  typedef std::unordered_set<EdgeID> EdgeSet;
66 
70 
73  virtual void Reset(RoadmapType* const _r) override;
74 
75  virtual bool PerformSubQuery(const VID _start, const VIDSet& _goals)
76  override;
77 
78  virtual double StaticPathWeight(
79  typename RoadmapType::adj_edge_iterator& _ei,
80  const double _sourceDistance, const double _targetDistance) const
81  override;
82 
83  virtual double DynamicPathWeight(
84  typename RoadmapType::adj_edge_iterator& _ei,
85  const double _sourceDistance, const double _targetDistance) const
86  override;
87 
91 
94  bool ValidatePath();
95 
99  bool PruneInvalidVertices();
100 
104  bool PruneInvalidEdges();
105 
108  virtual void NodeEnhance();
109 
112  virtual void ProcessInvalidNode(const Cfg& _cfg) { }
113 
117  void InvalidateVertex(const VID _vid);
118 
122  void InvalidateEdge(const VID _source, const VID _target);
123 
127 
130  void SetVertexInvalidated(const VID _vid) noexcept;
131 
135  bool IsVertexInvalidated(const VID _vid) const noexcept;
136 
140  bool IsEdgeInvalidated(const EdgeID _eid) const noexcept;
141 
146  bool IsEdgeInvalidated(const VID _source, const VID _target) const noexcept;
147 
150  void SetEdgeInvalidated(const EdgeID _eid) noexcept;
151 
155  void SetEdgeInvalidated(const VID _source, const VID _target) noexcept;
156 
160 
161  std::string m_vcLabel;
162  std::string m_lpLabel;
163  std::string m_enhanceDmLabel;
164 
165  std::vector<std::string> m_ncLabels;
166 
170 
171  bool m_deleteInvalid{true};
172 
173  std::vector<int> m_resolutions{1};
174  size_t m_numEnhance{0};
175  double m_d{0};
176 
178  std::vector<std::pair<Cfg, Cfg>> m_edges;
179 
181  std::unordered_map<RoadmapType*, VertexSet> m_invalidVertices;
183  std::unordered_map<RoadmapType*, EdgeSet> m_invalidEdges;
184 
186 
187 };
188 
189 #endif
std::function< double(typename GraphType::adj_edge_iterator &, const double, const double)> SSSPPathWeightFunction
Definition: SSSP.h:94
Definition: Cfg.h:38
Definition: GenericStateGraph.h:67
STAPLGraph::vertex_descriptor VID
Definition: GenericStateGraph.h:83
EID::edge_id_type EdgeID
Definition: GenericStateGraph.h:85
Definition: LazyQuery.h:20
virtual void Initialize() override
Definition: LazyQuery.cpp:78
void InvalidateVertex(const VID _vid)
Definition: LazyQuery.cpp:337
bool PruneInvalidVertices()
Definition: LazyQuery.cpp:187
bool IsEdgeInvalidated(const EdgeID _eid) const noexcept
Definition: LazyQuery.cpp:410
RoadmapType::EdgeID EdgeID
Definition: LazyQuery.h:29
std::unordered_map< RoadmapType *, VertexSet > m_invalidVertices
Lazy-invalidated vertices.
Definition: LazyQuery.h:181
void InvalidateEdge(const VID _source, const VID _target)
Definition: LazyQuery.cpp:363
void SetVertexInvalidated(const VID _vid) noexcept
Definition: LazyQuery.cpp:403
std::string m_lpLabel
The lazy local planner label.
Definition: LazyQuery.h:162
std::string m_vcLabel
The lazy validity checker label.
Definition: LazyQuery.h:161
std::unordered_map< RoadmapType *, EdgeSet > m_invalidEdges
Lazy-invalidated edges.
Definition: LazyQuery.h:183
std::vector< int > m_resolutions
List of resolution multiples to check.
Definition: LazyQuery.h:173
virtual double StaticPathWeight(typename RoadmapType::adj_edge_iterator &_ei, const double _sourceDistance, const double _targetDistance) const override
Definition: LazyQuery.cpp:131
virtual void NodeEnhance()
Definition: LazyQuery.cpp:294
LazyQuery()
Definition: LazyQuery.cpp:12
size_t m_numEnhance
Number of enhancement nodes to generate.
Definition: LazyQuery.h:174
double m_d
Gaussian distance for enhancement sampling.
Definition: LazyQuery.h:175
virtual void Reset(RoadmapType *const _r) override
Definition: LazyQuery.cpp:105
virtual void Print(std::ostream &_os) const override
Definition: LazyQuery.cpp:61
virtual void ProcessInvalidNode(const Cfg &_cfg)
Definition: LazyQuery.h:112
virtual bool PerformSubQuery(const VID _start, const VIDSet &_goals) override
Definition: LazyQuery.cpp:116
bool PruneInvalidEdges()
Definition: LazyQuery.cpp:228
std::unordered_set< VID > VIDSet
Definition: LazyQuery.h:30
std::unordered_set< VID > VertexSet
Definition: LazyQuery.h:64
std::vector< std::pair< Cfg, Cfg > > m_edges
Candidate edges for enhancement sampling.
Definition: LazyQuery.h:178
RoadmapType::VID VID
Definition: LazyQuery.h:28
virtual ~LazyQuery()=default
std::string m_enhanceDmLabel
The distance metric for enhancement.
Definition: LazyQuery.h:163
std::unordered_set< EdgeID > EdgeSet
Definition: LazyQuery.h:65
virtual void SetPathWeightFunction(SSSPPathWeightFunction< RoadmapType > _f) override
Definition: LazyQuery.cpp:89
virtual double DynamicPathWeight(typename RoadmapType::adj_edge_iterator &_ei, const double _sourceDistance, const double _targetDistance) const override
Definition: LazyQuery.cpp:145
MPBaseObject::RoadmapType RoadmapType
Definition: LazyQuery.h:27
bool m_deleteInvalid
Remove invalid vertices from the roadmap?
Definition: LazyQuery.h:171
std::vector< std::string > m_ncLabels
The connectors for enhancement.
Definition: LazyQuery.h:165
void SetEdgeInvalidated(const EdgeID _eid) noexcept
Definition: LazyQuery.cpp:428
bool IsVertexInvalidated(const VID _vid) const noexcept
Definition: LazyQuery.cpp:396
bool ValidatePath()
Definition: LazyQuery.cpp:160
Definition: QueryMethod.h:31
Definition: XMLNode.h:27