@graphty/algorithms 1.1.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +820 -235
- package/dist/algorithms.d.ts +42 -2
- package/dist/algorithms.js +11099 -2
- package/dist/algorithms.js.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.d.ts +4 -0
- package/dist/src/algorithms/centrality/betweenness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/betweenness.js +124 -170
- package/dist/src/algorithms/centrality/betweenness.js.map +1 -1
- package/dist/src/algorithms/centrality/closeness.d.ts +26 -1
- package/dist/src/algorithms/centrality/closeness.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/closeness.js +56 -149
- package/dist/src/algorithms/centrality/closeness.js.map +1 -1
- package/dist/src/algorithms/centrality/degree.js +3 -3
- package/dist/src/algorithms/centrality/degree.js.map +1 -1
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts +39 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js +286 -0
- package/dist/src/algorithms/centrality/delta-pagerank-simple.js.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts +80 -0
- package/dist/src/algorithms/centrality/delta-pagerank.d.ts.map +1 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js +294 -0
- package/dist/src/algorithms/centrality/delta-pagerank.js.map +1 -0
- package/dist/src/algorithms/centrality/index.d.ts +2 -0
- package/dist/src/algorithms/centrality/index.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/index.js +1 -0
- package/dist/src/algorithms/centrality/index.js.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.d.ts +17 -0
- package/dist/src/algorithms/centrality/pagerank.d.ts.map +1 -1
- package/dist/src/algorithms/centrality/pagerank.js +45 -0
- package/dist/src/algorithms/centrality/pagerank.js.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.d.ts.map +1 -1
- package/dist/src/algorithms/community/girvan-newman.js +47 -54
- package/dist/src/algorithms/community/girvan-newman.js.map +1 -1
- package/dist/src/algorithms/community/index.d.ts +2 -0
- package/dist/src/algorithms/community/index.d.ts.map +1 -1
- package/dist/src/algorithms/community/index.js.map +1 -1
- package/dist/src/algorithms/community/label-propagation.d.ts +13 -3
- package/dist/src/algorithms/community/label-propagation.d.ts.map +1 -1
- package/dist/src/algorithms/community/label-propagation.js +50 -35
- package/dist/src/algorithms/community/label-propagation.js.map +1 -1
- package/dist/src/algorithms/community/leiden.d.ts +3 -2
- package/dist/src/algorithms/community/leiden.d.ts.map +1 -1
- package/dist/src/algorithms/community/leiden.js +34 -39
- package/dist/src/algorithms/community/leiden.js.map +1 -1
- package/dist/src/algorithms/community/louvain-optimized.d.ts +112 -0
- package/dist/src/algorithms/community/louvain-optimized.d.ts.map +1 -0
- package/dist/src/algorithms/community/louvain-optimized.js +303 -0
- package/dist/src/algorithms/community/louvain-optimized.js.map +1 -0
- package/dist/src/algorithms/community/louvain.d.ts.map +1 -1
- package/dist/src/algorithms/community/louvain.js +17 -76
- package/dist/src/algorithms/community/louvain.js.map +1 -1
- package/dist/src/algorithms/community/modularity-utils.d.ts +59 -0
- package/dist/src/algorithms/community/modularity-utils.d.ts.map +1 -0
- package/dist/src/algorithms/community/modularity-utils.js +112 -0
- package/dist/src/algorithms/community/modularity-utils.js.map +1 -0
- package/dist/src/algorithms/matching/bipartite.d.ts.map +1 -1
- package/dist/src/algorithms/matching/bipartite.js +8 -40
- package/dist/src/algorithms/matching/bipartite.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/bellman-ford.js +1 -12
- package/dist/src/algorithms/shortest-path/bellman-ford.js.map +1 -1
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts +37 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.d.ts.map +1 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js +193 -0
- package/dist/src/algorithms/shortest-path/bidirectional-dijkstra.js.map +1 -0
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts +5 -2
- package/dist/src/algorithms/shortest-path/dijkstra.d.ts.map +1 -1
- package/dist/src/algorithms/shortest-path/dijkstra.js +15 -14
- package/dist/src/algorithms/shortest-path/dijkstra.js.map +1 -1
- package/dist/src/algorithms/traversal/bfs-unified.d.ts +29 -0
- package/dist/src/algorithms/traversal/bfs-unified.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-unified.js +333 -0
- package/dist/src/algorithms/traversal/bfs-unified.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts +54 -0
- package/dist/src/algorithms/traversal/bfs-variants.d.ts.map +1 -0
- package/dist/src/algorithms/traversal/bfs-variants.js +368 -0
- package/dist/src/algorithms/traversal/bfs-variants.js.map +1 -0
- package/dist/src/algorithms/traversal/bfs.d.ts +4 -18
- package/dist/src/algorithms/traversal/bfs.d.ts.map +1 -1
- package/dist/src/algorithms/traversal/bfs.js +5 -182
- package/dist/src/algorithms/traversal/bfs.js.map +1 -1
- package/dist/src/benchmark-all-algorithms.d.ts +23 -0
- package/dist/src/benchmark-all-algorithms.d.ts.map +1 -0
- package/dist/src/benchmark-all-algorithms.js +462 -0
- package/dist/src/benchmark-all-algorithms.js.map +1 -0
- package/dist/src/clustering/hierarchical.d.ts +16 -15
- package/dist/src/clustering/hierarchical.d.ts.map +1 -1
- package/dist/src/clustering/hierarchical.js +209 -223
- package/dist/src/clustering/hierarchical.js.map +1 -1
- package/dist/src/clustering/index.d.ts +4 -2
- package/dist/src/clustering/index.d.ts.map +1 -1
- package/dist/src/clustering/index.js +2 -2
- package/dist/src/clustering/index.js.map +1 -1
- package/dist/src/clustering/k-core.d.ts +16 -15
- package/dist/src/clustering/k-core.d.ts.map +1 -1
- package/dist/src/clustering/k-core.js +57 -21
- package/dist/src/clustering/k-core.js.map +1 -1
- package/dist/src/clustering/spectral.d.ts +8 -0
- package/dist/src/clustering/spectral.d.ts.map +1 -1
- package/dist/src/clustering/spectral.js +158 -35
- package/dist/src/clustering/spectral.js.map +1 -1
- package/dist/src/core/graph.js +4 -4
- package/dist/src/core/graph.js.map +1 -1
- package/dist/src/flow/ford-fulkerson.d.ts +17 -11
- package/dist/src/flow/ford-fulkerson.d.ts.map +1 -1
- package/dist/src/flow/ford-fulkerson.js +141 -217
- package/dist/src/flow/ford-fulkerson.js.map +1 -1
- package/dist/src/flow/min-cut.d.ts +6 -5
- package/dist/src/flow/min-cut.d.ts.map +1 -1
- package/dist/src/flow/min-cut.js +17 -8
- package/dist/src/flow/min-cut.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/link-prediction/adamic-adar.d.ts.map +1 -1
- package/dist/src/link-prediction/adamic-adar.js +17 -26
- package/dist/src/link-prediction/adamic-adar.js.map +1 -1
- package/dist/src/link-prediction/common-neighbors.d.ts.map +1 -1
- package/dist/src/link-prediction/common-neighbors.js +7 -11
- package/dist/src/link-prediction/common-neighbors.js.map +1 -1
- package/dist/src/optimized/bit-packed.d.ts +143 -0
- package/dist/src/optimized/bit-packed.d.ts.map +1 -0
- package/dist/src/optimized/bit-packed.js +292 -0
- package/dist/src/optimized/bit-packed.js.map +1 -0
- package/dist/src/optimized/csr-graph.d.ts +86 -0
- package/dist/src/optimized/csr-graph.d.ts.map +1 -0
- package/dist/src/optimized/csr-graph.js +341 -0
- package/dist/src/optimized/csr-graph.js.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts +74 -0
- package/dist/src/optimized/direction-optimized-bfs.d.ts.map +1 -0
- package/dist/src/optimized/direction-optimized-bfs.js +223 -0
- package/dist/src/optimized/direction-optimized-bfs.js.map +1 -0
- package/dist/src/optimized/graph-adapter.d.ts +62 -0
- package/dist/src/optimized/graph-adapter.d.ts.map +1 -0
- package/dist/src/optimized/graph-adapter.js +146 -0
- package/dist/src/optimized/graph-adapter.js.map +1 -0
- package/dist/src/optimized/index.d.ts +14 -0
- package/dist/src/optimized/index.d.ts.map +1 -0
- package/dist/src/optimized/index.js +28 -0
- package/dist/src/optimized/index.js.map +1 -0
- package/dist/src/research/grsbm.d.ts +83 -0
- package/dist/src/research/grsbm.d.ts.map +1 -0
- package/dist/src/research/grsbm.js +403 -0
- package/dist/src/research/grsbm.js.map +1 -0
- package/dist/src/research/index.d.ts +12 -0
- package/dist/src/research/index.d.ts.map +1 -0
- package/dist/src/research/index.js +14 -0
- package/dist/src/research/index.js.map +1 -0
- package/dist/src/research/sync.d.ts +49 -0
- package/dist/src/research/sync.d.ts.map +1 -0
- package/dist/src/research/sync.js +316 -0
- package/dist/src/research/sync.js.map +1 -0
- package/dist/src/research/terahac.d.ts +65 -0
- package/dist/src/research/terahac.d.ts.map +1 -0
- package/dist/src/research/terahac.js +379 -0
- package/dist/src/research/terahac.js.map +1 -0
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/algorithm-utilities.d.ts +2 -0
- package/dist/src/utils/algorithm-utilities.d.ts.map +1 -0
- package/dist/src/utils/algorithm-utilities.js +2 -0
- package/dist/src/utils/algorithm-utilities.js.map +1 -0
- package/dist/src/utils/graph-converters.d.ts +79 -0
- package/dist/src/utils/graph-converters.d.ts.map +1 -0
- package/dist/src/utils/graph-converters.js +196 -0
- package/dist/src/utils/graph-converters.js.map +1 -0
- package/dist/src/utils/graph-utilities.d.ts +62 -0
- package/dist/src/utils/graph-utilities.d.ts.map +1 -0
- package/dist/src/utils/graph-utilities.js +148 -0
- package/dist/src/utils/graph-utilities.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +5 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/math-utilities.d.ts +52 -0
- package/dist/src/utils/math-utilities.d.ts.map +1 -0
- package/dist/src/utils/math-utilities.js +123 -0
- package/dist/src/utils/math-utilities.js.map +1 -0
- package/dist/src/utils/matrix-utilities.d.ts +2 -0
- package/dist/src/utils/matrix-utilities.d.ts.map +1 -0
- package/dist/src/utils/matrix-utilities.js +2 -0
- package/dist/src/utils/matrix-utilities.js.map +1 -0
- package/dist/src/utils/optimization-helpers.d.ts +33 -0
- package/dist/src/utils/optimization-helpers.d.ts.map +1 -0
- package/dist/src/utils/optimization-helpers.js +47 -0
- package/dist/src/utils/optimization-helpers.js.map +1 -0
- package/package.json +28 -4
- package/src/algorithms/centrality/betweenness.ts +167 -199
- package/src/algorithms/centrality/closeness.ts +73 -191
- package/src/algorithms/centrality/degree.ts +3 -3
- package/src/algorithms/centrality/delta-pagerank-simple.ts +366 -0
- package/src/algorithms/centrality/delta-pagerank.ts +435 -0
- package/src/algorithms/centrality/index.ts +2 -0
- package/src/algorithms/centrality/pagerank.ts +66 -0
- package/src/algorithms/community/girvan-newman.ts +52 -59
- package/src/algorithms/community/index.ts +2 -0
- package/src/algorithms/community/label-propagation.ts +64 -35
- package/src/algorithms/community/leiden.ts +40 -41
- package/src/algorithms/community/louvain-optimized.ts +445 -0
- package/src/algorithms/community/louvain.ts +24 -104
- package/src/algorithms/community/modularity-utils.ts +146 -0
- package/src/algorithms/matching/bipartite.ts +8 -44
- package/src/algorithms/shortest-path/bellman-ford.ts +1 -14
- package/src/algorithms/shortest-path/bidirectional-dijkstra.ts +248 -0
- package/src/algorithms/shortest-path/dijkstra.ts +17 -15
- package/src/algorithms/traversal/bfs-unified.ts +433 -0
- package/src/algorithms/traversal/bfs-variants.ts +496 -0
- package/src/algorithms/traversal/bfs.ts +10 -228
- package/src/benchmark-all-algorithms.ts +548 -0
- package/src/clustering/hierarchical.ts +241 -251
- package/src/clustering/index.ts +4 -2
- package/src/clustering/k-core.ts +87 -39
- package/src/clustering/spectral.ts +185 -34
- package/src/core/graph.ts +4 -4
- package/src/flow/ford-fulkerson.ts +186 -254
- package/src/flow/min-cut.ts +21 -11
- package/src/index.ts +9 -0
- package/src/link-prediction/adamic-adar.ts +17 -30
- package/src/link-prediction/common-neighbors.ts +7 -16
- package/src/optimized/bit-packed.ts +340 -0
- package/src/optimized/csr-graph.ts +455 -0
- package/src/optimized/direction-optimized-bfs.ts +291 -0
- package/src/optimized/graph-adapter.ts +200 -0
- package/src/optimized/index.ts +36 -0
- package/src/research/grsbm.ts +580 -0
- package/src/research/index.ts +17 -0
- package/src/research/sync.ts +440 -0
- package/src/research/terahac.ts +514 -0
- package/src/types/index.ts +8 -0
- package/src/utils/algorithm-utilities.ts +2 -0
- package/src/utils/graph-converters.ts +241 -0
- package/src/utils/graph-utilities.ts +199 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/math-utilities.ts +140 -0
- package/src/utils/matrix-utilities.ts +2 -0
- package/src/utils/optimization-helpers.ts +81 -0
|
@@ -7,37 +7,30 @@
|
|
|
7
7
|
* Reference: Traag, V.A., Waltman, L. & van Eck, N.J. (2019)
|
|
8
8
|
* "From Louvain to Leiden: guaranteeing well-connected communities"
|
|
9
9
|
*/
|
|
10
|
+
import { graphToMap } from "../../utils/graph-converters.js";
|
|
11
|
+
import { SeededRandom, shuffle } from "../../utils/math-utilities.js";
|
|
10
12
|
/**
|
|
11
|
-
* Leiden algorithm for community detection
|
|
13
|
+
* Internal implementation of Leiden algorithm for community detection
|
|
12
14
|
* Improves upon Louvain by ensuring well-connected communities
|
|
13
|
-
*
|
|
14
|
-
* @param graph - Undirected weighted graph
|
|
15
|
-
* @param options - Algorithm options
|
|
16
|
-
* @returns Community assignments and modularity
|
|
17
|
-
*
|
|
18
|
-
* Time Complexity: O(m) per iteration, typically O(m log m) total
|
|
19
|
-
* Space Complexity: O(n + m)
|
|
20
15
|
*/
|
|
21
|
-
|
|
16
|
+
function leidenImpl(inputGraph, options = {}) {
|
|
22
17
|
const { resolution = 1.0, randomSeed = 42, maxIterations = 100, threshold = 1e-7, } = options;
|
|
23
18
|
// Handle empty graph
|
|
24
|
-
if (
|
|
19
|
+
if (inputGraph.size === 0) {
|
|
25
20
|
return {
|
|
26
21
|
communities: new Map(),
|
|
27
22
|
modularity: 0,
|
|
28
23
|
iterations: 0,
|
|
29
24
|
};
|
|
30
25
|
}
|
|
26
|
+
// Use a mutable variable for the current graph state
|
|
27
|
+
let currentGraph = inputGraph;
|
|
31
28
|
// Initialize random number generator
|
|
32
|
-
|
|
33
|
-
const random = () => {
|
|
34
|
-
seed = ((seed * 1664525) + 1013904223) % 2147483647;
|
|
35
|
-
return seed / 2147483647;
|
|
36
|
-
};
|
|
29
|
+
const random = SeededRandom.createGenerator(randomSeed);
|
|
37
30
|
// Calculate total weight
|
|
38
31
|
let totalWeight = 0;
|
|
39
32
|
const degrees = new Map();
|
|
40
|
-
for (const [node, neighbors] of
|
|
33
|
+
for (const [node, neighbors] of currentGraph) {
|
|
41
34
|
let degree = 0;
|
|
42
35
|
for (const weight of neighbors.values()) {
|
|
43
36
|
degree += weight;
|
|
@@ -48,9 +41,9 @@ export function leiden(graph, options = {}) {
|
|
|
48
41
|
totalWeight /= 2; // Each edge counted twice
|
|
49
42
|
// Initialize communities - each node in its own community
|
|
50
43
|
const communities = new Map();
|
|
51
|
-
const nodes = Array.from(
|
|
44
|
+
const nodes = Array.from(currentGraph.keys());
|
|
52
45
|
nodes.forEach((node, i) => communities.set(node, i));
|
|
53
|
-
let modularity = calculateModularity(
|
|
46
|
+
let modularity = calculateModularity(currentGraph, communities, degrees, totalWeight, resolution);
|
|
54
47
|
let bestModularity = modularity;
|
|
55
48
|
let bestCommunities = new Map(communities);
|
|
56
49
|
let iterations = 0;
|
|
@@ -66,7 +59,7 @@ export function leiden(graph, options = {}) {
|
|
|
66
59
|
if (currentCommunity === undefined) {
|
|
67
60
|
continue;
|
|
68
61
|
}
|
|
69
|
-
const neighborCommunities = getNeighborCommunities(node,
|
|
62
|
+
const neighborCommunities = getNeighborCommunities(node, currentGraph, communities);
|
|
70
63
|
let bestCommunity = currentCommunity;
|
|
71
64
|
let bestGain = 0;
|
|
72
65
|
// Try moving to each neighbor community
|
|
@@ -74,7 +67,7 @@ export function leiden(graph, options = {}) {
|
|
|
74
67
|
if (community === currentCommunity) {
|
|
75
68
|
continue;
|
|
76
69
|
}
|
|
77
|
-
const gain = calculateModularityGain(node, community,
|
|
70
|
+
const gain = calculateModularityGain(node, community, currentGraph, communities, degrees, totalWeight, resolution);
|
|
78
71
|
if (gain > bestGain) {
|
|
79
72
|
bestGain = gain;
|
|
80
73
|
bestCommunity = community;
|
|
@@ -89,15 +82,15 @@ export function leiden(graph, options = {}) {
|
|
|
89
82
|
}
|
|
90
83
|
// Phase 2: Refinement (Leiden improvement over Louvain)
|
|
91
84
|
// Create aggregate network based on current partition
|
|
92
|
-
createAggregateNetwork(
|
|
85
|
+
createAggregateNetwork(currentGraph, communities);
|
|
93
86
|
// Refine partition using aggregate network
|
|
94
|
-
const subsetPartition = refinePartition(
|
|
87
|
+
const subsetPartition = refinePartition(currentGraph, communities);
|
|
95
88
|
// Apply refined partition
|
|
96
89
|
for (const [node, newCommunity] of subsetPartition) {
|
|
97
90
|
communities.set(node, newCommunity);
|
|
98
91
|
}
|
|
99
92
|
// Recalculate modularity
|
|
100
|
-
modularity = calculateModularity(
|
|
93
|
+
modularity = calculateModularity(currentGraph, communities, degrees, totalWeight, resolution);
|
|
101
94
|
// Check if we've improved
|
|
102
95
|
if (modularity > bestModularity + threshold) {
|
|
103
96
|
bestModularity = modularity;
|
|
@@ -108,16 +101,16 @@ export function leiden(graph, options = {}) {
|
|
|
108
101
|
break;
|
|
109
102
|
}
|
|
110
103
|
// Phase 3: Aggregate network (create super-nodes)
|
|
111
|
-
const aggregated = aggregateCommunities(
|
|
112
|
-
if (aggregated.graph.size ===
|
|
104
|
+
const aggregated = aggregateCommunities(currentGraph, communities);
|
|
105
|
+
if (aggregated.graph.size === currentGraph.size) {
|
|
113
106
|
break;
|
|
114
107
|
} // No aggregation possible
|
|
115
108
|
// Continue with aggregated network
|
|
116
|
-
const { graph:
|
|
117
|
-
|
|
109
|
+
const { graph: aggregatedGraph } = aggregated;
|
|
110
|
+
currentGraph = aggregatedGraph;
|
|
118
111
|
communities.clear();
|
|
119
112
|
let communityId = 0;
|
|
120
|
-
for (const node of
|
|
113
|
+
for (const node of currentGraph.keys()) {
|
|
121
114
|
communities.set(node, communityId++);
|
|
122
115
|
}
|
|
123
116
|
}
|
|
@@ -418,17 +411,19 @@ function aggregateCommunities(graph, communities) {
|
|
|
418
411
|
return { graph: aggregated, mapping };
|
|
419
412
|
}
|
|
420
413
|
/**
|
|
421
|
-
*
|
|
414
|
+
* Leiden algorithm for community detection
|
|
415
|
+
* Improves upon Louvain by ensuring well-connected communities
|
|
416
|
+
*
|
|
417
|
+
* @param graph - Undirected weighted graph - accepts Graph class or Map representation
|
|
418
|
+
* @param options - Algorithm options
|
|
419
|
+
* @returns Community assignments and modularity
|
|
420
|
+
*
|
|
421
|
+
* Time Complexity: O(m) per iteration, typically O(m log m) total
|
|
422
|
+
* Space Complexity: O(n + m)
|
|
422
423
|
*/
|
|
423
|
-
function
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
const swapItem = array[j];
|
|
428
|
-
if (temp !== undefined && swapItem !== undefined) {
|
|
429
|
-
array[i] = swapItem;
|
|
430
|
-
array[j] = temp;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
424
|
+
export function leiden(graph, options = {}) {
|
|
425
|
+
// Convert Graph to Map representation
|
|
426
|
+
const graphMap = graphToMap(graph);
|
|
427
|
+
return leidenImpl(graphMap, options);
|
|
433
428
|
}
|
|
434
429
|
//# sourceMappingURL=leiden.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leiden.js","sourceRoot":"","sources":["../../../../src/algorithms/community/leiden.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"leiden.js","sourceRoot":"","sources":["../../../../src/algorithms/community/leiden.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { Graph } from "../../core/graph.js";
|
|
2
|
+
import type { CommunityResult } from "../../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Optimized Louvain community detection algorithm with early pruning and threshold cycling
|
|
5
|
+
*
|
|
6
|
+
* Key optimizations:
|
|
7
|
+
* - Leaf node pruning: Skip nodes with degree 1
|
|
8
|
+
* - Importance ordering: Process high-impact nodes first
|
|
9
|
+
* - Threshold cycling: Adaptive convergence thresholds
|
|
10
|
+
* - Early termination: Stop when changes become insignificant
|
|
11
|
+
*
|
|
12
|
+
* Expected speedup: 2-5x on large graphs with many leaf nodes
|
|
13
|
+
*/
|
|
14
|
+
export interface OptimizedLouvainOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Resolution parameter (default: 1.0)
|
|
17
|
+
*/
|
|
18
|
+
resolution?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Maximum iterations per level (default: 100)
|
|
21
|
+
*/
|
|
22
|
+
maxIterations?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Convergence tolerance (default: 1e-6)
|
|
25
|
+
*/
|
|
26
|
+
tolerance?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Enable leaf node pruning (default: true)
|
|
29
|
+
*/
|
|
30
|
+
pruneLeaves?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Enable importance-based node ordering (default: true)
|
|
33
|
+
*/
|
|
34
|
+
importanceOrdering?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Base pruning threshold (default: 0.01)
|
|
37
|
+
*/
|
|
38
|
+
pruningThreshold?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Enable adaptive threshold cycling (default: true)
|
|
41
|
+
*/
|
|
42
|
+
thresholdCycling?: boolean;
|
|
43
|
+
}
|
|
44
|
+
interface PruningStats {
|
|
45
|
+
leafNodesPruned: number;
|
|
46
|
+
lowDegreeNodesPruned: number;
|
|
47
|
+
stableNodesPruned: number;
|
|
48
|
+
}
|
|
49
|
+
export declare class OptimizedLouvain {
|
|
50
|
+
private graph;
|
|
51
|
+
private communities;
|
|
52
|
+
private communityWeights;
|
|
53
|
+
private nodeWeights;
|
|
54
|
+
private nodeDegrees;
|
|
55
|
+
private totalWeight;
|
|
56
|
+
private pruningStats;
|
|
57
|
+
constructor(graph: Graph);
|
|
58
|
+
/**
|
|
59
|
+
* Run optimized Louvain algorithm
|
|
60
|
+
*/
|
|
61
|
+
detectCommunities(options?: OptimizedLouvainOptions): CommunityResult;
|
|
62
|
+
/**
|
|
63
|
+
* Initialize data structures
|
|
64
|
+
*/
|
|
65
|
+
private initialize;
|
|
66
|
+
/**
|
|
67
|
+
* Get nodes ordered by importance (degree * log(weight))
|
|
68
|
+
*/
|
|
69
|
+
private getNodesInImportanceOrder;
|
|
70
|
+
/**
|
|
71
|
+
* Perform local moving phase with optimizations
|
|
72
|
+
*/
|
|
73
|
+
private performLocalMoving;
|
|
74
|
+
/**
|
|
75
|
+
* Check if node is a leaf (degree 1)
|
|
76
|
+
*/
|
|
77
|
+
private isLeafNode;
|
|
78
|
+
/**
|
|
79
|
+
* Get adaptive threshold that decreases with iterations
|
|
80
|
+
*/
|
|
81
|
+
private getAdaptiveThreshold;
|
|
82
|
+
/**
|
|
83
|
+
* Calculate modularity gain from moving a node to a community
|
|
84
|
+
*/
|
|
85
|
+
private calculateModularityGain;
|
|
86
|
+
/**
|
|
87
|
+
* Remove node from community (for gain calculation)
|
|
88
|
+
*/
|
|
89
|
+
private removeNodeFromCommunity;
|
|
90
|
+
/**
|
|
91
|
+
* Add node to community
|
|
92
|
+
*/
|
|
93
|
+
private addNodeToCommunity;
|
|
94
|
+
/**
|
|
95
|
+
* Get neighboring communities of a node
|
|
96
|
+
*/
|
|
97
|
+
private getNeighborCommunities;
|
|
98
|
+
/**
|
|
99
|
+
* Calculate total modularity
|
|
100
|
+
*/
|
|
101
|
+
private calculateModularity;
|
|
102
|
+
/**
|
|
103
|
+
* Get pruning statistics
|
|
104
|
+
*/
|
|
105
|
+
getPruningStats(): PruningStats;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Optimized Louvain algorithm with automatic optimization selection
|
|
109
|
+
*/
|
|
110
|
+
export declare function louvainOptimized(graph: Graph, options?: OptimizedLouvainOptions): CommunityResult;
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=louvain-optimized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"louvain-optimized.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain-optimized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAC,eAAe,EAAS,MAAM,sBAAsB,CAAC;AAElE;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAe;gBAEvB,KAAK,EAAE,KAAK;IAcxB;;OAEG;IACI,iBAAiB,CAAC,OAAO,GAAE,uBAA4B,GAAG,eAAe;IAqEhF;;OAEG;IACH,OAAO,CAAC,UAAU;IA2ClB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;OAEG;IACI,eAAe,IAAI,YAAY;CAGzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,uBAA4B,GACtC,eAAe,CAGjB"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
export class OptimizedLouvain {
|
|
2
|
+
constructor(graph) {
|
|
3
|
+
this.graph = graph;
|
|
4
|
+
this.communities = new Map();
|
|
5
|
+
this.communityWeights = new Map();
|
|
6
|
+
this.nodeWeights = new Map();
|
|
7
|
+
this.nodeDegrees = new Map();
|
|
8
|
+
this.totalWeight = 0;
|
|
9
|
+
this.pruningStats = {
|
|
10
|
+
leafNodesPruned: 0,
|
|
11
|
+
lowDegreeNodesPruned: 0,
|
|
12
|
+
stableNodesPruned: 0,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Run optimized Louvain algorithm
|
|
17
|
+
*/
|
|
18
|
+
detectCommunities(options = {}) {
|
|
19
|
+
const { resolution = 1.0, maxIterations = 100, tolerance = 1e-6, pruneLeaves = true, importanceOrdering = true, pruningThreshold = 0.01, thresholdCycling = true, } = options;
|
|
20
|
+
// Initialize
|
|
21
|
+
this.initialize();
|
|
22
|
+
let modularity = this.calculateModularity(resolution);
|
|
23
|
+
let iteration = 0;
|
|
24
|
+
let improved = true;
|
|
25
|
+
while (iteration < maxIterations && improved) {
|
|
26
|
+
// Get nodes in optimal processing order
|
|
27
|
+
const orderedNodes = importanceOrdering ?
|
|
28
|
+
this.getNodesInImportanceOrder() :
|
|
29
|
+
Array.from(this.graph.nodes()).map((n) => n.id);
|
|
30
|
+
// Apply adaptive threshold
|
|
31
|
+
const threshold = thresholdCycling ?
|
|
32
|
+
this.getAdaptiveThreshold(iteration, pruningThreshold) :
|
|
33
|
+
0;
|
|
34
|
+
// Perform local optimization
|
|
35
|
+
improved = this.performLocalMoving(orderedNodes, {
|
|
36
|
+
pruneLeaves,
|
|
37
|
+
threshold,
|
|
38
|
+
resolution,
|
|
39
|
+
});
|
|
40
|
+
if (improved) {
|
|
41
|
+
const newModularity = this.calculateModularity(resolution);
|
|
42
|
+
// Check convergence
|
|
43
|
+
if (Math.abs(newModularity - modularity) < tolerance) {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
modularity = newModularity;
|
|
47
|
+
iteration++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Convert community assignments to result format
|
|
51
|
+
const communityGroups = new Map();
|
|
52
|
+
for (const [nodeId, community] of this.communities) {
|
|
53
|
+
if (!communityGroups.has(community)) {
|
|
54
|
+
communityGroups.set(community, []);
|
|
55
|
+
}
|
|
56
|
+
const group = communityGroups.get(community);
|
|
57
|
+
if (group) {
|
|
58
|
+
group.push(nodeId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
communities: Array.from(communityGroups.values()),
|
|
63
|
+
modularity,
|
|
64
|
+
iterations: iteration,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize data structures
|
|
69
|
+
*/
|
|
70
|
+
initialize() {
|
|
71
|
+
let communityId = 0;
|
|
72
|
+
// Initialize each node in its own community
|
|
73
|
+
for (const node of this.graph.nodes()) {
|
|
74
|
+
this.communities.set(node.id, communityId);
|
|
75
|
+
// Calculate node weight and degree
|
|
76
|
+
let nodeWeight = 0;
|
|
77
|
+
let degree = 0;
|
|
78
|
+
for (const neighbor of Array.from(this.graph.neighbors(node.id))) {
|
|
79
|
+
const edge = this.graph.getEdge(node.id, neighbor);
|
|
80
|
+
const weight = edge?.weight ?? 1;
|
|
81
|
+
nodeWeight += weight;
|
|
82
|
+
degree++;
|
|
83
|
+
}
|
|
84
|
+
// For undirected graphs, also check incoming edges
|
|
85
|
+
if (!this.graph.isDirected) {
|
|
86
|
+
for (const neighbor of Array.from(this.graph.inNeighbors(node.id))) {
|
|
87
|
+
if (!this.graph.hasEdge(node.id, neighbor)) {
|
|
88
|
+
const edge = this.graph.getEdge(neighbor, node.id);
|
|
89
|
+
const weight = edge?.weight ?? 1;
|
|
90
|
+
nodeWeight += weight;
|
|
91
|
+
degree++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.nodeWeights.set(node.id, nodeWeight);
|
|
96
|
+
this.nodeDegrees.set(node.id, degree);
|
|
97
|
+
this.communityWeights.set(communityId, nodeWeight);
|
|
98
|
+
this.totalWeight += nodeWeight;
|
|
99
|
+
communityId++;
|
|
100
|
+
}
|
|
101
|
+
// Total weight is sum of all edge weights
|
|
102
|
+
// For undirected graphs, each edge is counted twice from both endpoints
|
|
103
|
+
this.totalWeight = this.totalWeight / 2;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get nodes ordered by importance (degree * log(weight))
|
|
107
|
+
*/
|
|
108
|
+
getNodesInImportanceOrder() {
|
|
109
|
+
const nodeImportance = new Map();
|
|
110
|
+
for (const [nodeId, degree] of this.nodeDegrees) {
|
|
111
|
+
const weight = this.nodeWeights.get(nodeId) ?? 0;
|
|
112
|
+
// Importance score: combination of degree and weight
|
|
113
|
+
// High-degree nodes and nodes with heavy edges are processed first
|
|
114
|
+
const importance = degree * Math.log(1 + weight);
|
|
115
|
+
nodeImportance.set(nodeId, importance);
|
|
116
|
+
}
|
|
117
|
+
// Sort by importance (descending)
|
|
118
|
+
return Array.from(nodeImportance.entries())
|
|
119
|
+
.sort((a, b) => b[1] - a[1])
|
|
120
|
+
.map(([nodeId]) => nodeId);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Perform local moving phase with optimizations
|
|
124
|
+
*/
|
|
125
|
+
performLocalMoving(nodes, options) {
|
|
126
|
+
const { pruneLeaves, threshold, resolution } = options;
|
|
127
|
+
let improvement = false;
|
|
128
|
+
let hasChanged = true;
|
|
129
|
+
while (hasChanged) {
|
|
130
|
+
hasChanged = false;
|
|
131
|
+
for (const nodeId of nodes) {
|
|
132
|
+
// Early pruning: skip leaf nodes
|
|
133
|
+
if (pruneLeaves && this.isLeafNode(nodeId)) {
|
|
134
|
+
this.pruningStats.leafNodesPruned++;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const currentCommunity = this.communities.get(nodeId) ?? 0;
|
|
138
|
+
const neighborCommunities = this.getNeighborCommunities(nodeId);
|
|
139
|
+
// Skip isolated nodes
|
|
140
|
+
if (neighborCommunities.size === 0) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// Find best community to move to
|
|
144
|
+
let bestCommunity = currentCommunity;
|
|
145
|
+
let bestGain = 0;
|
|
146
|
+
// Remove node from its current community to calculate gains
|
|
147
|
+
this.removeNodeFromCommunity(nodeId, currentCommunity);
|
|
148
|
+
for (const community of neighborCommunities) {
|
|
149
|
+
const gain = this.calculateModularityGain(nodeId, community, resolution);
|
|
150
|
+
// Apply threshold - only move if gain exceeds threshold
|
|
151
|
+
if (gain > bestGain + threshold) {
|
|
152
|
+
bestGain = gain;
|
|
153
|
+
bestCommunity = community;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Try staying in current community
|
|
157
|
+
const currentGain = this.calculateModularityGain(nodeId, currentCommunity, resolution);
|
|
158
|
+
if (currentGain > bestGain + threshold) {
|
|
159
|
+
bestGain = currentGain;
|
|
160
|
+
bestCommunity = currentCommunity;
|
|
161
|
+
}
|
|
162
|
+
// Add node to best community
|
|
163
|
+
this.addNodeToCommunity(nodeId, bestCommunity);
|
|
164
|
+
// Track if node moved
|
|
165
|
+
if (bestCommunity !== currentCommunity) {
|
|
166
|
+
hasChanged = true;
|
|
167
|
+
improvement = true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return improvement;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Check if node is a leaf (degree 1)
|
|
175
|
+
*/
|
|
176
|
+
isLeafNode(nodeId) {
|
|
177
|
+
const degree = this.nodeDegrees.get(nodeId) ?? 0;
|
|
178
|
+
return degree === 1;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get adaptive threshold that decreases with iterations
|
|
182
|
+
*/
|
|
183
|
+
getAdaptiveThreshold(iteration, baseThreshold) {
|
|
184
|
+
// Exponentially decay threshold with iterations
|
|
185
|
+
// This allows coarse movements early and fine-tuning later
|
|
186
|
+
return baseThreshold * Math.pow(0.5, iteration / 10);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Calculate modularity gain from moving a node to a community
|
|
190
|
+
*/
|
|
191
|
+
calculateModularityGain(nodeId, targetCommunity, resolution) {
|
|
192
|
+
const nodeWeight = this.nodeWeights.get(nodeId) ?? 0;
|
|
193
|
+
// Sum of weights from node to target community
|
|
194
|
+
let weightToTarget = 0;
|
|
195
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
196
|
+
if (this.communities.get(neighbor) === targetCommunity) {
|
|
197
|
+
const edge = this.graph.getEdge(nodeId, neighbor);
|
|
198
|
+
weightToTarget += edge?.weight ?? 1;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// For undirected graphs, also check incoming edges
|
|
202
|
+
if (!this.graph.isDirected) {
|
|
203
|
+
for (const neighbor of Array.from(this.graph.inNeighbors(nodeId))) {
|
|
204
|
+
if (this.communities.get(neighbor) === targetCommunity && !this.graph.hasEdge(nodeId, neighbor)) {
|
|
205
|
+
const edge = this.graph.getEdge(neighbor, nodeId);
|
|
206
|
+
weightToTarget += edge?.weight ?? 1;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Weight of target community
|
|
211
|
+
const targetWeight = this.communityWeights.get(targetCommunity) ?? 0;
|
|
212
|
+
// Modularity gain formula
|
|
213
|
+
const gain = (weightToTarget - ((resolution * nodeWeight * targetWeight) / (2 * this.totalWeight))) / this.totalWeight;
|
|
214
|
+
return gain;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Remove node from community (for gain calculation)
|
|
218
|
+
*/
|
|
219
|
+
removeNodeFromCommunity(nodeId, community) {
|
|
220
|
+
const nodeWeight = this.nodeWeights.get(nodeId) ?? 0;
|
|
221
|
+
this.communityWeights.set(community, (this.communityWeights.get(community) ?? 0) - nodeWeight);
|
|
222
|
+
this.communities.delete(nodeId);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Add node to community
|
|
226
|
+
*/
|
|
227
|
+
addNodeToCommunity(nodeId, community) {
|
|
228
|
+
const nodeWeight = this.nodeWeights.get(nodeId) ?? 0;
|
|
229
|
+
this.communityWeights.set(community, (this.communityWeights.get(community) ?? 0) + nodeWeight);
|
|
230
|
+
this.communities.set(nodeId, community);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get neighboring communities of a node
|
|
234
|
+
*/
|
|
235
|
+
getNeighborCommunities(nodeId) {
|
|
236
|
+
const communities = new Set();
|
|
237
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
238
|
+
const community = this.communities.get(neighbor);
|
|
239
|
+
if (community !== undefined) {
|
|
240
|
+
communities.add(community);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// For undirected graphs, also check incoming edges
|
|
244
|
+
if (!this.graph.isDirected) {
|
|
245
|
+
for (const neighbor of Array.from(this.graph.inNeighbors(nodeId))) {
|
|
246
|
+
const community = this.communities.get(neighbor);
|
|
247
|
+
if (community !== undefined) {
|
|
248
|
+
communities.add(community);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return communities;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Calculate total modularity
|
|
256
|
+
*/
|
|
257
|
+
calculateModularity(resolution) {
|
|
258
|
+
if (this.totalWeight === 0) {
|
|
259
|
+
return 0;
|
|
260
|
+
}
|
|
261
|
+
let modularity = 0;
|
|
262
|
+
// Sum over all communities
|
|
263
|
+
const communityInternalWeights = new Map();
|
|
264
|
+
// Calculate internal weights for each community
|
|
265
|
+
for (const node of this.graph.nodes()) {
|
|
266
|
+
const nodeId = node.id;
|
|
267
|
+
const community = this.communities.get(nodeId) ?? 0;
|
|
268
|
+
for (const neighbor of Array.from(this.graph.neighbors(nodeId))) {
|
|
269
|
+
if (this.communities.get(neighbor) === community) {
|
|
270
|
+
const edge = this.graph.getEdge(nodeId, neighbor);
|
|
271
|
+
const weight = edge?.weight ?? 1;
|
|
272
|
+
communityInternalWeights.set(community, (communityInternalWeights.get(community) ?? 0) + weight);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Calculate modularity
|
|
277
|
+
for (const [community, internalWeight] of communityInternalWeights) {
|
|
278
|
+
const communityWeight = this.communityWeights.get(community) ?? 0;
|
|
279
|
+
// For undirected graphs, internal weights are counted twice
|
|
280
|
+
const aIn = this.graph.isDirected ? internalWeight : internalWeight / 2;
|
|
281
|
+
const aTotal = communityWeight;
|
|
282
|
+
// Modularity formula: sum of (fraction of edges within community - expected fraction)
|
|
283
|
+
const actualFraction = aIn / this.totalWeight;
|
|
284
|
+
const expectedFraction = resolution * Math.pow(aTotal / (2 * this.totalWeight), 2);
|
|
285
|
+
modularity += actualFraction - expectedFraction;
|
|
286
|
+
}
|
|
287
|
+
return modularity;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Get pruning statistics
|
|
291
|
+
*/
|
|
292
|
+
getPruningStats() {
|
|
293
|
+
return { ...this.pruningStats };
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Optimized Louvain algorithm with automatic optimization selection
|
|
298
|
+
*/
|
|
299
|
+
export function louvainOptimized(graph, options = {}) {
|
|
300
|
+
const optimizer = new OptimizedLouvain(graph);
|
|
301
|
+
return optimizer.detectCommunities(options);
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=louvain-optimized.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"louvain-optimized.js","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain-optimized.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"louvain.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"louvain.d.ts","sourceRoot":"","sources":["../../../../src/algorithms/community/louvain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,qBAAqB,CAAC;AAC1C,OAAO,KAAK,EAAC,eAAe,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAC;AASlF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CACnB,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,cAAmB,GAC7B,eAAe,CAkDjB"}
|