Hi, everyone!

I met a problem when I'm learning how to use graph-tool. I read the paper,

network reconstruction and community detection from dynamics, and I am

trying to achieve the same result. When I followed the same settings for

real networks with synthetic dynamics, their similarities were just about

0.2. I have a question about how to control the number of infection events

per node,a, for the first model and the number of micro-state, M, for the

second model. The whole process is shown as following.

import graph_tool.all as gt

from matplotlib import cm

g = gt.collection.konect_data["openflights"] ## airport network with SIS

dynamics

gt.remove_parallel_edges(g)

g = gt.extract_largest_component(g, prune=False)

#simulation of an empirical dynamic model

# The algorithm accepts multiple independent time-series for the

# reconstruction. We will generate 100 SIS cascades starting from a

# random node each time, and uniform infection probability beta=0.2.

ss = []

for i in range(100):

si_state = gt.SISState(g, beta=.2)

s = [si_state.get_state().copy()]

for j in range(10):

si_state.iterate_sync()

s.append(si_state.get_state().copy())

# Each time series should be represented as a single vector-valued

# vertex property map with the states for each note at each time.

s = gt.group_vector_property(s)

ss.append(s)

# Prepare the initial state of the reconstruction as an empty graph

u = g.copy()

u.clear_edges()

ss = [u.own_property(s) for s in ss] # time series properties need to be

'owned' by graph u

# Create reconstruction state

rstate = gt.EpidemicsBlockState(u, s=ss, beta = None, r=1e-6,

global_beta=.2,

state_args=dict(B=20), nested=False,

aE=g.num_edges())

# Now we collect the marginals for exactly 10,000 sweeps, at

# intervals of 10 sweeps:

gm = None

bm = None

betas = []

def collect_marginals(s):

global gm, bm

gm = s.collect_marginal(gm)

b = gt.perfect_prop_hash([s.bstate.b])[0]

bm = s.bstate.collect_vertex_marginals(bm, b=b)

betas.append(s.params["global_beta"])

gt.mcmc_equilibrate(rstate, force_niter=1000, mcmc_args=dict(niter=10,

xstep=0),

callback=collect_marginals)

print("Posterior similarity: ", gt.similarity(g, gm, g.new_ep("double", 1),

gm.ep.eprob))

print("Inferred infection probability: %g ± %g" % (mean(betas), std(betas)))