Skip to content

Commit

Permalink
Merge pull request #258 from yakra/MasterGraphs2
Browse files Browse the repository at this point in the history
master graph vertex & edge count speedup, take 2
  • Loading branch information
jteresco authored Nov 8, 2019
2 parents 7c0b6db + 416b399 commit 8b6ee13
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 106 deletions.
56 changes: 3 additions & 53 deletions siteupdate/cplusplus/classes/GraphGeneration/HighwayGraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,50 +143,8 @@ class HighwayGraph
}
}
std::cout << '!' << std::endl;

// print summary info
std::cout << et.et() << " Simple graph has " << vertices.size() << " vertices, " << simple_edge_count() << " edges." << std::endl;
std::cout << et.et() << "Collapsed graph has " << num_collapsed_vertices() << " vertices, " << collapsed_edge_count() << " edges." << std::endl;
std::cout << et.et() << " Traveled graph has " << num_traveled_vertices() << " vertices, " << traveled_edge_count() << " edges." << std::endl;
} // end ctor

unsigned int num_collapsed_vertices()
{ unsigned int count = 0;
for (std::pair<const Waypoint*, HGVertex*> wv : vertices)
if (wv.second->visibility == 2) count ++;
return count;
}

unsigned int num_traveled_vertices()
{ unsigned int count = 0;
for (std::pair<const Waypoint*, HGVertex*> wv : vertices)
if (wv.second->visibility >= 1) count ++;
return count;
}

unsigned int simple_edge_count()
{ unsigned int edges = 0;
for (std::pair<const Waypoint*, HGVertex*> wv : vertices)
edges += wv.second->incident_s_edges.size();
return edges/2;
}

unsigned int collapsed_edge_count()
{ unsigned int edges = 0;
for (std::pair<const Waypoint*, HGVertex*> wv : vertices)
if (wv.second->visibility == 2)
edges += wv.second->incident_c_edges.size();
return edges/2;
}

unsigned int traveled_edge_count()
{ unsigned int edges = 0;
for (std::pair<const Waypoint*, HGVertex*> wv : vertices)
if (wv.second->visibility >= 1)
edges += wv.second->incident_t_edges.size();
return edges/2;
}

