.. Copyright (C) 2004-2009 The Trustees of Indiana University. Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =================================== |Logo| Scalable R-MAT generator =================================== :: template class scalable_rmat_iterator { public: typedef std::input_iterator_tag iterator_category; typedef std::pair value_type; typedef const value_type& reference; typedef const value_type* pointer; typedef void difference_type; scalable_rmat_iterator(); scalable_rmat_iterator(ProcessGroup pg, Distribution distrib, RandomGenerator& gen, vertices_size_type n, edges_size_type m, double a, double b, double c, double d, bool permute_vertices = true); // Iterator operations reference operator*() const; pointer operator->() const; scalable_rmat_iterator& operator++(); scalable_rmat_iterator operator++(int); bool operator==(const scalable_rmat_iterator& other) const; bool operator!=(const scalable_rmat_iterator& other) const; }; This class template implements a generator for R-MAT graphs [CZF04]_, suitable for initializing an adjacency_list or other graph structure with iterator-based initialization. An R-MAT graph has a scale-free distribution w.r.t. vertex degree and is implemented using Recursive-MATrix partitioning. Where Defined ------------- <``boost/graph/rmat_graph_generator.hpp``> Constructors ------------ :: scalable_rmat_iterator(); Constructs a past-the-end iterator. :: scalable_rmat_iterator(ProcessGroup pg, Distribution distrib, RandomGenerator& gen, vertices_size_type n, edges_size_type m, double a, double b, double c, double d, bool permute_vertices = true); Constructs an R-MAT generator iterator that creates a graph with ``n`` vertices and ``m`` edges. Inside the ``scalable_rmat_iterator`` processes communicate using ``pg`` to generate their local edges as defined by ``distrib``. ``a``, ``b``, ``c``, and ``d`` represent the probability that a generated edge is placed of each of the 4 quadrants of the partitioned adjacency matrix. Probabilities are drawn from the random number generator ``gen``. Vertex indices are permuted to eliminate locality when ``permute_vertices`` is true. Example ------- :: #include #include #include #include using boost::graph::distributed::mpi_process_group; typedef compressed_sparse_row_graph > Graph; typedef boost::scalable_rmat_iterator RMATGen; int main() { boost::minstd_rand gen; mpi_process_group pg; int N = 100; boost::parallel::variant_distribution distrib = boost::parallel::block(pg, N); // Create graph with 100 nodes and 400 edges Graph g(RMATGen(pg, distrib, gen, N, 400, 0.57, 0.19, 0.19, 0.05), RMATGen(), N, pg, distrib); return 0; } Bibliography ------------ .. [CZF04] D Chakrabarti, Y Zhan, and C Faloutsos. R-MAT: A Recursive Model for Graph Mining. In Proceedings of 4th International Conference on Data Mining, pages 442--446, 2004. ----------------------------------------------------------------------------- Copyright (C) 2009 The Trustees of Indiana University. Authors: Nick Edmonds, Brian Barrett, and Andrew Lumsdaine .. |Logo| image:: pbgl-logo.png :align: middle :alt: Parallel BGL :target: http://www.osl.iu.edu/research/pbgl .. _Sequential connected components: http://www.boost.org/libs/graph/doc/connected_components.html