Skip to content

performance

4 posts with the tag “performance”

SocNetV v3.7 Released

SocNetV v3.7 released! 🎉

We are happy to announce the release of SocNetV v3.7!

This release adds two new centrality measures (Katz and Bonacich Power Centrality), Node and Graph Connectivity analysis, a geodesic distance distribution report, shortest-path reconstruction and canvas highlighting, automatic viewport auto-fit, and CSV export for nearly every analysis report. It also fixes a major responsiveness problem — layouts and analyses on large networks used to freeze the whole app solid. Read on for details.

SocNetV v3.7 — Katz Centrality dialog

🔍 What’s New in SocNetV v3.7?

🧮 Katz Centrality (KC)

A new Analyze → Centrality → Katz Centrality measure gives each actor credit for indirect connections, not just direct ones — a friend-of-a-friend still counts, just discounted the further away they are, controlled by an attenuation factor alpha that you choose. It’s especially useful when ordinary Eigenvector Centrality collapses to zero on directed or disconnected networks. SocNetV estimates the valid range for alpha before showing the dialog and rejects values that wouldn’t converge — no guessing required. Full parity with every other prominence index: HTML/CSV reports, all four Layout → By Prominence Index variants, Filter Nodes by Centrality, Find Node by index score, and the prominence distribution chart.

⚖️ Bonacich Power Centrality (BPC)

A new Analyze → Centrality → Bonacich Power Centrality measure extends Katz with a second parameter, beta, that — unlike alpha — is allowed to be negative. This captures Bonacich’s signature idea: being tied to well-connected others doesn’t always help. In a bargaining or exchange network, being connected to powerful partners can actually reduce your own power, and BPC scores can come out negative to reflect that — a first among SocNetV’s centrality measures. Same full parity as Katz across reports, layouts, filtering, and charting.

🔗 Node and Graph Connectivity

Two new analyses under Analyze → Cohesion. Node Connectivity computes the minimum number of other nodes that must be removed to disconnect two chosen actors — a low number flags a structural vulnerability, a high number means many independent routes exist between them. Graph Connectivity answers the same question network-wide: the fewest nodes that would need to be removed to disconnect the network at its single weakest point. On directed networks, both let you choose whether to respect edge direction (strong) or ignore it (weak), matching the same choice already offered by Connectedness.

📊 Geodesic Distance Distribution

A new Analyze → Cohesion → Geodesic Distribution report answers “how many pairs of nodes are exactly d hops apart?” with a full distance-by-distance breakdown across the network. It reuses the all-pairs shortest-path cache from any prior distance or centrality computation, so it’s fast when that cache is already warm.

🧭 Shortest Path Reconstruction and Canvas Highlighting

Analyze → Cohesion → Distance no longer just reports a number — it now shows the full sequence of intermediate nodes along the shortest path (e.g. Alice → Carol → Bob), using BFS for unweighted networks and Dijkstra for weighted ones. The path’s edges are simultaneously selected on the canvas, exactly as if you’d Shift-clicked each one — letting you immediately move, inspect, or right-click the whole path without hunting for it visually.

🖼️ Viewport Auto-Fit

The canvas now automatically scales and centers to show the full network after every layout algorithm, after opening a file, and after generating a random network — and re-fits when the window is resized. No more “where did my network go?” after a layout or a window drag. Zoom buttons, Ctrl+scroll, and Reset (Ctrl+0) are reliable at any zoom level, and small networks are never scaled beyond 100%.

📤 CSV Export for Analysis Reports

A new Settings → Reports → Output format option (HTML/CSV) covers nearly every report in the Analyze menu — all matrix reports, every centrality and prestige index, reciprocity, eccentricity, clustering coefficient, and triad census. CSV is a lean, table-only alternative that opens directly in your spreadsheet app instead of the built-in report viewer. Clique Census and Hierarchical Clustering remain HTML-only, since both combine several heterogeneous sub-tables that don’t reduce to one flat table.

⌨️ Expanded CLI Scripting

The command-line interface gained a new --encoding flag (load a file with a specific text codec, bypassing the encoding-picker dialog) and --interactive-script mode, which drives SocNetV from a plain-text script — one command per line. Over twenty new script commands were added, covering relation switching, network generation, incremental graph building (add-node, add-edge, add-relation), and a headless report command for every centrality and prestige measure — letting the whole Analyze menu be scripted and benchmarked without clicking through the UI.

🌳 Faster Clique Census

The Bron–Kerbosch maximal-clique algorithm now uses Tomita et al.’s pivot-selection strategy, which can reduce the number of branches explored per recursive step to a single candidate on dense graphs — a dramatic speedup on real-world networks, with no change to the set of cliques reported.


⚡ The app no longer freezes during layouts and analysis

