Class LayeredLabelPropagation
public class LayeredLabelPropagation extends Object
The method computePermutation(double[], String, int)
returns a permutation of the original
symmetric graph provided with the constructor
which will (hopefully) increase locality (see the paper). Usually, the permutation is fed to
Transform.mapOffline(ImmutableGraph, int[], int, File, ProgressLogger)
to permute the original graph.
Note that the graph provided must be symmetric and loopless. If this is not the case,
please use Transform.symmetrizeOffline(ImmutableGraph, int, File, ProgressLogger)
and possibly
Transform.filterArcs(ImmutableGraph, it.unimi.dsi.webgraph.Transform.ArcFilter, ProgressLogger)
with
filter Transform.NO_LOOPS
to generate a suitable graph.
This class can also be used to run just label propagation over a given graph to get the labels assigned to the nodes for a fixed γ.
Memory requirements
This class requires 13 bytes per node (three integers and a boolean), plus the memory
that is necessary to load the graph, which however can be just
memory-mapped
.
Note that the main method will warm up the algorithm by performing a depth-first visit if the graph is not mapped. The visit will require storing an additional array of integers.
- Author:
- Paolo Boldi, Marco Rosa, Massimo Santini, Sebastiano Vigna
-
Field Summary
Fields Modifier and Type Field Description protected EliasFanoCumulativeOutdegreeList
cumulativeOutdegrees
The outdegrees cumulative function.static double[]
DEFAULT_GAMMAS
The list of default γ values.static int
MAX_UPDATES
The default maximum number of updates.protected long
nextArcs
The number of arcs beforenextNode
.protected int
nextNode
The starting node of the next chunk of nodes to be processed. -
Constructor Summary
Constructors Constructor Description LayeredLabelPropagation(ImmutableGraph symGraph, int[] startPerm, int numberOfThreads, long seed, boolean exact)
Creates a new instance using a specific initial permutation and specified number of threads.LayeredLabelPropagation(ImmutableGraph symGraph, int[] startPerm, long seed)
Creates a new instance using a specific initial permutation.LayeredLabelPropagation(ImmutableGraph symGraph, int[] startPerm, long seed, boolean exact)
Creates a new instance using a specific initial permutation.LayeredLabelPropagation(ImmutableGraph symGraph, long seed)
Creates a new instance. -
Method Summary
Modifier and Type Method Description AtomicIntegerArray
computeLabels(double gamma)
Computes the labels of a graph for a given value of γ using the default maximum number of updates.AtomicIntegerArray
computeLabels(double gamma, int maxUpdates)
Computes the labels of a graph for a given value of γ.int[]
computePermutation(double[] gammas, String cluster)
Computes the final permutation of the graph using the default maximum number of updates.int[]
computePermutation(double[] gammas, String cluster, int maxUpdates)
Computes the final permutation of the graph.int[]
computePermutation(String cluster)
Computes the final permutation of the graph using the default maximum number of updates and the default gammas.void
labelBasename(String labelBasename)
Sets the basename for label files.static void
main(String[] args)
-
Field Details
-
DEFAULT_GAMMAS
public static final double[] DEFAULT_GAMMASThe list of default γ values. It must be kept in sync with themain(String[])
default parameters. -
MAX_UPDATES
public static final int MAX_UPDATESThe default maximum number of updates.- See Also:
- Constant Field Values
-
nextNode
protected int nextNodeThe starting node of the next chunk of nodes to be processed. -
nextArcs
protected long nextArcsThe number of arcs beforenextNode
. -
cumulativeOutdegrees
The outdegrees cumulative function.
-
-
Constructor Details
-
LayeredLabelPropagation
Creates a new instance.- Parameters:
symGraph
- a symmetric, loopless graph.seed
- a random seed.- Throws:
IOException
-
LayeredLabelPropagation
public LayeredLabelPropagation(ImmutableGraph symGraph, int[] startPerm, long seed) throws IOExceptionCreates a new instance using a specific initial permutation.- Parameters:
symGraph
- a symmetric, loopless graph.startPerm
- an initial permutation of the graph, ornull
for no permutation.seed
- a random seed.- Throws:
IOException
-
LayeredLabelPropagation
public LayeredLabelPropagation(ImmutableGraph symGraph, int[] startPerm, long seed, boolean exact) throws IOExceptionCreates a new instance using a specific initial permutation.If
exact
is true, the final permutation is exactly the same as if you first permute the graph withstartPerm
and then apply LLP with annull
starting permutation.- Parameters:
symGraph
- a symmetric, loopless graph.startPerm
- an initial permutation of the graph, ornull
for no permutation.seed
- a random seed.exact
- a boolean flag that forces the algorithm to run exactly.- Throws:
IOException
-
LayeredLabelPropagation
public LayeredLabelPropagation(ImmutableGraph symGraph, int[] startPerm, int numberOfThreads, long seed, boolean exact) throws IOExceptionCreates a new instance using a specific initial permutation and specified number of threads.If
exact
is true, the final permutation is exactly the same as if you first permute the graph withstartPerm
and then apply LLP with annull
starting permutation.- Parameters:
symGraph
- a symmetric, loopless graph.startPerm
- an initial permutation of the graph, ornull
for no permutation.numberOfThreads
- the number of threads to be used (0 for automatic sizing).seed
- a random seed.exact
- a boolean flag that forces the algorithm to run exactly.- Throws:
IOException
-
-
Method Details
-
labelBasename
Sets the basename for label files.- Parameters:
labelBasename
- basename for label files.
-
computeLabels
Computes the labels of a graph for a given value of γ using the default maximum number of updates.- Parameters:
gamma
- the gamma parameter.- Returns:
- the labels.
-
computeLabels
Computes the labels of a graph for a given value of γ.- Parameters:
gamma
- the gamma parameter.maxUpdates
- the maximum number of updates performed.- Returns:
- the labels.
-
computePermutation
Computes the final permutation of the graph using the default maximum number of updates and the default gammas.- Parameters:
cluster
- if notnull
, clusters will be saved to a file with this name.- Returns:
- the final permutation of the graph.
- Throws:
IOException
-
computePermutation
Computes the final permutation of the graph using the default maximum number of updates.- Parameters:
gammas
- a set of parameters that will be used to generate labellings.cluster
- if notnull
, clusters will be saved to a file with this name.- Returns:
- the final permutation of the graph.
- Throws:
IOException
-
computePermutation
public int[] computePermutation(double[] gammas, String cluster, int maxUpdates) throws IOExceptionComputes the final permutation of the graph.- Parameters:
gammas
- a set of parameters that will be used to generate labellings.cluster
- if notnull
, clusters will be saved to a file with this name.maxUpdates
- the maximum number of updates performed.- Returns:
- the final permutation of the graph.
- Throws:
IOException
-
main
- Throws:
IOException
JSAPException
-