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 EliasFanoCumulativeOutdegreeListcumulativeOutdegreesThe outdegrees cumulative function.static double[]DEFAULT_GAMMASThe list of default γ values.static intMAX_UPDATESThe default maximum number of updates.protected longnextArcsThe number of arcs beforenextNode.protected intnextNodeThe 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 AtomicIntegerArraycomputeLabels(double gamma)Computes the labels of a graph for a given value of γ using the default maximum number of updates.AtomicIntegerArraycomputeLabels(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.voidlabelBasename(String labelBasename)Sets the basename for label files.static voidmain(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, ornullfor 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
exactis true, the final permutation is exactly the same as if you first permute the graph withstartPermand then apply LLP with annullstarting permutation.- Parameters:
symGraph- a symmetric, loopless graph.startPerm- an initial permutation of the graph, ornullfor 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
exactis true, the final permutation is exactly the same as if you first permute the graph withstartPermand then apply LLP with annullstarting permutation.- Parameters:
symGraph- a symmetric, loopless graph.startPerm- an initial permutation of the graph, ornullfor 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:
IOExceptionJSAPException
-