常见网络模型——ER随机图、规则图、BA、WS小世界
ER随机图:(没有重边和自环的简单图)
定义一:具有固定边数的ER随机图 G(N,M)
构造算法:
(1)初始化:给定 N 个节点和待添加的边数 M
(2)随机连边:
- 随机选取一对没有边相连的不同节点,并在这对节点之间添加一条边
- 重复步骤1,直到在 M 对不同节点对之间各添加了一条边
定义二:具有固定连边概率的ER随机图 G(N,p)
构造算法:
(1)初始化:给定 N 个节点以及连边概率 p∈[0,1]
(2)随机连边:
- 选择一对没有边相连的不同节点
- 生成一个随机数 r ∈(0,1)
- 如果 r < p,那么在这对节点之间添加一条边;否则就不添加边
- 重复步骤1、2、3,直到所有节点对都被选择过一次
不使用已有库函数,自己编写模型如下:
import networkx as nx
import numpy as np'''ER model :generate a ER graph'''def ERmodel(NodeNum, ER_P):Node_num = NodeNumN = list(range(Node_num))G_ER = nx.Graph()G_ER.add_nodes_from(N)p = ER_PAdjMatrix = np.random.randint(0, 10, (Node_num, Node_num))# ER 无权无向AdjMatrix[0][0] = 0for i in range(1, Node_num):AdjMatrix[i][i] = 0for j in range(i):if i > j and AdjMatrix[i][j] < p:G_ER.add_edge(i, j)AdjMatrix[i][j] = 1AdjMatrix[j][i] = 1else:AdjMatrix[i][j] = 0AdjMatrix[j][i] = 0
规则图之最近邻耦合网络:具有周期边界条件,每个节点与最近邻 2k 个点连线
import networkx as nxif __name__ == '__main__':NUM1 = 500K = 15 # 最近邻 2K 个点连线K1 = K + 1g = nx.Graph()N = list(range(NUM1))g.add_nodes_from(N) # 增加 NUM1 个点for i in range(NUM1):for j in range(1, K1):K_add = NUM1 - Ki_add_j = i + j + 1if i >= K_add and i_add_j > NUM1: # 大数标签节点 加数邻边 加边判断i_add = i + j - NUM1g.add_edge(i, i_add)else:i_add = i + jg.add_edge(i, i_add)
BA无标度网络:
考虑网络的增长特性和优先连接(好像更多的人使用轮盘赌算法,以后再加好了)
增长特性:网络的规模是不断扩大的
优先连接:新的节点更倾向于与那些具有较高连接度的 hub 节点连接
构造算法:
(1)增长:从一个具有 m0 个节点的连通网络开始,每次引入一个新的节点并且连到 m 个已存在的节点上,这里 m≤m0
(2)优先连接:一个新节点与一个已经存在的节点 i 相连接的概率 P_i 与节点 i 的度 k_i 之间满足关系:
P_i = k_i / ∑k_j
import networkx as nx
import numpy as np
import random
import mathif __name__ == '__main__':m_0 = 4m = 2t = 496NUM = m_0 + tg = nx.Graph()N = list(range(m_0))g.add_nodes_from(N)k = [] # 保存各节点的度k_0 = m_0-1p_k = [] # 保存各节点的优先概率p_0 = 1/m_0k_all = 0for i in range(m_0): # 初始的完全图 p_k.append(p_0)k.append(k_0)k_all += k_0for j in range(i,m_0):g.add_edge(i,j)for i in range(t):m_0_t = m_0 + i # t 时刻的节点数m_0_1 = m_0 + i - 1 # t-1 时刻的节点数g.add_node(m_0_t)# k_all = 0# for j in range(m_0_t_1):# k_all += k[j]add_edge = 1while(add_edge<=m):for j in range(m_0_1): # 按照节点顺序比较,人为使得标签小的节点度偏大p_random = random.random() # 是否应该从概率最大的开始比较if p_random <= p_k[j] and add_edge <= m:k_j = k[j]p_k_j = p_k[j]g.add_edge(m_0_t,j)add_edge += 1k[j] = k_j + 1k_all += 2 # 增加一条边,度增加 2p_k[j] = (k_j + 1)/k_allk.append(2)p = 2/k_allp_k.append(p)
WS小世界模型:
作为从完全规则网络向完全随机网络的过渡,在规则网络中引入少许的随机性
构造算法:
(1)从规则图开始:给定一个含有 N 个点的环状最近邻耦合网络,其中每个节点都与它左右相邻的各 K/2 个节点相连,K是偶数;
(2)随机化重连:以概率 p 随机地重新连接网络中原有的每条边,即把每条边的一个端点保持不变,另一个端点改取为网络中随机选择的一个节点,其中规定不得有重边和自环
(在上述模型中,p=0 对应于完全规则网络,p=1 对应于完全随机网络)
在具体算法实现时,可以把网络中所有节点编号为 1, 2, ..., N ;对于每个节点 i,顺时针选取与节点 i 相连的 K/2 条边中的每一条边,边的一个端点仍然固定为节点 i, 以概率 p 随机选取网络中的任一个节点作为该条边的另一个端点。因此,严格来说,即使在 p=1 的情况下,通过这种算法得到的WS小世界模型与相同节点,相同变数的ER随机图模型还是有区别的:毕竟,在WS小世界中每个节点的度至少是 K/2, 而在ER随机图中则无此限制
import networkx as nx
import numpy as np
import randomif __name__ == '__main__':NUM1 = 500NUM2 = NUM1 - 1K = 15 # 最近邻 2K 个点连线K1 = K + 1p = 0.3g = nx.Graph()N = list(range(NUM1))g.add_nodes_from(N) # 增加 N 个点for i in range(NUM1):for j in range(1, K1):K_add = NUM1 - Ki_add_j = i + j + 1if i >= K_add and i_add_j > NUM1: # 大数标签节点 加数邻边 加边判断i_add = i + j - NUM1g.add_edge(i, i_add)else:i_add = i + jg.add_edge(i, i_add)# 按照概率 p = 0.3 重连for i in range(NUM1):for e_del in range(i + 1, i + K1):if e_del >= NUM1: # 找到的节点标签大于实际中的标签,标签更正e_del = e_del - NUM1P_random = random.randint(0, 9)if P_random <= 2:g.remove_edge(i, e_del)e_add = random.randint(0, NUM2) # 0 - NUM2 都可能while e_add == i or g.has_edge(i, e_add) == True:e_add = random.randint(0, NUM2)g.add_edge(i, e_add)
常见网络模型——ER随机图、规则图、BA、WS小世界相关推荐
- 复杂网络作业1——随机生成三种网络(小世界、无标度、ER随机)
主要是调用调用networkx和random库(可以直接构建网络.然后利用random随机生成相应数据) plt.show()可以生成相应的图片 小世界网络中要注意邻接个数必须是偶数 版本1:直接生成 ...
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型
1.概述 WS小世界模型(Watts - Strogatz model)是一种随机图生成模型,其生成的图具有小世界属性,包括较短的平均节点间距离和高集聚系数.该模型由Duncan J. Watts(邓 ...
- matlab产生er随机图,ER随机图模型 | 集智百科
原标题:ER随机图模型 | 集智百科 "集智百科精选"是一个长期专栏,持续为大家推送复杂性科学相关的基本概念和资源信息.作为集智俱乐部的开源科学项目,集智百科希望打造复杂性科学领域 ...
- 复杂网络实验1:ER随机图(matlab)
复杂网络实验1:ER随机图(matlab) 一.版本1(单纯画图,无邻接矩阵) 1.创建degree(度)一维矩阵 2.创建点位置二维矩阵 3.生成圆形的形状,把圆形分成N份,给点赋值 4.每个点之间 ...
- er图转关系模式规则_ER图转换成关系模式集的规则[图]
ER图转换成关系模式集的规则[图] 08-18栏目:技术 TAG:关系模式 关系模式 转自己博客园文章 www.jhua.org copyright www.jhua.org A与B=1:1 在A表里 ...
- 常见网络模型——BA无标度网络(使用轮盘赌算法)(python)
之前记录了一下,常见的四种网络模型--ER.BA.WS.规则图,以及如何使用python实现,具体请移步: https://blog.csdn.net/un357951/article/details ...
- 【Excel】绘图案例_常见复合图:簇状图+堆积图+折线图
[Excel]绘图案例_常见复合图:簇状图+堆积图+折线图 前言 最近有朋友让我帮忙用excel画图,老实说我很讨厌用excel画图,点来点去,复杂一些还不能复用,非常繁琐.当然,入门也很简单.需求时 ...
- 数据分析基础学习_Matplotlib_常见图形及绘制(折线图/散点图/柱状图/直方图/饼图)
1.3 常见图形及绘制 matplotlib可以绘制折线图.散点图.柱状图.直方图.饼图 1.3.1 常见图形种类及意义 折线图:以折线的上升或下降来表示统计量的增减变化的统计图 特点:可以显示数据的 ...
- 【Chrome】图片批量下载扩展zzllrr Imager小乐图客V1.4 (支持正则表达式、自定义JS代码、自定义引擎、多网站取图规则)...
小乐图客 - Chrome浏览器图片批量下载工具,升级至V1.4 该版本实现的功能: 1.右下角集成众多网站引擎(相似图片搜索.图片搜索.网页搜索.图片上传等等). 2.选项中增加各类设置的重置.导入 ...
最新文章
- 读后感与机翻《人类因果学习的分解:自下而上的联想学习和自上而下的图式推理》
- Windows Live Windows Phone 7
- PHP sprintf() 函数
- console用法java_使用console对javaScirpt进行全面调试-全面分析console用法
- 程序员职场第二次课笔记 9.9号
- 【福利】周志华教授专著《集成学习:基础与算法》上市,豆瓣满分森林书破解AI实践难题...
- lte接口流程图_请画出LTE系统的组网图及标注接口。
- 服务器将office转pdf文件,Windows服务-Office转PDF文件
- 实习成长之路: 重新认识IOC,你可能对IoC有些误会?
- Delphi 读取注册表REG_MULTI_SZ类型,注意事项
- jquery下载及怎么选择版本
- XXXXX was compiled with optimization - stepping may behave oddly; variables may not be available.
- 【CSDN表情包大全】
- linux 从samba拷贝,提升samba复制速度,树莓派外接硬盘读取从40M到110M(2020-11-15更新)...
- 小程序 formid 生成_微信电子计次卡生成小程序
- webpack构建中tree shaking、scope Hoisting(面试题)
- Mac有滚动截图工具吗?----解救 MAC 使用者们的高效截图工具- Xnip
- 虚拟运营商治理170垃圾短信推举报平台
- 工业物联网安全需要一揽子服务商
- bls12 curve生成器,可生成ZCash sapling版本中所使用的BLS12-381曲线