上学期Python的大作业,刚刚被整理出来,就当是个备份了
import random
import time
import matplotlib.pyplot as plt
"""
耦合网络传播模型
"""
# 定义Node
class Node(object):
nodeName = None
# 存储点的地址
linkedNodes = None
# 存储点的名称
linkedNodesDemo = None
# 存储点的数量
linkedNodesAmount = 0
# 点的状态
nodeState = None
def __init__(self, name):
if self.nodeName is None:
self.nodeName = ""
if self.linkedNodes is None:
self.linkedNodes = []
if self.linkedNodesDemo is None:
self.linkedNodesDemo = []
if self.nodeState is None:
self.nodeState = "S"
self.nodeName = name
def add(self, node):
str1 = "".join(node.nodeName)
str2 = "".join(self.nodeName)
self.linkedNodes.append(node)
self.linkedNodesDemo.append(str1)
self.linkedNodesAmount += 1
node.linkedNodes.append(self)
node.linkedNodesDemo.append(str2)
node.linkedNodesAmount += 1
# 返回某个网络的所有节点的度总和
def allDegree(list):
sum = 0
for w in range(0, len(list)):
sum = sum + list[w].linkedNodesAmount
return sum
def main():
startTime = time.time()
"""
重要变量
"""
N = 1000 # 每个网络N个节点
p = 0.006 # ER网络:每对节点以概率 p 被选择,进行连边
m0 = 3 # BA网络:初始时网络有m0个节点被感染
m = 3 # BA网络:每个循环,一个新节点加入这个网络,并从已存在的网络中选择m个节点与之相连
B = 0.2 # SIR模型:S节点与I节点接触时的感染概率
Y = 0.5 # SIR模型:I节点自愈为R节点的概率
recursionTime = 50 # 循环感染次数
averageTime = 100 # 总体平均求值次数
"""
建立ER网络
"""
ERNodeList = []
# 初始化一列节点(ER)
for i in range(0, N):
nodeName = "A" + str(i)
ERNodeList.append(Node(nodeName))
# ER列内部随机连边
for i in range(0, N):
for j in range(i + 1, N):
r