22 #ifndef RORouteAggregator_h
23 #define RORouteAggregator_h
60 if (vehicles.
size() == 0) {
64 const ROVehicle* defaultVehicle = vehicles.begin()->second;
72 const int MERGE_DISTANCE = 6;
73 for (
int i = 1; i <= MERGE_DISTANCE; i++) {
80 const size_t SKIP_LIMIT = 11;
82 int num_unprepared = 0;
83 int num_routes_prepared = 0;
84 int num_routes_unprepared = 0;
86 for (SameTargetMap::iterator it = stm.begin(); it != stm.end(); it++) {
87 const ROEdge* dest = it->first;
88 VehVec& bulkVehicles = it->second;
90 if (bulkVehicles.size() < SKIP_LIMIT) {
92 num_routes_unprepared += (int)bulkVehicles.size();
95 num_routes_prepared += (int)bulkVehicles.size();
98 router.
prepare(dest, defaultVehicle, skip);
99 for (VehVec::iterator it = bulkVehicles.begin(); it != bulkVehicles.end(); it++) {
136 static SameTargetMap
mergeTargets(SameTargetMap& stm,
const int distance) {
137 SameTargetMap result;
141 heap.reserve(stm.size());
143 for (SameTargetMap::iterator it = stm.begin(); it != stm.end(); it++) {
144 heap.push_back(it->first);
146 make_heap(heap.begin(), heap.end(), cmp);
147 while (heap.size() > 0) {
148 const ROEdge* dest = heap.front();
149 pop_heap(heap.begin(), heap.end(), cmp);
151 if (stm.count(dest) > 0 &&
152 stm[dest].size() > 0) {
153 result[dest] = stm[dest];
155 EdgeSet nearby =
getNearby(dest, distance);
156 for (EdgeSet::iterator it = nearby.begin(); it != nearby.end(); it++) {
157 const ROEdge* nearEdge = *it;
158 if (stm.count(nearEdge) > 0) {
160 result[dest].insert(result[dest].end(), stm[nearEdge].begin(), stm[nearEdge].end());
173 EdgeSet fringe(result);
174 for (
int i = 0; i < distance; i++) {
176 result.insert(fringe.begin(), fringe.end());
184 for (EdgeSet::iterator it = edges.begin(); it != edges.end(); it++) {
185 result.insert((*it)->getPredecessors().begin(), (*it)->getPredecessors().end());
SUMOTime getDepartureTime() const
Returns the time the vehicle starts at, 0 for triggered vehicles.
ComparatorNumVehicles(SameTargetMap &sameTargetMap)
SameTargetMap & mySameTargetMap
ROVehicleCont & getVehicles()
return vehicles for use by RouteAggregator
static SameTargetMap mergeTargets(SameTargetMap &stm, const int distance)
static EdgeSet approachingEdges(EdgeSet edges)
void preComputeCurrentRoute(SUMOAbstractRouter< ROEdge, ROVehicle > &router, SUMOTime begin, const ROVehicle &veh) const
Builds the complete route (or chooses her from the list of alternatives, when existing) ...
static void processAllRoutes(RONet &net, SUMOAbstractRouter< ROEdge, ROVehicle > &router)
precomputes all routes grouped by their destination edge
std::vector< const ROEdge * > ConstROEdgeVector
A map of named object pointers.
A vehicle as used by router.
virtual void prepare(const E *, const V *, bool)
unsigned int size() const
Returns the number of items within the container.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
const ROEdge * getDestination() const
A basic edge for routing applications.
const IDMap & getMyMap() const
The router's network representation.
std::map< const ROEdge *, VehVec > SameTargetMap
Base class for a vehicle's route definition.
bool operator()(const ROEdge *const a, const ROEdge *const b)
ComparatorNumVehicles & operator=(const ComparatorNumVehicles &)
Invalidated assignment operator.
std::set< const ROEdge * > EdgeSet
RORouteDef * getRouteDefinition() const
Returns the definition of the route the vehicle takes.
#define WRITE_MESSAGE(msg)
static EdgeSet getNearby(const ROEdge *edge, const int distance)
std::vector< ROVehicle * > VehVec