예제 #1
0
파일: enron.cpp 프로젝트: hanwentao/saedb
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());
	
	
}
예제 #2
0
파일: lda.cpp 프로젝트: SkTim/saedb
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());
    }