代码实现
时间: 2024-02-27 11:55:46 浏览: 84
以下是在ER网络上实现SIR模型的Python代码示例:
```python
import networkx as nx
import random
# 定义SIR模型的参数
p = 0.3 # 每个节点与其他节点相连的概率
beta = 0.4 # 感染率
gamma = 0.2 # 恢复率
num_of_nodes = 100 # 节点数目
initial_infected = 1 # 初始感染者数目
# 初始化ER网络
G = nx.erdos_renyi_graph(num_of_nodes, p)
# 定义每个节点的状态
node_status = {}
for node in G.nodes():
node_status[node] = 'S' # 初始状态为易感状态
# 随机选择初始感染者
infected_nodes = random.sample(G.nodes(), initial_infected)
for node in infected_nodes:
node_status[node] = 'I' # 初始感染者的状态为感染状态
# 定义SIR模型的演化过程
def SIR_model(G, node_status, beta, gamma):
# 获取当前感染者节点列表
infected_nodes = [node for node in node_status if node_status[node] == 'I']
# 感染过程
for infected_node in infected_nodes:
neighbors = G.neighbors(infected_node)
for neighbor in neighbors:
if node_status[neighbor] == 'S':
if random.random() < beta:
node_status[neighbor] = 'I'
# 恢复过程
for infected_node in infected_nodes:
if random.random() < gamma:
node_status[infected_node] = 'R'
# 模拟SIR模型的演化过程
for i in range(100):
SIR_model(G, node_status, beta, gamma)
num_of_infected = len([node for node in node_status if node_status[node] == 'I'])
print('第{}天,感染者数目为{}'.format(i, num_of_infected))
```
在这个代码中,我们首先使用 networkx 库生成了一个 ER 网络,并初始化了每个节点的状态。然后,我们定义了 SIR 模型的演化过程,包括感染过程和恢复过程。最后,我们使用循环模拟了 SIR 模型的演化过程,并输出了每一天的感染者数目。
阅读全文