void clear()
{ for (std::pair<const Waypoint*, HGVertex*> wv : vertices) delete wv.second;
vertex_names.clear();
Expand Down Expand Up @@ -371,14 +329,12 @@ class HighwayGraph
{ std::ofstream simplefile(path+"tm-master-simple.tmg");
std::ofstream collapfile(path+"tm-master-collapsed.tmg");
std::ofstream travelfile(path+"tm-master-traveled.tmg");
unsigned int num_collapsed_edges = collapsed_edge_count();
unsigned int num_traveled_edges = traveled_edge_count();
simplefile << "TMG 1.0 simple\n";
collapfile << "TMG 1.0 collapsed\n";
travelfile << "TMG 2.0 traveled\n";
simplefile << vertices.size() << ' ' << simple_edge_count() << '\n';
collapfile << num_collapsed_vertices() << ' ' << num_collapsed_edges << '\n';
travelfile << num_traveled_vertices() << ' ' << num_traveled_edges << ' ' << traveler_lists.size() << '\n';
simplefile << graph_vector[0].vertices << ' ' << graph_vector[0].edges << '\n';
collapfile << graph_vector[1].vertices << ' ' << graph_vector[1].edges << '\n';
travelfile << graph_vector[2].vertices << ' ' << graph_vector[2].edges << ' ' << traveler_lists.size() << '\n';

// write vertices
unsigned int sv = 0;
Expand Down Expand Up @@ -438,12 +394,6 @@ class HighwayGraph
collapfile.close();
travelfile.close();

graph_vector[0].vertices = vertices.size();
graph_vector[1].vertices = num_collapsed_vertices();
graph_vector[2].vertices = num_traveled_vertices();
graph_vector[0].edges = simple_edge_count();
graph_vector[1].edges = num_collapsed_edges;
graph_vector[2].edges = num_traveled_edges;
graph_vector[0].travelers = 0;
graph_vector[1].travelers = 0;
graph_vector[2].travelers = traveler_lists.size();
Expand Down
26 changes: 24 additions & 2 deletions siteupdate/cplusplus/functions/graph_generation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,31 @@ else { list<Region*> *regions;
't', 'M', (list<Region*>*)0, (list<HighwaySystem*>*)0, (PlaceRadius*)0);
graph_types.push_back({"master", "All Travel Mapping Data", "These graphs contain all routes currently plotted in the Travel Mapping project."});
size_t graphnum = 3;
#ifndef threading_enabled

cout << et.et() << "Writing master TM graph files." << endl;
graph_vector[0].edges = 0; graph_vector[0].vertices = graph_data.vertices.size();
graph_vector[1].edges = 0; graph_vector[1].vertices = 0;
graph_vector[2].edges = 0; graph_vector[2].vertices = 0;
for (std::pair<const Waypoint*, HGVertex*> wv : graph_data.vertices)
{ graph_vector[0].edges += wv.second->incident_s_edges.size();
if (wv.second->visibility >= 1)
{ graph_vector[2].vertices++;
graph_vector[2].edges += wv.second->incident_t_edges.size();
if (wv.second->visibility == 2)
{ graph_vector[1].vertices++;
graph_vector[1].edges += wv.second->incident_c_edges.size();
}
}
}
graph_vector[0].edges /= 2;
graph_vector[1].edges /= 2;
graph_vector[2].edges /= 2;
// print summary info
std::cout << " Simple graph has " << graph_vector[0].vertices << " vertices, " << graph_vector[0].edges << " edges." << std::endl;
std::cout << "Collapsed graph has " << graph_vector[1].vertices << " vertices, " << graph_vector[1].edges << " edges." << std::endl;
std::cout << " Traveled graph has " << graph_vector[2].vertices << " vertices, " << graph_vector[2].edges << " edges." << std::endl;

#ifndef threading_enabled
graph_data.write_master_graphs_tmg(graph_vector, args.graphfilepath + "/", traveler_lists);
#else
cout << et.et() << "Setting up subgraphs." << endl;
Expand All @@ -45,7 +68,6 @@ else { list<Region*> *regions;
#include "subgraphs/region.cpp"
#ifdef threading_enabled
// write graph_vector entries to disk
cout << et.et() << "Writing master TM graph files." << flush;
thr[0] = new thread(MasterTmgThread, &graph_data, &graph_vector, args.graphfilepath+'/', &traveler_lists, &graphnum, &list_mtx, &all_waypoints, &et);
// set up for threaded subgraph generation
// start at t=1, because MasterTmgThread will spawn another SubgraphThread when finished
Expand Down
86 changes: 35 additions & 51 deletions siteupdate/python-teresco/siteupdate.py
Original file line number Diff line number Diff line change
Expand Up @@ -1730,48 +1730,7 @@ def __init__(self, all_waypoints, highway_systems, datacheckerrors, et):
else:
HGEdge(vertex=v, fmt_mask=1)
HGEdge(vertex=v, fmt_mask=2)

# print summary info
print("!\n" + et.et() + " Simple graph has " + str(len(self.vertices)) +
" vertices, " + str(self.simple_edge_count()) + " edges.")
print(et.et() + "Collapsed graph has " + str(self.num_collapsed_vertices()) +
" vertices, " + str(self.collapsed_edge_count()) + " edges.")
print(et.et() + " Traveled graph has " + str(self.num_traveled_vertices()) +
" vertices, " + str(self.traveled_edge_count()) + " edges.")

def num_collapsed_vertices(self):
count = 0
for v in self.vertices.values():
if v.visibility == 2:
count += 1
return count

def num_traveled_vertices(self):
count = 0
for v in self.vertices.values():
if v.visibility >= 1:
count += 1
return count

def simple_edge_count(self):
edges = 0
for v in self.vertices.values():
edges += len(v.incident_s_edges)
return edges//2

def collapsed_edge_count(self):
edges = 0
for v in self.vertices.values():
if v.visibility == 2:
edges += len(v.incident_c_edges)
return edges//2

def traveled_edge_count(self):
edges = 0
for v in self.vertices.values():
if v.visibility >= 1:
edges += len(v.incident_t_edges)
return edges//2
print("!")

def matching_vertices(self, regions, systems, placeradius, rg_vset_hash, qt):
# return a tuple containing
Expand Down Expand Up @@ -1894,14 +1853,32 @@ def write_master_graphs_tmg(self, graph_list, path, traveler_lists):
simplefile = open(path+"tm-master-simple.tmg","w",encoding='utf-8')
collapfile = open(path+"tm-master-collapsed.tmg","w",encoding='utf-8')
travelfile = open(path+"tm-master-traveled.tmg","w",encoding='utf-8')
num_collapsed_edges = self.collapsed_edge_count()
num_traveled_edges = self.traveled_edge_count()
cv = 0
tv = 0
se = 0
ce = 0
te = 0

# count vertices & edges
for v in self.vertices.values():
se += len(v.incident_s_edges)
if v.visibility >= 1:
tv += 1
te += len(v.incident_t_edges)
if v.visibility == 2:
cv += 1
ce += len(v.incident_c_edges)
se //= 2;
ce //= 2;
te //= 2;

# write graph headers
simplefile.write("TMG 1.0 simple\n")
collapfile.write("TMG 1.0 collapsed\n")
travelfile.write("TMG 2.0 traveled\n")
simplefile.write(str(len(self.vertices)) + ' ' + str(self.simple_edge_count()) + '\n')
collapfile.write(str(self.num_collapsed_vertices()) + ' ' + str(num_collapsed_edges) + '\n')
travelfile.write(str(self.num_traveled_vertices()) + ' ' + str(num_traveled_edges) + ' ' + str(len(traveler_lists)) + '\n')
simplefile.write(str(len(self.vertices)) + ' ' + str(se) + '\n')
collapfile.write(str(cv) + ' ' + str(ce) + '\n')
travelfile.write(str(tv) + ' ' + str(te) + ' ' + str(len(traveler_lists)) + '\n')

# write vertices
sv = 0
Expand Down Expand Up @@ -1949,9 +1926,16 @@ def write_master_graphs_tmg(self, graph_list, path, traveler_lists):
simplefile.close()
collapfile.close()
travelfile.close()
graph_list.append(GraphListEntry('tm-master-simple.tmg', 'All Travel Mapping Data', sv, self.simple_edge_count(), 0, 'simple', 'master'))
graph_list.append(GraphListEntry('tm-master-collapsed.tmg', 'All Travel Mapping Data', cv, self.collapsed_edge_count(), 0, 'collapsed', 'master'))
graph_list.append(GraphListEntry('tm-master-traveled.tmg', 'All Travel Mapping Data', tv, self.traveled_edge_count(), len(traveler_lists), 'traveled', 'master'))
graph_list.append(GraphListEntry('tm-master-simple.tmg', 'All Travel Mapping Data', sv, se, 0, 'simple', 'master'))
graph_list.append(GraphListEntry('tm-master-collapsed.tmg', 'All Travel Mapping Data', cv, ce, 0, 'collapsed', 'master'))
graph_list.append(GraphListEntry('tm-master-traveled.tmg', 'All Travel Mapping Data', tv, te, len(traveler_lists), 'traveled', 'master'))
# print summary info
print(" Simple graph has " + str(len(self.vertices)) +
" vertices, " + str(se) + " edges.")
print("Collapsed graph has " + str(cv) +
" vertices, " + str(ce) + " edges.")
print(" Traveled graph has " + str(tv) +
" vertices, " + str(te) + " edges.")

# write a subset of the data,
# in simple, collapsed and traveled formats,
Expand Down Expand Up @@ -2159,7 +2143,7 @@ def __init__(self,filename,descr,vertices,edges,travelers,format,category):

# Create a list of HighwaySystem objects, one per system in systems.csv file
highway_systems = []
print(et.et() + "Reading systems list in " + args.highwaydatapath+"/"+args.systemsfile + ". ",end="",flush=True)
print(et.et() + "Reading systems list in " + args.highwaydatapath+"/"+args.systemsfile + ". ",flush=True)
try:
file = open(args.highwaydatapath+"/"+args.systemsfile, "rt",encoding='utf-8')
except OSError as e:
Expand Down

0 comments on commit 8b6ee13

Please sign in to comment.