Hi graphtool community!
In this period I am stuck in a timing problem.
I need to execute this function:
def *evolutionSIR*(G, ep_beta, count, v0):
state = SIRState(G, beta=ep_beta, gamma=gamma, v0=v0,
constant_beta=True)
s = state.get_state()
temp_state = np.zeros((count + 1, G.num_vertices()), dtype=int)
temp_state[0, :] = s.a[:]
for i in range(count):
state.iterate_sync()
s = state.get_state()
temp_state[i + 1, :] = s.a[:]
return temp_state
After this, I use a fuction to determine the timestep where each community
is infected.
My pc runs the *evolutionSIR* function in 1.1 s ± 48 ms, and the total time
to run the both functions is 1.16 s ± 48 ms. For my study I need to run
O(1E6) the two functions, and it takes a long time on my personal computer.
Reading the documentation, I noticed that *iterate_sync* has the *niter*
parameter and I tried it like this:
v0 = np.random.choice(G.get_vertices(), 1)
state = SIRState(G, beta=ep_beta, gamma=gamma, v0=v0, constant_beta=True)
state.iterate_sync(niter=count)
Doing this, it results to be almost 2.85 times faster (385 ms ± 39.3 ms)
than the *evolutionSIR* I wrote before but the problem is that I can't have
the states in each evolution step.
Is there a way to get the history of the diffusion using
*iterate_sync*(niter=count)?
Or is there a way to optimize the evolutionSIR function?
Greetings