Class RecursiveMatrixGraphGenerator<V,E>
- java.lang.Object
-
- com.jgalgo.gen.RecursiveMatrixGraphGenerator<V,E>
-
- Type Parameters:
V
- the vertices typeE
- the edges type
- All Implemented Interfaces:
GraphGenerator<V,E>
public class RecursiveMatrixGraphGenerator<V,E> extends Object implements GraphGenerator<V,E>
Generates a random graph using the R-MAT model.The R-MAT model generates a graph by recursively partitioning the adjacency matrix into four quadrants and assigning edges to each quadrant with different probabilities \((a,b,c,d)\). The generator accept as an input how many edges to generate, and it generate them one by one: each edge is assigned to a quadrant according to the probabilities \((a,b,c,d)\), and then the quadrant is recursively partitioned until a single cell is reached. The cell is then assigned the edge. The process is repeated until the required number of edges is generated. Except the vertices set and the number of edges to generate, the model has four parameters: the probabilities \((a,b,c,d)\). The generated graphs may be either directed or undirected, but parallel edges are never created.
The probabilities \((a,b,c,d)\) must be in \([0,1]\) and sum to \(1\). If the graph is undirected, the probabilities \(b\) and \(c\) must be equal. By default, the values of \((a,b,c,d)\) are \((0.57,0.21,0.17,0.05)\) for directed graphs and \((0.57,0.19,0.19,0.05)\) for undirected graphs. The generator will generate undirected graphs by default.
For deterministic behavior, set the seed of the generator using
setSeed(long)
.Based on 'R-MAT: A Recursive Model for Graph Mining' by Chakrabarti et al.
- Author:
- Barak Ugav
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description GraphBuilder<V,E>
generateIntoBuilder()
Generates a graph into a builder.static <V,E>
RecursiveMatrixGraphGenerator<V,E>newInstance()
Creates a new R-MAT generator.static RecursiveMatrixGraphGenerator<Integer,Integer>
newIntInstance()
Creates a new R-MAT generator forIntGraph
.void
setDirected(boolean directed)
Determine if the generated graph(s) is directed or undirected.void
setEdgeProbabilities(double a, double b, double c, double d)
Set the edge probabilities of the generated graph(s).void
setEdges(int m, BiFunction<V,V,E> edgeBuilder)
Set the edge builder function of the generated graph(s).void
setEdges(int m, Supplier<E> edgeSupplier)
Set the edge supplier of the generated graph(s).void
setSeed(long seed)
Set the seed of the random number generator used to generate the graph(s).void
setVertices(int verticesNum, Supplier<V> vertexSupplier)
Set the vertices set of the generated graph(s) from a supplier.void
setVertices(Collection<V> vertices)
Set the vertices of the generated graph(s).-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.jgalgo.gen.GraphGenerator
generate, generateMutable
-
-
-
-
Method Detail
-
newInstance
public static <V,E> RecursiveMatrixGraphGenerator<V,E> newInstance()
Creates a new R-MAT generator.- Type Parameters:
V
- the vertices typeE
- the edges type- Returns:
- a new R-MAT generator
-
newIntInstance
public static RecursiveMatrixGraphGenerator<Integer,Integer> newIntInstance()
Creates a new R-MAT generator forIntGraph
.- Returns:
- a new R-MAT generator for
IntGraph
-
setVertices
public void setVertices(Collection<V> vertices)
Set the vertices of the generated graph(s).If the generator is used to generate multiple graphs, the same vertices set is used for all of them.
- Parameters:
vertices
- the vertices set
-
setVertices
public void setVertices(int verticesNum, Supplier<V> vertexSupplier)
Set the vertices set of the generated graph(s) from a supplier.The supplier will be called exactly
verticesNum
times, and the same set of vertices created will be used for multiple graphs ifGraphGenerator.generate()
is called multiple times.- Parameters:
verticesNum
- the number of verticesvertexSupplier
- the supplier of vertices
-
setEdges
public void setEdges(int m, Supplier<E> edgeSupplier)
Set the edge supplier of the generated graph(s).The supplier will be called for any edge created, for any graph generated. This behavior is different from
setVertices(int, Supplier)
, where the supplier is used to generate a set of vertices which is reused for any generated graph.- Parameters:
m
- the number of edges to generateedgeSupplier
- the edge supplier
-
setEdges
public void setEdges(int m, BiFunction<V,V,E> edgeBuilder)
Set the edge builder function of the generated graph(s).The function will be called for any edge created, for any graph generated. This behavior is different from
setVertices(int, Supplier)
, where the supplier is used to generate a set of vertices which is reused for any generated graph.- Parameters:
m
- the number of edges to generateedgeBuilder
- the edge builder function
-
setDirected
public void setDirected(boolean directed)
Determine if the generated graph(s) is directed or undirected.By default, the generated graph(s) is undirected.
- Parameters:
directed
-true
if the generated graph(s) will be directed,false
if undirected
-
setEdgeProbabilities
public void setEdgeProbabilities(double a, double b, double c, double d)
Set the edge probabilities of the generated graph(s).The generator accept as an input how many edges to generate, and it generate them one by one: each edge is assigned to a quadrant according to the probabilities \((a,b,c,d)\), and then the quadrant is recursively partitioned until a single cell is reached. The cell is then assigned the edge. The process is repeated until the required number of edges is generated.
The probabilities \((a,b,c,d)\) are corresponding to the four quadrants of the adjacency matrix, and they must be in \([0,1]\) and sum to \(1\). If the graph is undirected, the probabilities \(b\) and \(c\) must be equal. By default, the values of \((a,b,c,d)\) are \((0.57,0.21,0.17,0.05)\) for directed graphs and \((0.57,0.19,0.19,0.05)\) for undirected graphs.
- Parameters:
a
- the probability of the edge to be in the first quadrantb
- the probability of the edge to be in the second quadrantc
- the probability of the edge to be in the third quadrantd
- the probability of the edge to be in the fourth quadrant
-
setSeed
public void setSeed(long seed)
Set the seed of the random number generator used to generate the graph(s).By default, a random seed is used. For deterministic behavior, set the seed of the generator.
- Parameters:
seed
- the seed of the random number generator
-
generateIntoBuilder
public GraphBuilder<V,E> generateIntoBuilder()
Description copied from interface:GraphGenerator
Generates a graph into a builder.This is the a more flexible way to generate a graph. The builder can be used to generate a mutable or immutable graph, or to add additional vertices or edges on top of the generated ones.
- Specified by:
generateIntoBuilder
in interfaceGraphGenerator<V,E>
- Returns:
- a new graph builder populated by the generator with the generator parameters
-
-