Hi, I solved my issue re-creating a new SIState using s parameter to keep tracking of the previous graph vertices states. This is how I did it: def evolution(G, beta, count, perc): eprop = G.new_edge_property("double") vprop = G.new_vertex_property("int") eprop.a = beta state = SIState(G, beta=eprop, constant_beta=False) infected = [state.get_state().fa.sum()] for i in range(count): state.iterate_sync() infected.append(state.get_state().fa.sum()) if (i == time_cut) & (perc != 0.): n = np.array(random.sample(range(G.num_edges()), int(G.num_edges() * perc / 100))) eprop.a[n] = 0. vprop.a = state.get_state().fa state = SIState(G, beta=eprop, s=vprop, constant_beta=False) else: pass return infected n is an array containing only the edges' indexes edges of which I want to modify. And using eprop.a[n], I change the properties of the selected edges. When I reapply the SIState, the s parameter keeps the previous vertices states stored in vprop. I don't understand where the code is inefficient, could you tell me where I am wrong? Regards, BH -- Sent from: http://main-discussion-list-for-the-graph-tool-project.982480.n3.nabble.com/