示例#1
0
int main(int argc, char* argv[])
{
  TEnv Env(argc, argv);
  TStr PrefixPath = Env.GetArgs() > 1 ? Env.GetArg(1) : TStr("");

  double ts1 = Tick();
  TTableContext Context;
  TVec<TPair<PTable,TStr> > NodeTblV = TVec<TPair<PTable,TStr> >();
  TVec<TPair<PTable, int> > EdgeTblV = TVec<TPair<PTable, int> >();
  Schema NodeSchema = Schema();
  Schema EdgeSchema = Schema();
  LoadFlickrTables(PrefixPath, Context, NodeTblV, NodeSchema, EdgeTblV, EdgeSchema);

  double ts2 = Tick();

  THash<TStr,TStrH> NStrH;
  TIntStrH NIdH;
  CreateIdHashes(NodeTblV, NStrH, NIdH);

  double ts3 = Tick();
  PSVNet Graph = LoadGraphMNet<PSVNet>(NodeTblV, EdgeTblV, NStrH, NIdH);

  double ts4 = Tick();

  int nExps = 10;
  int nTriads = 0;
  for (int i = 0; i < nExps; i++) {
    nTriads = TSnap::GetTriads(Graph);
  }
  double ts5 = Tick();
  StdOut->PutStrFmtLn("Triads %d", nTriads);

  PSOut TimeOut = TFOut::New(PrefixPath + TStr("time.txt"), true);
  TimeOut->PutStrFmtLn("===== Triad Counting - PSVNet =====");
  TimeOut->PutStrLn(Env.GetCmLn());
  TimeOut->PutStrFmtLn("Input Time = %f", GetCPUTimeUsage(ts1, ts2));
  TimeOut->PutStrFmtLn("Preprocessing Time = %f", GetCPUTimeUsage(ts2, ts3));
  TimeOut->PutStrFmtLn("Conversion Time = %f", GetCPUTimeUsage(ts3, ts4));
  TimeOut->PutStrFmtLn("Computing Time = %f", GetCPUTimeUsage(ts4, ts5)/nExps);

	return 0;
}
示例#2
0
int main(int argc, char* argv[]) {
//  PSVNet PGraph = PSVNet::New();
//  PCVNet PGraph = PCVNet::New();
  PMVNet PGraph = PMVNet::New();
  int NTypeId1 = PGraph->AddNType(TStr("Photo"));
  int NTypeId2 = PGraph->AddNType(TStr("User"));
  int NTypeId3 = PGraph->AddNType(TStr("Tag"));
  int ETypeId1 = PGraph->AddEType(TStr("EType1"), TStr("Photo"), TStr("User"));
  int ETypeId2 = PGraph->AddEType(TStr("EType2"), TStr("User"), TStr("Photo"));
  int ETypeId3 = PGraph->AddEType(TStr("EType3"), TStr("User"), TStr("Photo"));
  int ETypeId4 = PGraph->AddEType(TStr("EType4"), TStr("Photo"), TStr("Tag"));
  StdOut->PutStrFmtLn("EdgeTypeId %d - %d - %d", ETypeId1, ETypeId2, ETypeId4);
  StdOut->PutStrFmtLn("TypeId %d - %d - %d", PGraph->AddNType(TStr("User")), PGraph->GetNTypeId(TStr("Photo")), PGraph->GetNTypeId(TStr("User")));
  int NId1 = PGraph->AddNode(1, 0);
  int NId2 = PGraph->AddNode(1, 1);
  int NId3 = PGraph->AddNode(0, 1);
  int NId4 = PGraph->AddNode(1, 2);
  int NId5 = PGraph->AddNode(0, 0);
  int NId6 = PGraph->AddNode(2, 1);
  StdOut->PutStrFmtLn("Nodes %d %d %d %d %d %d", NId1, NId2, NId3, NId4, NId5, NId6);
  StdOut->PutStrFmtLn("Size = %d", PGraph->GetNodes());
  for (TMVNet::TNodeI Iter = PGraph->BegNI(); Iter < PGraph->EndNI(); Iter++) {
    StdOut->PutStrFmtLn("Iter = %d, %d", Iter.GetTypeId(), Iter.GetId());
  }


//  StdOut->PutStrFmtLn("Edges %d", EId1);
//  StdOut->PutStrFmtLn("IsEdge(%d) = %d", EId1, PGraph->IsEdge(EId1));
//  StdOut->PutStrFmtLn("IsEdge(%d) = %d", 1, PGraph->IsEdge(1));
//  int EId;
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d", NId1, NId2, PGraph->IsEdge(NId1, NId2, true));
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d - %d", NId1, NId2, PGraph->IsEdge(NId1, NId2, EId, true), EId);
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d", NId1, NId3, PGraph->IsEdge(NId1, NId3, true));
//  StdOut->PutStrFmtLn("IsEdge(%d, %d) = %d - %d", NId1, NId3, PGraph->IsEdge(NId1, NId3, EId, true), EId);

  int EId1 = PGraph->AddEdge(NId1, NId3, ETypeId2);
  int EId2 = PGraph->AddEdge(NId3, NId2, ETypeId1);
  int EId3 = PGraph->AddEdge(NId5, NId2, ETypeId1);
  int EId4 = PGraph->AddEdge(NId1, NId5, ETypeId2, 10);
  int EId5 = PGraph->AddEdge(NId3, NId1, ETypeId1);
  int EId6 = PGraph->AddEdge(NId3, NId6, ETypeId4);
  int EId7 = PGraph->AddEdge(NId3, NId6, ETypeId4);
  for (TMVNet::TEdgeI Iter = PGraph->BegEI(); Iter < PGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());
  StdOut->PutStrFmtLn("Degree %d-%d", PGraph->GetNI(NId3).GetInDeg(), PGraph->GetNI(NId3).GetOutDeg());
  for (int i = 0; i < PGraph->GetNI(NId3).GetOutDeg(); i++) {
    StdOut->PutStrFmtLn("Edge %d", PGraph->GetNI(NId3).GetOutEId(i));
  }

  TStrV NTypeNameV;
  NTypeNameV.Add(TStr("Photo"));
  NTypeNameV.Add(TStr("User"));
  PMVNet PSubGraph = PGraph->GetSubGraph(NTypeNameV);
  StdOut->PutStrFmtLn("Size = %d", PSubGraph->GetNodes());
  StdOut->PutStrFmtLn("Edge Size = %d", PSubGraph->GetEdges());
  for (TMVNet::TEdgeI Iter = PSubGraph->BegEI(); Iter < PSubGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }

  PGraph->DelEdge(EId5);
  PGraph->DelEdge(EId3);
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());
  PGraph->DelEdge(NId3, NId6, true);
  for (TSVNet::TEdgeI Iter = PGraph->BegEI(); Iter < PGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());

  PGraph->DelNode(NId2);
  StdOut->PutStrFmtLn("Size = %d", PGraph->GetNodes());
  for (TSVNet::TNodeI Iter = PGraph->BegNI(); Iter < PGraph->EndNI(); Iter++) {
    StdOut->PutStrFmtLn("Node = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  for (TSVNet::TEdgeI Iter = PGraph->BegEI(); Iter < PGraph->EndEI(); Iter++) {
    StdOut->PutStrFmtLn("Edge = %d:%d", Iter.GetTypeId(), Iter.GetId());
  }
  StdOut->PutStrFmtLn("Edge Size = %d", PGraph->GetEdges());

  TIntV ShortestDists;
  StdOut->PutStrFmtLn("Depth = %d", TSnap::GetShortestDistances(PGraph, NId1, false, false, ShortestDists));
  for (TSVNet::TNodeI Iter = PGraph->BegNI(); Iter < PGraph->EndNI(); Iter++) {
    int NId = Iter.GetId();
    StdOut->PutStrFmtLn("Shortest Dist = %d:%d", NId, ShortestDists[NId]);
  }

  TIntFltH PageRankH;
  TSnap::GetPageRankMNetMP(PGraph, PageRankH, 0.849999999999998, 0.0001, 10);
}
示例#3
0
int main(int argc, char* argv[])
{
  TEnv Env(argc, argv);
  TStr PrefixPath = Env.GetArgs() > 1 ? Env.GetArg(1) : TStr("");

  double ts1 = Tick();
  TTableContext Context;
  TVec<PTable> NodeTblV = TVec<PTable>();
  TVec<PTable> EdgeTblV = TVec<PTable>();
  Schema NodeSchema = Schema();
  Schema EdgeSchema = Schema();
  LoadFlickrTables(PrefixPath, Context, NodeTblV, NodeSchema, EdgeTblV, EdgeSchema);

  double ts2 = Tick();

  int ExpectedSz = 0;
  for (TVec<PTable>::TIter it = NodeTblV.BegI(); it < NodeTblV.EndI(); it++) {
    PTable Table = *it;
    ExpectedSz += Table->GetNumRows();
  }

  THash<TStr, TInt> Hash(ExpectedSz);
  TStrV OriNIdV(ExpectedSz);

  MergeNodeTables(NodeTblV, NodeSchema, Hash, OriNIdV);
  PTable EdgeTable = MergeEdgeTables(EdgeTblV, EdgeSchema, Hash, Context);

  double ts3 = Tick();
  TStrV V;
  TStrV VE;
  VE.Add(EdgeSchema.GetVal(2).GetVal1());
  PNEANet Graph = TSnap::ToNetwork<PNEANet>(EdgeTable, EdgeSchema.GetVal(0).GetVal1(), EdgeSchema.GetVal(1).GetVal1(),
						V, V, VE, aaLast);
  double ts4 = Tick();

  //int nExps = 1;
  int nExps = 40;
  TIntFltH PageRankResults;
  for (int i = 0; i < nExps; i++) {
    PageRankResults = TIntFltH(ExpectedSz);
#ifdef USE_OPENMP
    TSnap::GetWeightedPageRankMP2(Graph, PageRankResults, EdgeSchema.GetVal(2).GetVal1(), 0.849999999999998, 0.0001, 10);
#else
    TSnap::GetWeightedPageRank(Graph, PageRankResults, EdgeSchema.GetVal(2).GetVal1(), 0.849999999999998, 0.0001, 10);
#endif
  }
  double ts5 = Tick();

  PSOut ResultOut = TFOut::New(PrefixPath + TStr("page-rank-results.tsv"));
  for (TIntFltH::TIter it = PageRankResults.BegI(); it < PageRankResults.EndI(); it++) {
    ResultOut->PutStrFmtLn("%s\t%f9", OriNIdV[it.GetKey()].CStr(), it.GetDat().Val);
  }
  double ts6 = Tick();

  bool isPar = false;
#ifdef USE_OPENMP
  isPar = true;
#endif

//  PSOut FeaturesOut = TFOut::New(PrefixPath + "features.txt");
//  FeaturesOut->PutStrFmtLn("Photo %d", PPhotoTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Users %d", PUserTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Tags %d", PTagTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Comments %d", PCommentTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Locations %d", PLocationTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Photo - Owner %d", PPhotoOwnerTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Photo - Comment %d", PPhotoCommentTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Photo - Location %d", PPhotoLocationTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Comment - User %d", PCommentUserTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Comment - User %d", PCommentUserTbl->GetNumRows().Val);
////  FeaturesOut->PutStrFmtLn("Photo - Tagger %d", PPhotoTaggerTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Tagger - Tag %d", PTaggerTagTbl->GetNumRows().Val);
//  FeaturesOut->PutStrFmtLn("Total number of nodes = %d", Graph->GetNodes());
//  FeaturesOut->PutStrFmtLn("Total number of edges = %d", Graph->GetEdges());

  PSOut TimeOut = TFOut::New(PrefixPath + TStr("time.txt"), true);
  TimeOut->PutStrFmtLn("Experiment Weighted - %s - %s", PrefixPath.CStr(), (isPar ? "Parallel" : "Sequential"));
  TimeOut->PutStrFmtLn("Input Time = %f", GetCPUTimeUsage(ts1, ts2));
  TimeOut->PutStrFmtLn("Preprocessing Time = %f", GetCPUTimeUsage(ts2, ts3));
  TimeOut->PutStrFmtLn("Conversion Time = %f", GetCPUTimeUsage(ts3, ts4));
  TimeOut->PutStrFmtLn("Computing Time = %f", GetCPUTimeUsage(ts4, ts5)/nExps);
  TimeOut->PutStrFmtLn("Output Time = %f", GetCPUTimeUsage(ts5, ts6));

  return 0;
}