随机网络构建

随机网络构建

文章目录

  • 随机网络构建
    • @[toc]
      • 1 随机网络定义
      • 2 网络拓扑性质
        • 2.1 边数分布
        • 2.2 度分布
      • 3 代码实现

1 随机网络定义

随机网络与规则网络相对应,最为经典的随机网络模型是Erdös和Rényi研究的ER随机图模型,ER随机图模型有两种定义方式:

  • 方式一:给定节点数 N N N,固定连边数 M M M。每次随机选择一对节点并连边,重复 M M M次。每次选择两个不同节点并且没有连接的节点对,记作 G ( N , M ) G(N,M) G(N,M)。算法如下:

首先给定 N N N个节点和 M M M条待连接边

  • 随机选取一对没有边相连的不同节点,并在这对节点添加一条连边
  • 重复上述步骤 M M M
  • 方式二:给定 N N N个节点,任意两个不同节点之间有一条连边概率固定为 p p p,记作 G ( N , p ) G(N,p) G(N,p),算法如下

初始化 N N N个节点和固定概率 p p p

  • 选择一对没有边相连的节点对
  • 生成一个随机数 r ∈ [ 0 , 1 ] r\in[0,1] r[0,1]
  • 若r<p,则在这两个节点之间添加一条边;否则不添加
  • 重复上述步骤直至所有节点都被考虑一次。

特殊地,当 p = 0 p=0 p=0,则形成 N N N个孤立的节点; p = 1 p=1 p=1,则形成 N N N阶全局耦合网络,对于无向网络,连边数为 N ( N − 1 ) / 2 N(N-1)/2 N(N1)/2;当 p ∈ ( 0 , 1 ) p\in(0,1) p(0,1),连边数取值位于区间 ( 0 , N ( N − 1 ) / 2 ) (0,N(N-1)/2) (0,N(N1)/2)


2 网络拓扑性质

2.1 边数分布

给定随机网络 G ( N , p ) G(N,p) G(N,p),该网络刚好有 M M M条边的概率:
P ( M ) = C C N 2 M p M ( 1 − p ) C N 2 − M P(M) = C_{C_N^2}^M p^M(1-p)^{C_N^2-M} P(M)=CCN2MpM(1p)CN2M
C N 2 C_N^2 CN2表示随即网络理论最大边数,刚好有 M M M条连边的概率满足二项分布。根据二项分布性质,随机变量 M M M的期望
E ( M ) = ∑ M = 0 C N 2 M P ( M ) = p N ( N − 1 ) / 2 E(M) = \sum_{M=0}^{C_N^2}MP(M) = pN(N-1)/2 E(M)=M=0CN2MP(M)=pN(N1)/2
上述结果是显然的,因为一对节点存在连边概率为 p p p,理论上存在 N ( N − 1 ) / 2 N(N-1)/2 N(N1)/2条连边,因此理论上仅存在 E ( M ) E(M) E(M)条连边。根据二项分布的二阶矩公式,不难得到随机变量 M M M方差为
D ( M ) = p ( 1 − p ) N ( N − 1 ) 2 D(M) = p(1-p)\dfrac{N(N-1)}{2} D(M)=p(1p)2N(N1)


2.2 度分布

任意节点与其他 k k k个节点相连接的概率为 p k ( 1 − p ) N − 1 − k p^k(1-p)^{N-1-k} pk(1p)N1k,这里 p p p为连接概率,与 k k k个节点连接,但与其他 N − 1 − k N-1-k N1k(除去自身)个节点不相连。选择方式共有 C N − 1 k C_{N-1}^k CN1k种,则
P ( k ) = C N − 1 k p k ( 1 − p ) N − 1 − k P(k) =C_{N-1}^kp^k(1-p)^{N-1-k} P(k)=CN1kpk(1p)N1k
根据二项分布期望公式得到
E ( k ) = p ( N − 1 ) , D ( k ) = p ( 1 − p ) ( N − 1 ) E(k) = p(N-1),D(k) =p(1-p)(N-1) E(k)=p(N1),D(k)=p(1p)(N1)

3 代码实现

下面使用R语言实现随机网络构建。可以快速使用igraph包,调用函数erdos.renyi.game即可。

library(igraph)
# ER网络构造
g.er <- erdos.renyi.game(10, 0.5)
ecount(g.er)
0.5*10*9/2
plot(g.er)

在这里插入图片描述

也可以自己构建随机网络函数,参照第二种定义方式 G ( N , p ) G(N,p) G(N,p)的算法

