void BuildGraph(string file) { sae::io::GraphBuilder<int> b; b.AddVertexDataType("Vertex"); b.AddEdgeDataType("Edge"); int eid=0; string s; ifstream fin(env_inst.INPUT_DOC); vector<string> components; while(getline(fin,s)) { components=component_tokenize(s,"#"); int sid=atoi(components[2].c_str()); int rid=atoi(components[3].c_str()); b.AddVertex(sid,vertex_data(sid),"Vertex"); b.AddVertex(rid,vertex_data(rid),"Vertex"); b.AddEdge(sid,rid,edge_data(eid++),"Edge"); } cout<<"reading "<<eid<<" lines!"<<endl; fin.close(); system("mkdir /home/qicong/saedb/build/toolkit/influence/graph"); b.Save(file.c_str()); }
void BuildLdaGraph(string file) { sae::io::GraphBuilder<int> b; b.AddVertexDataType("LdaVertex"); b.AddEdgeDataType("LdaEdge"); vertex_data vd[env_inst.NDOCS]; for(int i=0;i<env_inst.NDOCS;i++) { vd[i].id=id2k(i); vd[i].topic_num=env_inst.NTOPICS; vd[i].AllocHeap(); b.AddVertex(vd[i].id,vd[i],"LdaVertex"); } vertex_data vw[env_inst.NWORDS]; for(int i=0;i<env_inst.NWORDS;i++) { vw[i].id=i; vw[i].topic_num=env_inst.NTOPICS; vw[i].AllocHeap(); b.AddVertex(vw[i].id,vw[i],"LdaVertex"); } int eid=0; for(int i=0;i<env_inst.NDOCS;i++) { for(int j=0;j<env_inst.wordlist[i].size();j++) b.AddEdge(vd[i].id,vw[env_inst.wordlist[i][j]].id,edge_data(eid++),"LdaEdge"); } system("mkdir graph"); system("mkdir ./graph/graph_lda"); b.Save(file.c_str()); }
int main(int argc, char** argv) { graphlab::mpi_tools::init(argc, argv); global_logger().set_log_level(LOG_INFO); graphlab::distributed_control dc; graph_type g(dc); graph_type2 g2(dc); std::cout << "-----------Begin Grid Test: Object Accessors--------------------" << std::endl; size_t dim = 3; size_t num_vertices = 0; size_t num_edge = 0; typedef uint32_t vertex_id_type; if (dc.procid() == 0) { // here we create dim * dim vertices. for (size_t i = 0; i < dim * dim; ++i) { // create the vertex data, randomizing the color vertex_data vdata; vdata.i = i; // create the vertex g.add_vertex(vertex_id_type(i), vdata); g2.add_vertex(vertex_id_type(2 * i)); ++num_vertices; } // create the edges. The add_edge(i,j,edgedata) function creates // an edge from i->j. with the edgedata attached. edge_data edata; for (size_t i = 0;i < dim; ++i) { for (size_t j = 0;j < dim - 1; ++j) { // add the horizontal edges in both directions // g.add_edge(dim * i + j, dim * i + j + 1, edge_data(dim*i+j, dim*i+j+1)); g.add_edge(dim * i + j + 1, dim * i + j, edge_data(dim*i+j+1, dim*i+j)); // add the vertical edges in both directions g.add_edge(dim * j + i, dim * (j + 1) + i, edge_data(dim*j+i, dim*(j+1)+i)); g.add_edge(dim * (j + 1) + i, dim * j + i, edge_data(dim*(j+1)+i, dim*j+i)); num_edge += 4; } } } dc.all_reduce(num_vertices); dc.all_reduce(num_edge); // the graph is now constructed // we need to call finalize. g.finalize(); g2.finalize(); ASSERT_EQ(g.num_vertices(), g2.num_vertices()); dc.cout() << "Test num_vertices()...\n"; ASSERT_EQ(g.num_vertices(), num_vertices); dc.cout() << "+ Pass test: num_vertices :)\n\n"; dc.cout() << "Test num_edges()...\n"; ASSERT_EQ(g.num_edges(), num_edge); dc.cout() << "+ Pass test: num_edges :)\n\n"; // Symmetric graph: #inneighbor == outneighbor dc.cout() << "Test num_in_neighbors() == num_out_neighbors() ...\n"; for (size_t i = 0; i < g.num_local_vertices(); ++i) { graph_type::vertex_type v(g.l_vertex(i)); ASSERT_EQ(v.num_in_edges(), v.num_out_edges()); if (v.id() == 4) { ASSERT_EQ(v.num_in_edges(), 4); } if (v.id() == 0) { ASSERT_EQ(v.num_in_edges(), 2); } } dc.cout() << "+ Pass test: #in = #out...\n\n"; dc.cout() << "Test iterate over in/out_edges and get edge data: \n"; for (graphlab::lvid_type i = 0; i < g.num_local_vertices(); ++i) { local_vertex_type v = local_vertex_type(g.l_vertex(i)); const local_edge_list_type& out_edges = v.out_edges(); const local_edge_list_type& in_edges = v.in_edges(); printf("Test v: %u\n", v.global_id()); printf("In edge ids: "); foreach(local_edge_type edge, in_edges) std::cout << "(" << edge.data().from << "," << edge.data().to << ") "; std::cout <<std::endl; printf("Out edge ids: "); foreach(local_edge_type edge, out_edges) std::cout << "(" << edge.data().from << "," << edge.data().to << ") "; std::cout <<std::endl; foreach(local_edge_type edge, out_edges) { edge_data edata = edge.data(); ASSERT_EQ(edata.from, edge.source().global_id()); ASSERT_EQ(edata.to, edge.target().global_id()); } foreach(local_edge_type edge, in_edges) { edge_data edata = edge.data(); ASSERT_EQ(edata.from, edge.source().global_id()); ASSERT_EQ(edata.to, edge.target().global_id()); }