Как использовать Graph-Tool для построения модели Dynami c - PullRequest
0 голосов
/ 18 марта 2020

каждый!

Я столкнулся с проблемой, когда учусь пользоваться графическим инструментом. Я прочитал газету, реконструкцию сети и обнаружение сообщества из динамики, и я пытаюсь достичь того же результата. Когда я следовал тем же настройкам для реальных сетей с динамикой syntheti c, их сходство составляло всего около 0,2. Таким образом, у меня есть вопрос о том, как контролировать количество событий заражения на узел a для первой модели и количество микросостояний M для второй модели. Весь процесс показан следующим образом.

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)))

##########################################################
g = gt.GraphView(gt.collection.konect_data["maayan-foodweb"], directed=True)##a food web network with Ising dynamic
gt.remove_parallel_edges(g)

# The algorithm accepts multiple independent time-series for the
# reconstruction. We will generate 1000 Ising cascades starting from a
# random node each time, and the uniform inverse temperature beta=0.2.

ss = []
for i in range(1000):
    si_state = gt.IsingGlauberState(g, beta=.1)
    s = [si_state.get_state().copy()]
    si_state.iterate_async(niter=1000)
    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)

u = g.copy()
u.clear_edges()
ss = [u.own_property(s) for s in ss]



rstate = gt.PseudoIsingBlockState(g,s=ss,beta=0.1,state_args=dict(B=1),
                                  nested=False, aE=g.num_edges())

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["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("Inversed temperature: %g ± %g" % (mean(betas), std(betas)))

Более того, мне также интересно, как сделать вложенную версию для той же сети. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация по этому вопросу. в противном случае, я надеюсь услышать, как это может быть достигнуто с помощью Graph-Tool?

Спасибо, Gege Hou

...