SI传染模型的单个节点感染延迟率代码
时间: 2024-02-25 14:58:34 浏览: 72
代码 传染病的SI SIS SIR 三种数学建模模型
5星 · 资源好评率100%
以下是基于SI传染模型的单个节点感染延迟率的Python代码示例:
```python
import random
class Node:
def __init__(self):
self.infected = False
def infect(self):
self.infected = True
def is_infected(self):
return self.infected
class Graph:
def __init__(self, n):
self.nodes = [Node() for i in range(n)]
self.adj_list = [[] for i in range(n)]
def add_edge(self, u, v):
self.adj_list[u].append(v)
self.adj_list[v].append(u)
def infect_node(self, u):
self.nodes[u].infect()
def infect_neighbors(self, u):
for v in self.adj_list[u]:
if not self.nodes[v].is_infected():
if random.random() < p:
self.nodes[v].infect()
def simulate_infection(self, steps):
infected_nodes = []
for i in range(steps):
infected_count = len(infected_nodes)
for j in range(len(self.nodes)):
if self.nodes[j].is_infected() and j not in infected_nodes:
infected_nodes.append(j)
self.infect_neighbors(j)
if len(infected_nodes) == infected_count:
break
return len(infected_nodes) / len(self.nodes)
# Parameters
n = 1000 # Number of nodes
p = 0.2 # Infection probability
# Construct graph
graph = Graph(n)
for i in range(n):
for j in range(i+1, n):
if random.random() < 0.1:
graph.add_edge(i, j)
# Infect random node
start_node = random.randint(0, n-1)
graph.infect_node(start_node)
# Simulate infection
infection_rate = graph.simulate_infection(steps=10)
print("Infection rate:", infection_rate)
```
这段代码使用了一个 `Node` 类表示每个节点,一个 `Graph` 类表示整个图。在 `Graph` 类中,`add_edge()` 方法用于添加边,`infect_node()` 方法用于感染一个节点,`infect_neighbors()` 方法用于感染一个节点的所有邻居,`simulate_infection()` 方法用于模拟感染过程。
在模拟感染过程中,先随机选择一个节点进行感染,然后每一步遍历所有已经感染的节点,将其邻居节点中还没有感染的节点以一定的概率感染。这样重复进行多次,直到没有新的节点被感染为止。最终计算感染率并输出。
阅读全文