本文整理汇总了C++中graph_type::add_vertex方法的典型用法代码示例。如果您正苦于以下问题:C++ graph_type::add_vertex方法的具体用法?C++ graph_type::add_vertex怎么用?C++ graph_type::add_vertex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类graph_type
的用法示例。
在下文中一共展示了graph_type::add_vertex方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse_vertex_line
bool parse_vertex_line(graph_type &graph, const std::string &file, const std::string &line) {
if (line.empty() || line[0] == '#') {
return true;
}
char *dst;
size_t id = strtoul(line.c_str(), &dst, 10);
if (dst == line.c_str()) return false;
graph.add_vertex(id);
return true;
}
示例2: line_parser
bool line_parser(graph_type& graph, const std::string& filename,
const std::string& textline)
{
std::istringstream ssin(textline);
graphlab::vertex_id_type vid;
ssin >> vid;
graph.add_vertex(vid);
int out_nb;
ssin >> out_nb;
if (out_nb == 0)
graph.add_vertex(vid);
while (out_nb--) {
graphlab::vertex_id_type other_vid;
ssin >> other_vid;
if (vid != other_vid)
graph.add_edge(vid, other_vid);
}
return true;
}
示例3: vertex_loader
/////////////////////////////////////////////////////////////////////////
// Vertex Loader (used to read images and load the vertex data of the graph)
//bool vertex_loader(graph_type& graph, const std::string& fname,
// const std::string& line)
bool vertex_loader(graphlab::distributed_control& dc, graph_type& graph, string img_path)
{
// force a "/" at the end of the path
// make sure to check that the path is non-empty. (you do not
// want to make the empty path "" the root path "/" )
string path = img_path;
if (path.length() > 0 && path[path.length() - 1] != '/') path = path + "/";
vector<string> graph_files;
string search_prefix;
graphlab::fs_util::list_files_with_prefix(path, search_prefix, graph_files);
if (graph_files.size() == 0)
logstream(LOG_WARNING) << "No files found in " << path << std::endl;
// vertex data & id
graphlab::vertex_id_type vid(-1);
///////////////////////////////////////////////////////
// Loop over files
for(size_t i = 0; i < graph_files.size(); ++i)
{
// Each machine loads corresponding file
if (i % dc.numprocs() == dc.procid())
{
if (opts.verbose > 0)
logstream(LOG_EMPH)
<< "Process: " << dc.procid() << "/" << dc.numprocs() << " "
<< "picked image: " << graph_files[i] << "\n";
vid = i;
vertex_data vdata;
vdata.empty = false;
vdata.img_path = graph_files[i];
vdata.features.img_idx = i;
graph.add_vertex(vid, vdata);
}
}
return true;
}
示例4: loadUAIfile
//.........这里部分代码省略.........
factor_memb[i].resize(temp1);
for (int j=0; j!=temp1; ++j)
{
in >> temp2;
factor_memb[i][j] = temp2;
}
//CHECK(in.good(), "Could not finish reading cardinalities. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
}
if (opts.verbose > 0)
cout
<< "Finished Reading UAI-Preamble:"
<< " #Nodes = " << nnodes
<< ", #Factors = "<< nfactors
<< ", Average Cardinality = " << double(sum_of_cardinalities)/nfactors
<< "\n";
// Now read factor potentials
for (int i=0; i!=nfactors; ++i)
{
int cardprod; double potential_value; //, energy;
in >> cardprod;
vertex_data vdata;
vdata.nvars = factor_size[i];
if (vdata.nvars > 1) {
vdata.degree = vdata.nvars; // Factor degree.
}
vdata.cards.resize(factor_size[i]);
vdata.neighbors.resize(factor_size[i]);
vector<edge_data> edata(factor_size[i]);
int cardprod2 = 1;
for (int j=0; j!=factor_size[i]; ++j)
{
vdata.cards[j] = cardinalities[factor_memb[i][j]];
vdata.neighbors[j] = factor_memb[i][j]; // afm (check if this was intended!)
cardprod2 *= vdata.cards[j];
// Also create edge structs here
if (factor_size[i]>1)
{
edata[j].varid = factor_memb[i][j];
edata[j].card = cardinalities[edata[j].varid];
edata[j].multiplier_messages.setZero(edata[j].card);
edata[j].local_messages.setZero(edata[j].card);
}
}
//CHECK_EQ(cardprod, cardprod2, "Incorrectly sized factor");
CHECK_EQ(cardprod, cardprod2);
// Read factor potentials
vdata.potentials.resize(cardprod);
for (int k = 0; k != cardprod; ++k)
{
in >> potential_value;
//energy = Potential2Energy(potential_value);
vdata.potentials[k] = log10(potential_value);
}
//CHECK(in.good(), "Could not finish reading factor tables. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
// allocate factors evenly to different machines.
if (i%dc.numprocs() != dc.procid())
continue;
// If all is well, add vertex and edges
graph.add_vertex(i,vdata);
if (factor_size[i] > 1) // if not a unary, add edges to unaries
for (int j=0; j!=factor_size[i]; ++j)
graph.add_edge(i,edata[j].varid,edata[j]);
if (opts.verbose > 1)
{
cout << "Machine #" << dc.procid() << ", Vertex Id = " << i
<< " with " << vdata.nvars << " variables.";
if (factor_size[i] > 1)
{
cout << ", Edges = ";
for (int j=0; j!=factor_size[i]; ++j)
cout << ", (" << i << "," << edata[j].varid << ")";
}
cout << "\n";
cout << "potential: " << vdata.potentials << "\n";
}
} // End of reading factors
dc.barrier();
} // end of loading UAI file
示例5: graph_loader
bool graph_loader(graphlab::distributed_control& dc, graph_type& graph, string img_dir)
{
// force a "/" at the end of the path
// make sure to check that the path is non-empty. (you do not
// want to make the empty path "" the root path "/" )
string path = img_dir;
if (path.length() > 0 && path[path.length() - 1] != '/') path = path + "/";
vector<string> graph_files;
string search_prefix;
graphlab::fs_util::list_files_with_prefix(path, search_prefix, graph_files);
if (graph_files.size() == 0)
logstream(LOG_WARNING) << "No files found in " << path << std::endl;
if (opts.verbose > 2)
logstream(LOG_EMPH)
<< "Total number of images: " << graph_files.size() << "\n";
// vertex data & id
graphlab::vertex_id_type vid(-1);
graphlab::vertex_id_type other_vid;
///////////////////////////////////////////////////////
// Loop over files
for(size_t i = 0; i < graph_files.size(); ++i)
{
// Each machine loads corresponding file
if (i % dc.numprocs() == dc.procid())
{
if (opts.verbose > 0)
logstream(LOG_EMPH)
<< "Process: " << dc.procid() << "/" << dc.numprocs() << " "
<< "picked image: " << graph_files[i] << "\n";
vid = i;
vertex_data vdata;
vdata.empty = false;
vdata.img_path = graph_files[i];
vdata.features.img_idx = i;
graph.add_vertex(vid, vdata);
if (opts.verbose > 2)
logstream(LOG_EMPH)
<< "Vertex " << i << " Image: " << vdata.img_path << "\n";
}
}
// Adding edges between every pair of vertices to create a fully connected graph
// no duplicate edges are added
for(size_t i = 0; i < graph_files.size()-1; ++i)
{
vid = i;
for(size_t j = i+1; j < graph_files.size(); ++j)
{
other_vid = j;
if (opts.verbose > 0)
logstream(LOG_EMPH) << "Adding edge: (" << vid << "," << other_vid << ")\n";
edge_data edata; edata.empty = false;
graph.add_edge(vid,other_vid,edata);
}
}
return true;
}
示例6: loadUAIfile
/////////////////////////////////////////////////////////////////////////
// Load the UAI file. Each factor as a different vertex
void loadUAIfile(graphlab::distributed_control& dc, graph_type& graph, string graph_file, int& nodes)
{
// Not sure why this is needed
dc.barrier();
// Open file
ifstream in(graph_file.c_str());
//CHECK(in.good(),"Could not open file: "+graph_file);
CHECK(in.good());
// Read type of network
string name;
in >> name;
//CHECK(name.compare("MARKOV")==0, "Only Markov networks are supported. Are you sure this is a typeUAI energy file?");
CHECK(name.compare("MARKOV")==0);
// Read size of graph
int nnodes, nfactors;
in >> nnodes;
nodes = nnodes;
//CHECK(nnodes>0, "No. of nodes can't be negative. Are you sure this is a typeUAI energy file?");
CHECK(nnodes>0);
// Read node cardinalities
vector<int> cardinalities(nnodes,0);
int cardinality_i, sum_of_cardinalities = 0;
for (int i = 0; i != nnodes; ++i)
{
in >> cardinality_i;
cardinalities[i] = cardinality_i;
sum_of_cardinalities += cardinality_i;
//CHECK(in.good(), "Could not finish reading cardinalities. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
}
int vid = 0;
if(opts.algorithm != 0){
for(int i = 0; i < nnodes; i++){ //temporary .. put condition
vertex_data vdata;
vdata.factor_type = VAR;
vdata.nvars = 1;
vdata.cards.resize(1, cardinalities[i]);
vdata.potentials.setZero(cardinalities[i]);
vdata.beliefs.setConstant(cardinalities[i], 0.5);
graph.add_vertex(vid, vdata);
vid++;
}
}
// Read no. of factors
in >> nfactors;
//factor_size.resize(nfactors); factor_id.resize(nfactors);
vector<int> factor_size(nfactors,0); //vector<int> factor_id(nfactors,0);
vector< vector<int> > factor_memb; factor_memb.resize(nfactors);
int temp1, temp2;
// Loop and read factor members
for (int i=0; i!=nfactors; ++i)
{
in >> temp1;
factor_size[i] = temp1;
factor_memb[i].resize(temp1);
for (int j=0; j!=temp1; ++j)
{
in >> temp2;
factor_memb[i][j] = temp2;
}
//CHECK(in.good(), "Could not finish reading cardinalities. Are you sure this is a typeUAI energy file?");
CHECK(in.good());
}
if (opts.verbose > 1)
cout
<< "Finished Reading UAI-Preamble:"
<< " #Nodes = " << nnodes
<< ", #Factors = "<< nfactors
<< ", Average Cardinality = " << double(sum_of_cardinalities)/nfactors
<< "\n";
// Now read factor potentials
for (int i=0; i!=nfactors; ++i)
{
int cardprod; double potential_value; //, energy;
in >> cardprod;
vertex_data vdata;
vdata.nvars = factor_size[i];
if (vdata.nvars > 1) {
vdata.degree = vdata.nvars; // Factor degree.
vdata.factor_type = DENSE;
}
else {
vdata.degree = 1; // Factor degree.
vdata.factor_type = XOR;
//.........这里部分代码省略.........