This is the headline fix of the release. Running a force-directed or prominence-index layout, or almost any weighted-centrality/distance report (Closeness, Betweenness, Stress, Power, Eccentricity, the distance and geodesics matrices, similarity/Pearson reports, and more), used to make the entire application completely unresponsive for the whole computation — no repainting, no input, not even a response to window-manager requests — on large networks or slower indices like Betweenness or Information Centrality.

The app now stays fully responsive throughout: a “please wait” status-bar message and busy cursor, plus a progress dialog with a Cancel button. Information Centrality, Eigenvector Centrality, and Walks Total — which sit outside the shared distance engine — got the same treatment separately.

Clearing a large network (loading a new file over one already open, or File → New) is also fixed: what used to take 30+ seconds on a 2,000-node/40,000-edge network now completes quickly, thanks to a bulk-teardown path and a fix for an accidental full-canvas repaint triggered by a combo-box state sync.


🛠 Other Improvements

  • An eight-commit cleanup pass on the canvas rendering internals (GraphicsWidget) improved both performance (single-probe hash lookups, merged selection queries, allocation-free edge keys) and correctness (fixed a double-free in guide-item cleanup, a dangling-pointer bug, Select All using the wrong coordinate space, and the rotation slider double-applying its transform).
  • Canvas zoom now anchors to wherever you last panned, instead of jumping back to the network’s center.
  • Auto-fit no longer over-shrinks networks that are only marginally larger than the canvas — it now matches the same tight, margin-free fit as Reset (Ctrl+0) in that case.
  • Custom node images (Edit → Node → Change shape → Custom) with a non-square aspect ratio are now scaled proportionally and centered, instead of being stretched to fill the node.
  • Misleading “session only” labels were removed from several preferences that were actually persisted between sessions.

🐛 Notable Bug Fixes

  • Bezier curve edges are now correctly applied on startup — they previously always rendered as straight lines until toggled once in Settings.
  • Removing one direction of a reciprocated edge no longer deletes both directions — it now always correctly downgrades to a single directed arc.
  • Hierarchical Clustering Analysis now uses BFS on unweighted networks instead of always running Dijkstra, matching every other distance-based analysis.
  • Erdős–Rényi random network generation now respects low edge probabilities (e.g. 0.01) instead of always producing zero edges.
  • Singular (non-invertible) matrices are now correctly reported as such in the Inverse Adjacency Matrix report, instead of showing meaningless huge numbers.
  • The canvas no longer silently falls back to slow software rendering — OpenGL is now enabled automatically, with a manual override still available in Settings → Canvas.
  • The Statistics Panel edge count is now correct while a node filter is active, and stays correct after the filter is cleared.
  • “Focus on Node” (Ego Network) now works correctly when applied to the very first node in a network.
  • Several rare crashes on app quit were fixed, including a dangling-pointer double-free found via AddressSanitizer.

Download SocNetV v3.7 from our Downloads page and let us know what you think!

Happy analyzing!
— The SocNetV Team

SocNetV v3.6 Released

SocNetV v3.6 released! 🎉

We are happy to announce the release of SocNetV v3.6!

This release adds a multi-condition Query Builder filter, subgraph extraction, four new export formats (UCINET DL, GraphViz DOT, weighted and simple edge lists), connected-component colouring, Clustering Coefficient node colouring, and working Bezier curve edges. Analysis of large networks is also noticeably faster — read on for details.

🔍 What’s New in SocNetV v3.6?

🔎 Query Builder — multi-condition filtering

A new Filter → Filter by Query… action opens the Query Builder dialog. You can add as many conditions as you like (pick an attribute, an operator, and a value), and only nodes or edges matching all of them will be shown. It works alongside the existing Filter Bar — the result appears as a removable chip, just like any other filter.

✂️ Subgraph Extraction

A new Edit → Subgraphs submenu lets you save a piece of your network as a separate file:

  • Save visible nodes as subgraph… — saves whatever is currently visible on the canvas (after filters) as an independent network file.
  • Save selected nodes as subgraph… — same, but only for selected nodes.

Your original network is never modified.

📤 Four New Export Formats

You can now export your network to four additional formats:

  • UCINET DL — compatible with UCINET and other tools that read the DL format. Multi-relation networks are fully supported.
  • GraphViz DOT — exports node positions, colours, shapes, and custom attributes. You can reload the exported file back into SocNetV and get exactly the same network.
  • Weighted Edge List — a simple text file with one source target weight per line.
  • Simple Edge List — same, without the weights.

The Save Subgraph As… dialog now also offers all these formats (previously it was limited to GraphML, Pajek, and Adjacency).

🎨 Connected-Component Colouring

A new Layout → Node Color by Connected Component action colours each node according to its connected component — nodes in the same component share the same colour. This makes it immediately obvious when your network is split into disconnected parts. The Analyze → Cohesion → Connectedness report now also tells you how many components the network has.

📐 Clustering Coefficient Node Colouring

Layout → Node Color → Clustering Coefficient colours nodes by their local clustering coefficient using the same blue-to-red gradient used by all other centrality measures. It is also available in the Filter Nodes by Centrality dialog and the distribution chart.