ER <- function(N, p) {
  if (class(N) != "numeric") stop("节点数必须是整数")
  # N:节点个数
  # p: 连接概率
  library(igraph)
  M <- matrix(0, nrow = N, ncol = N)
  W <- matrix(0, nrow = N, ncol = N)
  for (i in 1:(N-1)) {
    for (j in (i+1):N) {
      if (j != i) {
        if (runif(1) < p) W[i, j] <- 1
      }
    }
  }
  g <- graph_from_adjacency_matrix(W, mode = "upper")
  list(matrix = W, Graph = g)
}

M <- 50
p <- 0.1
g <- ER(N = M, p=p)
plot(g$Graph,layout = layout.circle)
# 实际值变数
ecount(g$Graph)
# 理论值变数
p * M * (M - 1) / 2

在这里插入图片描述

上面的随机网络是无向的,根据第二种定义也可以扩充为有向随机网络


ER <- function(n, probability,type = "undirected") {
  # N:节点个数
  # p: 连接概率
  # type网络类型
  if (class(n) != "numeric") stop("节点数必须是整数")
  if (probability < 0 | probability > 1) stop("连接概率取值为0-1")
    
  library(igraph)
  M <- matrix(0, nrow = n, ncol = n)
  W <- matrix(0, nrow = n, ncol = n)
  switch (type,
          "undirected" = {
            for (i in 1:(n-1)) {
              for (j in (i+1):n) {
                if (j != i) {
                  if (runif(1) < probability) W[i, j] <- 1
                }
              }
            }
            g <- graph_from_adjacency_matrix(W, mode = "upper")
          },
          "directed" = {
            for (i in 1:n) {
              for (j in 1:n) {
                if (j != i) {
                  if (runif(1) < probability) W[i, j] <- 1
                }
              }
            }
            g <- graph_from_adjacency_matrix(W, mode = "directed")
          }
  )
  list(matrix = W, Graph = g)
}
M <- 50
p <- 0.2
number_edges =numeric()
number_sampling = 1000
for(i in 1:number_sampling){
  g <- ER(n = M, probability=p,type = "undirected")
  number_edges[i] <-  ecount(g$Graph)
}
plot(1:number_sampling,number_edges,type = "l",xlab = "number_sampling",ylab = "number_edges")
lines(1:number_sampling, rep(p * M * (M - 1)/2,number_sampling),col = "blue",lwd = "2")
lines(1:number_sampling, rep(mean(number_edges),number_sampling),col = "red",lwd = "2")
grid(col = "black")
legend("top",legend = c("抽样个体连边","抽样平均连边","理论平均连边"),
       col = c("black","blue","red"),lwd = c(1,2,2),
       bty  = "n", ncol = 3,cex = 1,text.width = 150)

var(number_edges)
p*(1-p)*M*(M-1)/2

在这里插入图片描述


-END-

参考书籍:汪小帆等,网络科学导论[M]. 北京: 高等教育出版社, 2012.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/24273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三种快速转换PDF为TXT的方法:简单、高效、免费

如何将PDF转换为TXT文件&#xff1f;在日常生活中&#xff0c;PDF和TXT是常见的文本格式。PDF格式文件具有稳定的布局和易于存储的特点。然而&#xff0c;许多在线下载的电子书通常是以PDF格式提供的&#xff0c;而电子阅读器通常不支持PDF格式&#xff0c;这就导致了无法方便地…

字节软测划水四年,内容过于真实......

先简单交代一下吧&#xff0c;潇潇是某不知名211的本硕&#xff0c;18年毕业加入一个小厂&#xff0c;之后跳槽到了字节跳动&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间他完成了一次晋升&#xff0c;换了一家…

SAP-MM-计算方案字段解析

01、 “步骤”&#xff1a;标识此条件类型在计算方案中的顺序编号&#xff0c;此编号会影响到后续业务中条件类型的排序&#xff0c;不同条件类型之间的编号最好间隔大一些&#xff0c;这样设置便于以后对计算方案进行扩展&#xff1b; 02、 “计数器”&#xff1…

Apache Kafka - 重识消费者

文章目录 概述Kafka消费者的工作原理Kafka消费者的配置Kafka消费者的实现高级API低级API 导图总结 概述 Kafka是一个分布式的消息队列系统&#xff0c;它的出现解决了传统消息队列系统的吞吐量瓶颈问题。 Kafka的高吞吐量、低延迟和可扩展性使得它成为了很多公司的首选消息队…

面试前15天刷完这个笔记,拿下字节测开岗offer....

面试&#xff0c;跳槽&#xff0c;每天都在发生&#xff0c;跳槽&#xff0c;更是很常见的&#xff0c;对于每个人来说&#xff0c;跳槽的意义也各不相同&#xff0c;可能是一个人更向往一个更大的平台&#xff0c;更好的地方&#xff0c;可以通过换一个环境改变自己的现状。而…

