It is necessary to benchmark our algorithm via synthetic networks, where we have perfect confidence on the model parameters. Here we can control the nodes' block membership b, the edge count matrix ers, and the degree distribution d. Once we specified these 3 parameters, we call Graph-tool's generate_sbm function to generate a graph-tool graph instance, and then use that instance as an input for our biSBM.optimalks.OptimalKs
class.
The easy cases are bipartite version of the planted partition models. It is a (Ka, Kb)-bipartite structure with ers = pc/K + (1 − p)(1 − c)/K(K − 1), where Ka = Kb = K and p = cout/cin is a parameter that controls how crisp the structure is. When p = 0, we expect no connections at all between nodes of different groups, i.e., ers = Eδrs/K.
A easy case with ⟨k⟩ = 10 and p = 0.1, planted as (Ka, Kb) = (5, 5) equally-sized communities.The hard cases are planted networks where Ka ≠ Kb, but the edge count matrix is still designed in a way that allow the control of network structural strength.
A hard case with ⟨k⟩ = 10 and p = 0.1, planted as (Ka, Kb) = (5, 31) equally-sized communities.A even harder case is simply a random draw out of the ensemble of edge count matrices where we only fix Ka and Kb.
A harder case with ⟨k⟩ = 10, planted as (Ka, Kb) = (5, 31) equally-sized communities. This is the strongest structure out of 106 random ers draws.