Setup from the previous page
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
SEED = 7
beta = 0.20 # infection probability per infected neighbour (per step)
mu = 0.10 # recovery probability (per step)
steps = 120
initial_infected = 5
N = 100
def make_graph(model: str, n: int, seed: int = SEED):
if model == "random":
return nx.erdos_renyi_graph(n=n, p=6 / (n - 1), seed=seed)
if model == "small-world":
return nx.watts_strogatz_graph(n=n, k=6, p=0.08, seed=seed)
if model == "scale-free":
return nx.barabasi_albert_graph(n=n, m=3, seed=seed)
raise ValueError("model must be one of: 'random', 'small-world', 'scale-free'")
def initialize_state(G, initial_infected=5, seed=SEED, rng=None):
if rng is None:
rng = np.random.default_rng(seed)
nx.set_node_attributes(G, "S", "state")
infected = rng.choice(list(G.nodes()), size=initial_infected, replace=False)
for node in infected:
G.nodes[node]["state"] = "I"
return G
G = make_graph("random", n=N)