Parasol Planning Library (PPL)
RewireConnector.h
Go to the documentation of this file.
1 #ifndef PMPL_REWIRE_CONNECTOR_H_
2 #define PMPL_REWIRE_CONNECTOR_H_
3 
4 #include "ConnectorMethod.h"
5 
17 class RewireConnector : virtual public ConnectorMethod {
18 
19  public:
20 
23 
29  typedef typename RoadmapType::VID VID;
31 
35 
38  bool passed{false};
40  double cost{0};
41 
42  RewireTestOutput(const bool _passed = false,
43  LPOutput&& _lpo = LPOutput(),
44  const double _cost = 0) :
45  passed(_passed),
46  lpo(_lpo),
47  cost(_cost)
48  { }
49  };
50 
53  bool passed{false};
55  double cost{0};
56 
57  GroupRewireTestOutput(const bool _passed = false,
58  GroupLPOutput&& _lpo = GroupLPOutput(),
59  const double _cost = 0) :
60  passed(_passed),
61  lpo(_lpo),
62  cost(_cost)
63  { }
64  };
65 
66  template <typename AbstractRoadmapType>
67  using OutputIterator = typename ConnectorMethod::template
69 
73 
75 
76  RewireConnector(XMLNode& _node);
77 
78  virtual ~RewireConnector() = default;
79 
81 
82  protected:
83 
86 
87  virtual void ConnectImpl(RoadmapType* const _r, const VID _source,
88  const VertexSet* const _targetSet = nullptr,
89  OutputIterator<RoadmapType>* const _collision = nullptr) override;
90 
91  virtual void ConnectImpl(GroupRoadmapType* const _r, const VID _source,
92  const VertexSet* const _targetSet = nullptr,
93  OutputIterator<GroupRoadmapType>* const _collision = nullptr) override;
94 
96 
98 
99  private:
100 
103 
110  void RewireVertex(RoadmapType* const _r, const VID _vid,
111  const std::vector<Neighbor>& _neighbors,
112  OutputIterator<RoadmapType>* const _collision);
113 
115  void RewireVertex(GroupRoadmapType* const _r, const VID _vid,
116  const std::vector<Neighbor>& _neighbors,
117  OutputIterator<GroupRoadmapType>* const _collision);
118 
125  void RewireNeighbors(RoadmapType* const _r, const VID _vid,
126  const std::vector<Neighbor>& _neighbors,
127  OutputIterator<RoadmapType>* const _collision);
128 
130  void RewireNeighbors(GroupRoadmapType* const _r, const VID _vid,
131  const std::vector<Neighbor>& _neighbors,
132  OutputIterator<GroupRoadmapType>* const _collision);
133 
143  RewireTestOutput RewireTest(RoadmapType* const _r, const VID _vid,
144  const VID _currentParent, const double _currentCost,
145  const VID _potentialParent, const double _potentialParentCost,
146  OutputIterator<RoadmapType>* const _collision) noexcept;
147 
149  GroupRewireTestOutput RewireTest(GroupRoadmapType* const _r, const VID _vid,
150  const VID _currentParent, const double _currentCost,
151  const VID _potentialParent, const double _potentialParentCost,
152  OutputIterator<GroupRoadmapType>* const _collision) noexcept;
153 
159  double ShortestPathWeight(const RoadmapType* const _r,
160  const VID _vid) const noexcept;
161 
163  double ShortestPathWeight(const GroupRoadmapType* const _r,
164  const VID _vid) const noexcept;
165 
171  double EdgeWeight(const RoadmapType* const _r, const VID _source,
172  const VID _target) const noexcept;
173 
175  double EdgeWeight(const GroupRoadmapType* const _r, const VID _source,
176  const VID _target) const noexcept;
177 
182  double EdgeWeight(const WeightType& _w, const Robot* const _robot) const
183  noexcept;
184 
193  void ChangeParent(RoadmapType* const _r, const VID _vid,
194  const VID _oldParent, const VID _newParent, const WeightType& _newLp,
195  const double _newCost) const noexcept;
196 
198  void ChangeParent(GroupRoadmapType* const _r, const VID _vid,
199  const VID _oldParent, const VID _newParent, const GroupWeightType& _newLp,
200  const double _newCost) const noexcept;
201 
205 
206  std::string m_nfLabel;
207  std::string m_operatorLabel;
208  std::string m_objectiveLabel;
209 
211  std::function<double(const double&, const double&)> m_operator;
214  std::function<double(const double&, const double&)> m_objective;
215 
217  std::unordered_map<VID, double> m_distanceBuffer;
218 
220 
221 };
222 
223 #endif
224 
Definition: ConnectorMethod.h:25
RoadmapType::VID VID
Definition: ConnectorMethod.h:34
std::vector< Neighbor > m_neighborBuffer
Definition: ConnectorMethod.h:223
RoadmapType::VertexSet VertexSet
Definition: ConnectorMethod.h:35
std::back_insert_iterator< std::vector< typename AbstractRoadmapType::VP > > OutputIterator
Definition: ConnectorMethod.h:50
Definition: Weight.h:36
Definition: GenericStateGraph.h:67
STAPLGraph::vertex_descriptor VID
Definition: GenericStateGraph.h:83
std::unordered_set< VID > VertexSet
Definition: GenericStateGraph.h:86
Definition: GroupCfg.h:39
Definition: GroupLocalPlan.h:24
Definition: GroupRoadmap.h:25
Definition: RewireConnector.h:17
MPBaseObject::GroupWeightType GroupWeightType
Definition: RewireConnector.h:26
RoadmapType::VertexSet VertexSet
Definition: RewireConnector.h:30
MPBaseObject::RoadmapType RoadmapType
Definition: RewireConnector.h:27
virtual void ConnectImpl(RoadmapType *const _r, const VID _source, const VertexSet *const _targetSet=nullptr, OutputIterator< RoadmapType > *const _collision=nullptr) override
Definition: RewireConnector.cpp:74
RoadmapType::VID VID
Definition: RewireConnector.h:29
MPBaseObject::GroupCfgType GroupCfgType
Definition: RewireConnector.h:24
virtual ~RewireConnector()=default
MPBaseObject::WeightType WeightType
Definition: RewireConnector.h:25
MPBaseObject::GroupRoadmapType GroupRoadmapType
Definition: RewireConnector.h:28
RewireConnector()
Definition: RewireConnector.cpp:10
Definition: Robot.h:31
Definition: XMLNode.h:27
Definition: GroupLPOutput.h:29
Definition: LPOutput.h:24
An aggregate for returning the results of a group rewiring check.
Definition: RewireConnector.h:52
double cost
New total cost to the rewired node.
Definition: RewireConnector.h:55
GroupRewireTestOutput(const bool _passed=false, GroupLPOutput &&_lpo=GroupLPOutput(), const double _cost=0)
Definition: RewireConnector.h:57
GroupLPOutput lpo
The generated local plan.
Definition: RewireConnector.h:54
bool passed
Should we use this rewiring?
Definition: RewireConnector.h:53
An aggregate for returning the results of a rewiring check.
Definition: RewireConnector.h:37
bool passed
Should we use this rewiring?
Definition: RewireConnector.h:38
double cost
New total cost to the rewired node.
Definition: RewireConnector.h:40
LPOutput lpo
The generated local plan.
Definition: RewireConnector.h:39
RewireTestOutput(const bool _passed=false, LPOutput &&_lpo=LPOutput(), const double _cost=0)
Definition: RewireConnector.h:42