python 已知有一个图G,和一节点列表list1,请给出对图G使用SIR模型的代码,其中感染节点为list1
时间: 2024-12-28 19:35:49 浏览: 16
在Python中,我们可以使用网络流库如`networkx`来构建图,并结合一个简单的SIR(Susceptible-Infected-Recovered)模型来模拟传播过程。首先,确保已安装了`networkx`库,如果还没有,可以使用`pip install networkx`来安装。
以下是一个基本的SIR模型示例,假设每个节点都有一个状态属性`susceptible`、`infected`或`recovered`,并利用`list1`来初始化感染者:
```python
import networkx as nx
# 假设已经有一个名为G的无向图,表示社交网络结构
G = nx.Graph() # 或者使用DiGraph()对于有向图
# 假定list1包含了初始的感染节点ID
infection_list1 = list1 # 把实际的list1替换为你需要的节点ID列表
# 初始化所有节点为易感状态
for node in G.nodes():
G.nodes[node]['state'] = 'susceptible'
# 将感染节点状态改为感染
G.nodes[infection_list1[0]]['state'] = 'infected'
# 假设函数run_simulation一天内运行一次SIR步骤
def run_simulation(G):
susceptible_nodes = [node for node, data in G.nodes(data=True) if data['state'] == 'susceptible']
# 感染邻居(假设接触即传染)
infected_neighbors = set()
for node in susceptible_nodes:
infected_neighbors.update(G.neighbors(node))
new_infected = [node for node in infected_neighbors if G.nodes[node]['state'] == 'susceptible']
# 转化为感染
for node in new_infected:
G.nodes[node]['state'] = 'infected'
# 每次模拟后统计恢复节点(这里简单处理,实际上可能需要更复杂的康复机制)
recovered_nodes = [node for node, data in G.nodes(data=True) if data['state'] == 'infected' and data.get('days_since_infection', 0) >= 1]
for node in recovered_nodes:
G.nodes[node]['state'] = 'recovered'
del G.nodes[node]['days_since_infection']
# 开始运行SIR迭代,可以根据需求调整迭代次数
for _ in range(num_days): # num_days是你想要的总天数
run_simulation(G)
阅读全文