python实现小世界网络生成实现小世界网络生成
没有使用没有使用igraph库哦库哦 因为我还没学因为我还没学
小世界网络简介:小世界网络简介:
1998年, Watts和Strogatz 提出了小世界网络这一概念,并建立了WS模型。实证结果表明,大多数的真实网络都具有小世界特
性(较小的最短路径)和聚类特性(较大的聚类系数)。传统的规则最近邻耦合网络具有高聚类的特性,但并不具有小世界特
性;而随机网络具有小世界特性但却没有高聚类特性。因此这两种传统的网络模型都不能很好的来表示实际的真实网络。
Watts和Strogatz建立的小世界网络模型就介于这两种网络之间,同时具有小世界特性和聚类特性,可以很好的来表示真实网
络。
小世界模型构造算法小世界模型构造算法
1、从规则图开始:考虑一个含有N个点的最近邻耦合网络,它们围成一个环,其中每个节点都与它左右相邻的各K/2节点相
连,K是偶数。
2、随机化重连:以概率p随机地从新连接网络中的每个边,即将边的一个端点保持不变,而另一个端点取为网络中随机选择
的一个节点。其中规定,任意两个不同的节点之间至多只能有一条边,并且每一个节点都不能有边与自身相连。
在上述模型中,p=0对应于完全规则网络,p=1则对应于完全随机网络,通过调节p的值就可以控制从完全规则网络到完全随机
网络的过渡。
效果如下:效果如下:
代码如下:代码如下:
import matplotlib.pyplot as plt
import random as rd
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置
plt.rcParams['axes.unicode_minus']=False
#小世界项目
def dian(N,K,P):
global ls
tim=[] for i in range(N):
for j in range(1,K+1):
ls[i]=ls.get(i,set())
ls[i].add((i+j)%N)
ls[i].add((i-j)%N)
ls[(i-j)%N]=ls.get((i-j)%N,set())
ls[(i-j)%N].add(i)
ls[(i+j)%N]=ls.get((i+j)%N,set())
ls[(i+j)%N].add(i)
for i in range(N):
for j in list(ls[i]):
if rd.random()<=P:
aa=ls[i].pop()
评论0