27 #ifndef BATCHING_POMP_UTIL_SELECTOR_HPP_ 28 #define BATCHING_POMP_UTIL_SELECTOR_HPP_ 34 #include <boost/property_map/dynamic_property_map.hpp> 35 #include <boost/graph/graphml.hpp> 36 #include <boost/graph/adjacency_list.hpp> 50 typedef boost::graph_traits<Graph> GraphTypes;
51 typedef typename GraphTypes::edge_descriptor Edge;
60 if(mType ==
"normal") {
64 else if(mType ==
"alternate") {
67 else if(mType ==
"failfast") {
70 else if(mType ==
"maxinf") {
74 throw std::invalid_argument(
"Invalid selector type specified - "+mType+
"!");
84 std::vector<Edge>
selectEdges(
const Graph& g,
const std::vector<Edge>& epath)
const 86 return mSelectEdgeFnPtr(g,epath);
92 using EdgePair = std::pair<double,Edge>;
95 std::vector<Edge> selectEdgesNormal(
const Graph& g,
const std::vector<Edge>& epath)
const 101 std::vector<Edge> selectEdgesAlternate(
const Graph& g,
const std::vector<Edge>& epath)
const 103 std::vector<Edge> reverseEpath(epath);
104 std::reverse(reverseEpath.begin(),reverseEpath.end());
109 std::vector<Edge> selectEdgesFailFast(
const Graph& g,
const std::vector<Edge>& epath)
const 111 std::vector < EdgePair > edgeProbList;
112 edgeProbList.reserve(epath.size());
113 for(Edge e : epath) {
114 edgeProbList.push_back(std::make_pair(g[e].probFree,e));
117 std::sort(edgeProbList.begin(), edgeProbList.end());
119 std::vector<Edge> orderedEdges;
120 orderedEdges.reserve(edgeProbList.size());
121 for(EdgePair ep : edgeProbList) {
122 orderedEdges.push_back(ep.second);
129 std::vector<Edge> selectEdgesMaxInf(
const Graph& g,
const std::vector<Edge>& epath)
const 131 std::vector < EdgePair > edgeProbList;
132 edgeProbList.reserve(epath.size());
133 for(Edge e : epath) {
134 edgeProbList.push_back( std::make_pair(std::fabs(g[e].probFree-0.5),e) );
137 std::sort(edgeProbList.begin(), edgeProbList.end());
139 std::vector<Edge> orderedEdges;
140 orderedEdges.reserve(edgeProbList.size());
141 for(EdgePair ep : edgeProbList) {
142 orderedEdges.push_back(ep.second);
149 std::function< std::vector<Edge>(
const Graph& g,
const std::vector<Edge>& epath) > mSelectEdgeFnPtr;
156 #endif // BATCHING_POMP_UTIL_SELECTOR_HPP_ Definition: BatchingManager.hpp:36
A selector assigns an ordering for evaluating edges on a candidate path.
Definition: Selector.hpp:47
std::vector< Edge > selectEdges(const Graph &g, const std::vector< Edge > &epath) const
Call edge selector function pointer.
Definition: Selector.hpp:84
Selector(const std::string &_type)
Definition: Selector.hpp:57