解密Java Class文件不为人知的秘密

Java 诞生多年&#xff0c;因此在网络上&#xff0c;有关 Java Class 文件格式解析的文章有很多&#xff0c;但他们大多数都是在列举《Java 虚拟机》中定义的格式&#xff0c;通读下来&#xff0c;好像所有的东西都讲清楚了&#xff0c;但是我个人好像并没有看懂&#xff0c;不…

2. css表格属性、文本属性、列表属性、边距属性、尺寸属性

1. 表格属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…

【JavaSE】Java基础语法(十五):继承

文章目录 1. 继承的实现2. 继承的好处和弊端3. Java中继承的特点4. 继承中的成员访问特点5. super6. 继承中构造方法的访问特点7. 继承中成员方法的访问特点8. super内存图9. 方法重写10. 权限修饰符 1. 继承的实现 继承的概念 继承是面向对象三大特征之一&#xff0c;可以使得…

【状态估计】基于随机方法优化PMU优化配置(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

路径规划算法:基于猫群优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于猫群优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于猫群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法猫群…

基于docker部署testlink并集成mantis

使用docker pull命令拉取需要的镜像。由于testlink和mantis都需要存储相关数据&#xff0c;所以这里可以看到还拉取了一个mysql镜像。 # docker pull bitnami/testlink:1.9.16-r8 # docker pull vimagick/mantisbt # docker pull mysql:5.7.20 使用docker network命令中创建…

Altium Designer 相同电路多组复制布线

在进行设计开发的时候&#xff0c;总会遇到相同的电路&#xff0c;或者模块&#xff0c;这些电路可以使用相同的布局和走线。我们可以画好其中一部分&#xff0c;然后直接复制&#xff0c;就可以提高效率。下面记录我自己的实际操作过程&#xff0c;有一些地方遇到了问题&#…

抽象轻松JavaScript

想象一样&#xff0c;现在有一个苹果&#xff0c;两个苹果&#xff0c;一箱苹果在你面前 看&#xff0c;上面的三种苹果&#xff0c;&#xff08;我写的是苹果就是苹果&#xff09; 语境1 例如你现在要搬运苹果&#xff01; 那么现在上面有苹果&#xff0c;一个&#xff0c;两…

大数据好找工作么?前景如何

大数据好不好找工作不是一概而论的&#xff0c;要根据你个人的学历情况&#xff0c;掌握技能程度&#xff0c;所在城市招聘需求&#xff0c;甚至是你的面试能力和简历是否突出优势有关。 但是毋庸置疑的是&#xff0c;大数据目前的发展前景还是相当优秀的。 我们知道&#xf…

每天一个面试题之final在java中有什么作用?

final在java中有什么作用&#xff1f; final关键字表示最终的含义 当它用来修饰一个引用时&#xff1a; <1>:如果引用为基本数据类型&#xff0c;则该引用为常量&#xff0c;该值无法被修改。<2>:如果引用为引用数据类型&#xff0c;例如&#xff0c;对象/数组等…

Java的CookieManager

文章目录 1. 简介2. CookieStore 1. 简介 Java5包括一个抽象类Java.net.CookieHandler&#xff0c;它定义了存储和获取Cookie的一个API&#xff0c;但不包括这个抽象类的实现&#xff0c;所以还有很多工作要做。Java6进一步作了补充&#xff0c;为CookieManager增加了一个可以…

基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

unity 渲染性能分析工具

目标 既然要优化&#xff0c;肯定要有个目标&#xff1a; pc上一般要求&#xff1a;一秒渲染60帧 移动端&#xff1a;一秒渲染30帧 这应该是最低的要求&#xff0c;如果游戏运行时&#xff0c;游戏帧率有变化&#xff0c;人眼能够明显的感觉到帧率下降。 优化的首要规则是找到…

OpenCV实战(20)——图像投影关系

OpenCV实战(20)——图像投影关系 0. 前言1. 相机成像原理2. 图像对的基本矩阵3. 完整代码小结系列链接0. 前言 数码相机通过将光线通过镜头投射到图像传感器上来捕捉场景产生图像。由于通过将 3D 场景投影到 2D 平面上形成图像,因此场景与其图像之间以及同一场景的不同图像…

vscode远程到服务器(包括WSL)进行GDB调试

工欲善其事必先利其器&#xff0c;这句话不容小觑&#xff0c;调试工具做的好&#xff0c;对开发工作可起到事半功倍。 本文主要讲vscode远程到服务器进行在线GDB调试手段&#xff0c;包含对WSL的远程调试&#xff0c;可以轻松对照源码进行应用程序调试。 文章目录 一、vscode…