networkx学习(三) 随机网络

2024-03-03 00:50
文章标签 学习 网络 随机 networkx

本文主要是介绍networkx学习(三) 随机网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

networkx学习(三) 随机网络

参考:《巴拉巴西网络科学》

1.规则网络

在这里插入图片描述

2.随机网络的生成算法

网络科学旨在建立能够重现真实网络性质的模型。 我们遇到的大多数真实网络没有晶格所具有的那种令人愉悦的规则结构, 或者蜘蛛网所具有的那种可预测的放射型结构。 相反, 真实网络乍一看好像是随机连接而成的 。 随机网络理论通过构建和刻画真正随机的网络来解释这种表面上的随机性。

从建模的角度来看, 网络是一个相对简单的对象, 仅由节点和链接组成。 然而, 真正的挑战在于, 在哪些节点间放置链接才能重现真实系统的复杂性。 在这一点上, 随机网络背后的哲学思想很简单: 在节点之间随机放置链接。

随机网络有两种定义方式:
G(N, L) 模型
N个节点通过L条随机放置的链接彼此相连。 埃尔德什和雷尼在他们关于随机网络的系列论文[2-9]中采用的是这种定义方式。
G(N, p) 模型
N个节点中, 每对节点之间以概率p彼此相连。 该模型是由埃德加· N.吉尔伯特(Edgar N. Gilbert) 提出的。

G(N, p) 模型固定了两个节点的连接概率p, G(N, L) 模型则固定了总链接数L。 G(N, L) 模型中, 节点平均度可以简单地算出, 即 =2L/N。 G(N, p) 模型中, 网络其他特征则更容易计算。 本书将主要探讨G(N, p) 模型, 不仅是因为该模型便于计算网络的一些关键特征, 还因为在真实网络中, 链接数很少保持固定不变。

随机网络由N个节点组成, 每对节点相互连接的概率为p。构建随机网络的步骤如下:
(1) 从N个孤立节点开始。
(2) 选择一对节点, 产生一个0到1之间的随机数。 如果该随机数小于p, 在这对节点之间放置一条链接; 否则, 该节点对保持不连接。
(3) 对所有N(N-1) /2个节点对, 重复步骤(2) 。
在这里插入图片描述
第一种:G(N,L)

import random
import itertoolsdef GNL(N, L):G = nx.Graph()G.add_nodes_from(range(N))nlist = list(G)edge_count = 0while edge_count < L:# generate random edge,u,vu = random.choice(nlist)v = random.choice(nlist)if u == v or G.has_edge(u, v):continueelse:G.add_edge(u, v)edge_count += 1return GG = GNL(100, 200)

第二种:G(N,p)

def GNP(N, p):edges = itertools.combinations(range(n), 2)G = nx.Graph()G.add_nodes_from(range(N))for e in edges:if random.random() < p:G.add_edge(*e)return GGNP = GNP(100, 0.6)
# 可以直接调用库函数来生成这两种网络
n, m, p = 20,40,0.2
g1 = nx.gnm_random_graph(n, m)
g2 = nx.gnp_random_graph(n, p)plt.figure(figsize=(8,4))plt.subplot(121)
nx.draw(g1, pos=nx.circular_layout(g1), node_size=300, node_color="red",with_labels=True)
plt.title("G(N,L)")plt.subplot(122)
nx.draw(g2, pos=nx.circular_layout(g2), node_size=300, node_color="red",with_labels=True)
plt.title("G(N,p)")

在这里插入图片描述

3. ER随机网络的结构特性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1 度分布

随机网络中, 有些节点有许多链接, 有些节点只有少量链接, 甚至没有链接(图2-3) 。 这种差异可以通过度分布pk来刻画, pk表示一个随机选择的节点其度为k的概率。

编程实践:绘制不同规模随机网络的度分布
# 导入库
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
import math
import scipy
from scipy import stats# 定义求度分布的函数
# 度分布:Pk为网络中度为k的节点在整个网络中所占的比例
def get_pdf(G, kmin, kmax):k = list(range(kmin, kmax+1))  # 获取所有可能的度值N = len(G.nodes())Pk = []for ki 

这篇关于networkx学习(三) 随机网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767944

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五