Python实现小世界网络生成:WS模型详解与代码示例

清欢
清欢
发布时间:2026-10-13| 5人浏览过
原创

本文介绍如何利用Python生成小世界网络,基于Watts和Strogatz提出的WS模型。通过从规则环状网络出发,以概率p进行边重连,结合高聚类系数与小世界特性。文中提供完整Python代码,展示节点连接与可视化过程,适用于网络科学学习与研究参考。

本示例未使用igraph库,因为尚未学习该库的使用。

小世界网络简介

小世界网络简介:

1998年,Watts和Strogatz提出小世界网络概念并建立WS模型。实证研究表明,大多数真实网络具备小世界特性(较短的最短路径)和高聚类特性(较大的聚类系数)。传统规则最近邻耦合网络具有高聚类但缺乏小世界特性;随机网络有小世界特性但聚类系数低。因此,这两种传统模型均无法准确描述真实网络。WS模型介于两者之间,同时具备小世界和高聚类特性,能更好地表示真实网络。

小世界模型构造算法

小世界模型构造算法

1、从规则图开始:构建一个含N个节点的最近邻耦合网络,节点围成环,每个节点与左右各K/2个相邻节点相连,K为偶数。

2、随机化重连:以概率p随机重连网络中的每条边,保持一个端点不变,另一个端点随机选择网络中的节点。规定任意两个不同节点间至多一条边,且节点不与自身相连。

在该模型中,p=0对应完全规则网络,p=1对应完全随机网络。通过调节p值,可控制从完全规则网络到完全随机网络的过渡。

效果如下:

代码如下:

Python代码实现


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()
        a=set(range(N))
        a.discard(i)
        a=a^ls[i]
        for i in range(rd.randint(1,len(a)-1)):
          aa=a.pop()
        ls[aa].discard(i)
        b=a.pop()
        ls[i].add(b)
        ls[b].add(i)
  for i in range(N):
    tim.append(len(ls[i])*40-N)
  new=[]
  for i in range(len(ls)):
    l=[]
    l.append(i)
    l+=list(ls[i])
    new.append(l)
  return new,tim
def hua(L,S):
  x=np.linspace(0,100,len(L))
  y=np.sqrt(np.abs(10000-(x-50)**2))
  plt.scatter(x,y,s=S,edgecolor='k',alpha=0.7)
  for i in range(len(L)):
    plt.text(x[i]-0.13,y[i]-0.015,str(S[i]//40+1))
    for j in L[i]:
      plt.plot(list((x[i],x[j])),list((y[i],y[j]))\
           ,color='gray',linewidth=1,alpha=0.7)
  plt.title('小世界网络初步')
  plt.xticks([])
  plt.yticks([])
  plt.axis('off')
  plt.savefig('niu.png')
ls={}
l,k=dian(20,3,0.5) #不要超过40哦~
hua(l,k)

以上这篇Python实现小世界网络生成就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。