〰️ Bezier Curve Edges — now actually working

The Options → Edges → Bezier Curves toggle has been in the menu since v3.4 but never did anything. It is now fully working: edges draw as smooth curves, arrowheads point in the right direction even on reciprocated pairs, and the setting is remembered across sessions.

⚙️ Zero-weight Edge Settings

  • A new Settings → Edges → Show zero-weight edges checkbox (on by default) lets you hide zero-weight edges on load — useful when your data file contains them but you don’t want them cluttering the canvas.
  • The zero-weight edge colour picker in Settings now actually works (it was wired up in the UI but had no effect before).

↔️ Configurable Arrow Size

A new Settings → Edges → Arrow size control lets you make arrowheads bigger or smaller. The change applies immediately to all edges and is remembered for future sessions.


⚡ Faster analysis on large networks

All centrality and distance computations (betweenness, closeness, eccentricity, and others) now use all available CPU cores instead of just one. The numbers below are from our tests on a 12-core Linux machine:

NetworkCentralities computedBeforeAfter
Directed, 500 nodes, 1 219 edgesyes679 ms255 ms
1 000 nodes, 10 000 edgesno28 423 ms3 431 ms
1 000 nodes, 10 000 edgesyes47 020 ms5 949 ms

Large networks (2 000+ nodes, 40 000+ edges) are also smoother to navigate — selecting, dragging, and rubber-band selection no longer slow to a crawl.


🛠 Other Improvements

  • The Layout section of the Control Panel no longer has “Apply” buttons — layout changes take effect as soon as you make a selection.
  • The Statistics Panel on the right is now divided into collapsible sections, so you can hide the parts you don’t need.
  • Node and edge toolbar actions now behave sensibly when multiple items are selected: one item selected opens its properties dialog, multiple selected opens a bulk-edit dialog.
  • The left Control Panel now scrolls when vertical space is tight (e.g. when the Data Table dock is open) instead of overlapping its own widgets.
  • The status bar now shows a “Computing… please wait” message whenever the app is doing something that takes a moment, so you always know it is working.

🐛 Notable Bug Fixes

  • UCINET DL two-mode networks now load correctly (node counts, node numbers, and labels were all wrong before).
  • Galaskiewicz famous network now loads correctly — a missing data file in the app bundle was causing it to silently fail.
  • Edge mode (directed/undirected) now correctly switches back when you change relation — each relation remembers its own setting.
  • Zero-weight edges were being counted in several analyses where they shouldn’t have been (density, reciprocity, clustering coefficient, shortest paths). All fixed.
  • Shift+click on a node now adds it to the current selection instead of replacing it.
  • GraphViz DOT files exported by SocNetV could silently drop the first node when reloaded, producing wrong edges. Fixed.
  • Multi-relation networks where the first relation had no weights but a later one did were incorrectly reported as unweighted throughout the app. Fixed.
  • Several keyboard shortcut conflicts between actions were resolved.

Download SocNetV v3.6 from our Downloads page and let us know what you think!

Happy analyzing!
— The SocNetV Team

SocNetV v3.1 Released

SocNetV v3.1 Screenshot

Description

The Social Network Visualizer project announces a new version of our favorite SNA application. SocNetV v3.1 is the first Qt6-only release and brings many improvements and bug fixes.

What’s New in v3.1

  • Improved Performance: Faster large file loading and quicker responsiveness with large nets (greater than 20,000 edges), while having a reduced memory footprint.
  • Bug Fixes: Edge filtering now works as intended.

Availability

The new version is available for Windows, macOS, and Linux. Go to the SocNetV Downloads page to get it.

SocNetV v3.0 Released

SocNetV v3.0 is out now! It includes several performance improvements and new features to make social network analysis easier.

SocNetV v3.0 Screenshot

Description

The Social Network Visualizer project has released a brand-new version of our favorite SNA application. SocNetV v3.0 brings improved speed and responsiveness, bug fixes, and new command line parameters.

What’s New in v3.0

  • Improved Performance: Faster computations, as the Graph now runs on a separate thread.
  • Hardware-Accelerated Rendering: This version is the first to support hardware-accelerated (OpenGL) rendering of the networks on the canvas. This feature is enabled by default but can be disabled in Settings.
  • Web Crawler Enhancements: The Web Crawler has been improved to test for OpenSSL support in the OS, with user hints provided if OpenSSL is missing. Additionally, the delay between requests has been fixed.
  • Bug Fixes: A critical bug in weighted network centrality computations has been resolved (see #123).

Special Note

To run SocNetV v3.0 AppImage on Fedora 34 (which uses Wayland by default), use the following command:

env GDK_BACKEND=x11 ./SocNetV-3.0-dev-x86_64.AppImage

For Fedora/openSUSE users, you can get a proper package from our OBS repos.

Availability

The new version is available for Windows, macOS, and Linux. Go to the SocNetV Downloads page to get it.