26 #ifndef BATCHING_POMP_HYBRID_BATCHING_HPP_ 27 #define BATCHING_POMP_HYBRID_BATCHING_HPP_ 30 #include <ompl/base/StateSpace.h> 31 #include <ompl/util/Console.h> 32 #include <boost/graph/adjacency_list.hpp> 33 #include <boost/graph/properties.hpp> 34 #include "batching_pomp/batching/BatchingManager.hpp" 47 template<
class Graph,
class VStateMap,
class StateCon,
class EDistance>
51 typedef boost::graph_traits<Graph> GraphTypes;
52 typedef typename GraphTypes::vertex_iterator VertexIter;
53 typedef typename GraphTypes::vertex_descriptor Vertex;
69 std::string _roadmapFileName,
71 Graph& _currentRoadmap,
72 unsigned int _initNumVertices,
73 double _vertInflFactor,
74 double _radiusInflFactor,
75 const std::function<
double(
unsigned int)>& _initRadiusFn,
78 :
BatchingManager<Graph, VStateMap,
StateCon, EDistance>(_space,_stateMap,_roadmapFileName,_fullRoadmap,_currentRoadmap)
79 , mNumVerticesAdded{0u}
80 , mNextVertexTarget{_initNumVertices}
81 , mVertInflFactor{_vertInflFactor}
82 , mRadiusInflFactor{_radiusInflFactor}
83 , mInitRadius{_initRadiusFn(_initNumVertices)}
84 , mMaxRadius{_maxRadius}
85 , mEdgeBatchingMode{
false}
86 , mRadiusFn{_initRadiusFn}
96 mVertInflFactor = _vertInflFactor;
99 double getVertexInflationFactor()
const 101 return mVertInflFactor;
104 void setRadiusInflationFactor(
unsigned int _radiusInflFactor)
106 mRadiusInflFactor = _radiusInflFactor;
109 double getRadiusInflationFactor()
const 111 return mRadiusInflFactor;
114 void setInitRadius(
double _initRadius)
116 mInitRadius = _initRadius;
119 double getInitRadius()
const 124 void setMaxRadius(
double _maxRadius)
126 mMaxRadius = _maxRadius;
129 double getMaxRadius()
const 134 bool isInEdgeBatchingMode()
const 136 return mEdgeBatchingMode;
143 mMaxRadius = std::min(mMaxRadius,_newSolnCost);
146 void nextBatch(
const std::function<
bool(
const ompl::base::State*)>& _pruneFunction,
147 ompl::NearestNeighbors<Vertex>& _vertexNN)
override 151 OMPL_INFORM(
"Batching exhausted! No updates with nextBatch!");
155 OMPL_INFORM(
"New Hybrid Batch called!");
158 if(!mEdgeBatchingMode)
160 std::vector<Vertex> vertex_vector(mNextVertexTarget - mNumVerticesAdded);
163 while(mNumVerticesAdded < mNextVertexTarget)
169 vertex_vector[idx++] = newVertex;
176 if(mCurrVertex == mLastVertex) {
177 mEdgeBatchingMode =
true;
183 vertex_vector.resize(idx);
184 _vertexNN.add(vertex_vector);
189 mNextVertexTarget =
static_cast<unsigned int>(mNextVertexTarget * mVertInflFactor);
207 unsigned int mNumVerticesAdded;
208 unsigned int mNextVertexTarget;
209 double mVertInflFactor;
211 double mRadiusInflFactor;
215 VertexIter mCurrVertex;
216 VertexIter mLastVertex;
218 bool mEdgeBatchingMode;
219 std::function<double(unsigned int)> mRadiusFn;
225 #endif //BATCHING_POMP_HYBRID_BATCHING_HPP_ void setVertexInflationFactor(double _vertInflFactor)
Setters and Getters.
Definition: HybridBatching.hpp:94
Derived class of BatchingManager that implements Hybrid Batching.
Definition: HybridBatching.hpp:48
HybridBatching(const ompl::base::StateSpacePtr _space, VStateMap _stateMap, std::string _roadmapFileName, Graph &_fullRoadmap, Graph &_currentRoadmap, unsigned int _initNumVertices, double _vertInflFactor, double _radiusInflFactor, const std::function< double(unsigned int)> &_initRadiusFn, double _maxRadius)
Definition: HybridBatching.hpp:67
Abstract class that represents the batching strategy used for the planning algorithm.
Definition: BatchingManager.hpp:51
Definition: BatchingManager.hpp:36
void updateWithNewSolutionCost(double _newSolnCost) override
Overriden methods.
Definition: HybridBatching.hpp:141
Composite struct to associate the state space with each state.
Definition: BatchingPOMP.hpp:55
void nextBatch(const std::function< bool(const ompl::base::State *)> &_pruneFunction, ompl::NearestNeighbors< Vertex > &_vertexNN) override
Definition: HybridBatching.hpp:146