Matlab实现无标度网络生成及其分析

article/2025/8/30 18:29:18

文章目录

  • 引言
  • 社会网络分类
  • Barabási-Albert无标度网络生成算法
    • MATLAB代码实现
    • 无向的无标度网络生成代码BAgraph_undir
    • 有向的无标度网络生成代码BAgraph_dir
  • 无标度网络的节点度统计分析
    • 无向的无标度网络节点频率统计算法
    • 有向的无标度网络节点频率统计算法
  • 完整的分析代码
    • 代码实现
  • 总结
  • 参考文献


引言

在Matlab实现小世界网络生成及其分析中,我们已经讨论了社会网络结构属性以及小世界网络的生成算法、结构分析。
在该文中,我们提到社会网络最重要的三个属性是:

  1. 群聚系数
  2. 平均路径长度
  3. 节点度分布

通过小世界网络生成算法能够很好地研究群聚系数平均路径长度对网络信息传递的影响。
因此,本文将从无标度网络出发,研究网络结构度分布的特点。

社会网络分类

在发现万维网的度服从非泊松分布之前,人们通常认为复杂网络的节点度服从泊松分布 [1]。而实际上许多真实的网络结构,如学术论文的引用关联网络 [2]的节点度并不服从泊松分布,而是服从如下图所示的幂律分布 [3]。
幂律分布图

因此,根据真实网络的节点度分布将“小世界”网络进一步划分为以下三类[4]:

1) scale-­free networks:节点的度分布呈现出幂律衰减的特征;
2) broad­-scale networks:节点的度分布呈现出幂律衰减的特征,但存在着一个指数截断现象;
3) single-­scale networks:节点的度分布呈现出指数衰减的特征。

这里的scale-­free networks即为无标度网络。该类网络中的大多数节点都拥有很少的边连接数,只有少数网络节点的相连节点度很大。这些连接度很大的节点在网络信息传递中扮演着主导作用 [5]。
文献 [3] 提出了节点增加连接偏好两种机制来解释这类度很大的节点出现的原因。该连接偏好机制认为:“对于网络中的已有节点 i i i,其被新增节点连接的概率 p i p_i pi 与它的节点度 k i k_i ki 呈正比例关系。”。这一概率可以用下式表示:
p i = k i ∑ j k j p_i = \frac{k_i}{\sum_j{k_j}} pi=jkjki
在上式中,分母项 ∑ j k j \sum_j{k_j} jkj表示的是当前所有节点的度数总和。

Barabási-Albert无标度网络生成算法

基于节点增加连接偏好,Barabási 和 Albert提出了一类无标度网络生成算法。具体算法流程图如下:
在这里插入图片描述

MATLAB代码实现

这里提供了两类生成代码(均来自网上开源代码

无向的无标度网络生成代码BAgraph_undir

function [sparsematrix, fullmatrix] = BAgraph_undir(N,m0,m)
adjacent_matrix = sparse( m0, m0);% 初始化邻接矩阵
for i = 1: m0for j = 1:m0if j ~= i      %去除每个点自身形成的环adjacent_matrix(i,j) = 1;%建立初始邻接矩阵,3点同均同其他的点相连endend
end
adjacent_matrix =sparse(adjacent_matrix);%邻接矩阵稀疏化
node_degree = zeros(1,m0+1);                %初始化点的度
node_degree(2: m0+1) = sum(adjacent_matrix);%对度维数进行扩展
for iter= 4:Niter;                               %加点total_degree = 2*m*(iter- 4)+6;%计算网络中此点的度之和cum_degree = cumsum(node_degree);%求出网络中点的度矩阵choose= zeros(1,m);%初始化选择矩阵% 选出第一个和新点相连接的顶点r1= rand(1)*total_degree;%算出与旧点相连的概率for i= 1:iter-1if (r1>=cum_degree(i))&&( r1<cum_degree(i+1))%选取度大的点choose(1) = i;breakendend% 选出第二个和新点相连接的顶点r2= rand(1)*total_degree;for i= 1:iter-1if (r2>=cum_degree(i))&&(r2<cum_degree(i+1))choose(2) = i;breakendendwhile choose(2) == choose(1)%第一个点和第二个点相同的话,重新择优r2= rand(1)*total_degree;for i= 1:iter-1if (r2>=cum_degree(i))&&(r2<cum_degree(i+1))choose(2) = i;breakendendend% 选出第三个和新点相连接的顶点r3= rand(1)*total_degree;for i= 1:iter-1if  (r3>=cum_degree(i))&&(r3<cum_degree(i+1))choose(3) = i;breakendendwhile (choose(3)==choose(1))||(choose(3)==choose(2))r3= rand(1)*total_degree;for i=1:iter-1if (r3>=cum_degree(i))&&(r3<cum_degree(i+1))choose(3) = i;breakendendend%新点加入网络后, 对邻接矩阵进行更新for k = 1:madjacent_matrix(iter,choose(k)) = 1;adjacent_matrix(choose(k),iter) = 1;endnode_degree=zeros(1,iter+1);node_degree(2:iter+1) = sum(adjacent_matrix);
end
sparsematrix = adjacent_matrix;
% tu_plot(matrix,0);%画出当前的连接图
fullmatrix=full(adjacent_matrix);%得到邻接矩阵
%将主对角元素也记为1,即认为自己也属于邻居一员
for i=1:Nfullmatrix(i,i)=1;
end
end

有向的无标度网络生成代码BAgraph_dir

function retAdjMat = BAgraph_dir(N,mo,m)
% Generates a scale-free directed adjacency matrix using Barabasi and Albertalgorithm
% Input: N - number of nodes in the network, mo - size of seed, m = average degree. 
% Use mo=m or m<mo.
% Example: A = BAgraph(300,10,10);
% Ref: Methods for generating complex networks with selected structural properties for simulations, Pretterjohn et al, Frontiers Comp Neurosci% Author:
% Tapan P Patel, Ph.D., tapan.p.patel@gmail.com
% University of Pennsylvania
hwait = waitbar(0,'Please wait. Generating directed scale-free adjacency matrix');
A = zeros(N);
E = 0;
for i=1:mofor j=i+1:moA(i,j) =1;A(j,i) = 1;E = E + 2;end
end
% Second add remaining nodes with a preferential attachment bias - rich get
% richer
for i=mo+1:Nwaitbar(i/N,hwait,sprintf('Please wait. Generating directed scale-free adjacency matrix\n%.1f %%',(i/N)*100));curr_deg =0;while(curr_deg<m)sample = setdiff(1:N,[i find(A(i,:))]);j = datasample(sample,1);b = sum(A(j,:))/E;r = rand(1);if(b>r)r = rand(1);if(b>r)A(i,j) = 1;A(j,i) = 1;E = E +2;elseA(i,j) = 1;E = E +1;endelseno_connection = 1;while(no_connection)sample = setdiff(1:N,[i find(A(i,:))]);h = datasample(sample,1);b = sum(A(h,:))/E;r = rand(1);if(b>r)r = rand(1);if(b>r)A(h,i) = 1;A(i,h) = 1;E = E +2;elseA(i,h) = 1;E = E+1;endno_connection = 0;endendendcurr_deg = sum(A(i,:));end
end
retAdjMat = A;
waitbar(1,hwait,'Successfully generating onn B-A scale free graph');
pause(1)
delete(hwait);
end

无标度网络的节点度统计分析

对于生成得到的有向无向的无标度网络G。我们可以在得到其邻接矩阵adjMat的基础上,直接统计行和列和作为网络的入度出度,并人为的进行曲线拟合。

无向的无标度网络节点频率统计算法

%% 本脚本将被用于绘制一个网络的度分布图
% 只适用于无向图的邻接矩阵,若要绘制有向图的邻接矩阵,请参考plotDirDegDistribution
function plotDegDistribution(adjMat,type)
% Input:
% 1. adjMat: 一个网络结构图的邻接矩阵
% 2. type: 绘制的曲线图类型,缺省情况下为曲线图
% 只能用于无向图,因此要求传入的邻接矩阵是对称的
if nargin < 2type = '-';disp('默认绘制曲线图,而不是散点图');
end
row = size(adjMat,1);
col = size(adjMat,2);
assert(row==col, '邻接矩阵必须是一个方阵'); % 输入检测限制
assert(all(all(adjMat==adjMat'))==1, '必须是无向图的邻接矩阵,即对称');
degree = sum(adjMat);
degCase = unique(degree); % 计算度的种类个数
degFreq = zeros(length(degCase),2); % 构造一个键值对
degFreq(:,1) = degCase; % 设置键值
for i=1:length(degCase)degFreq(i,2) = sum(sum(degree == degCase(i))); % 统计节点度的频率
end
figure % 绘制幂律
loglog(degFreq(:,1),degFreq(:,2),type);
set(gcf,'Color','w');
figure % 绘制普通坐标
plot(degFreq(:,1),degFreq(:,2),type);
set(gcf,'Color','w');
maxFreq = max(degFreq(:,2));
maxIdx = max(degFreq(:,1)); % 统计坐标范围
xticks(0:5:(ceil(maxIdx/5)*5));
yticks(0:20:(ceil(maxFreq/20)*20));
ylim ( [-5 ceil(maxFreq/20)*20]);
xlim ([0 (ceil(maxIdx/5)*5)+3]);
xlabel('Node degree value');
ylabel('Degree frequency');
end

有向的无标度网络节点频率统计算法

%% 本脚本将被用于绘制一个网络的度分布图
% 只适用于有向图的邻接矩阵,若要绘制无向图的邻接矩阵,请参考plotDegDistribution
function plotDirDegDistribution(adjMat,type)
% Input:
% 1. adjMat: 一个无向网络结构图的邻接矩阵
% 2. type: 绘制的曲线图类型,缺省情况下为曲线图
% 只能用于有向图,因此要求传入的邻接矩阵是对称的
if nargin < 2type = '-';disp('默认绘制曲线图,而不是散点图');
end
row = size(adjMat,1);
col = size(adjMat,2);
assert(row==col, '邻接矩阵必须是一个方阵'); % 输入检测限制%% 统计节点度
inDegree = sum(adjMat,1); 
outDegree = sum(adjMat,2);
totalDegree = inDegree + outDegree'; 
degCase = unique(totalDegree); % 计算度的分布
degFreq = zeros(length(degCase),2);
degFreq(:,1) = degCase; % 构造一个键值对,键为度的种类,值为度的频次
for i=1:length(degCase)degFreq(i,2) = sum(totalDegree == degCase(i)); % 统计节点度的频率
end
figure % 绘制幂律
loglog(degFreq(:,1),degFreq(:,2),'o');
set(gcf,'Color','w');
figure % 绘制普通坐标
plot(degFreq(:,1),degFreq(:,2),'o');
set(gcf,'Color','w');
maxFreq = max(degFreq(:,2));
maxIdx = max(degFreq(:,1)); % 统计坐标范围
xticks(0:5:(ceil(maxIdx/5)*5));
yticks(0:20:(ceil(maxFreq/20)*20));
ylim ( [-5 ceil(maxFreq/20)*20]);
xlim ([0 (ceil(maxIdx/5)*5)+3]);
xlabel('Node degree value');
ylabel('Degree frequency');
end

完整的分析代码

在网络结构生成算法以及网络节点度统计分析算法都实现以后,可以实现一个完整的分析流程。

请将这些代码分别用.m保存,然后文件名命名为对应的函数名。

在这里插入图片描述

代码实现

%% 脚本说明:本脚本将被用于分析B-A无标度网络
% 主要用于分析:网络的节点度分布情况
% 依赖的外部脚本包括:
% 1. 生成有向的无标度网络的脚本:BAgraph_dir(N,mo,m)
% 2. 绘制节点分布图的脚本:plotDegDistribution
% 特别地,还需要工具箱cftool
%% 参数初始化
clear;
N = 200; % 网络的节点总数
m0 = 5; % 初始节点数
m = 5; % 每个新增节点带来的边数增加
assert(m <= m0 && N >= m0, '参数m必须小于等于初始节点数,不然会出现重复边或自环');
%% 生成有向的BA无标度模型的图
retAdjMat = BAgraph_dir(N,m0,m); % 得到的是矩阵
%% 网络结构可视化
retGraph = digraph(retAdjMat); 
plot(retGraph,'NodeColor','k','EdgeAlpha',0.3);
title(['ScaleFree Graph with N =', num2str(N),' nodes, m0 = ' num2str(m0), ' and m = ', ...num2str(m)], 'Interpreter','latex')
axis off;
set(gcf, 'Color', 'w');
% 通过脚本有向的无标度网络的度分布图
plotDirDegDistribution(retAdjMat,'o'); 

这段代码主要是对由BAgraph_dir生成的有向无标度网络进行度分布统计并可视化工作。
在这里插入图片描述
从上图也可以发现:节点度呈现出幂律分布的趋势。但这样可视化的效果不是很好。因此,在得到节点度分布degCase对应频次degFreq的基础上,我们可以通过matlab的曲线拟合工具cftool得到更为好看的曲线拟合图。

直接调用命令cftool(这里不确定是否需要手动安装该工具箱)

%% 通过工具箱cftool进行曲线拟合,需要选取对应的数据
cftool; % 进行曲线拟合

在这里插入图片描述
还可以对这一拟合后的figure进行编辑。
在这里插入图片描述

总结

Matlab实现小世界网络生成及其分析和这篇文章对小世界网络无标度网络生成算法、结构分析做了一个比较充足的讨论。也提供了一些可视化的代码实现。

在Matlab中,我们倾向于得到一个矩阵的邻接矩阵,进而进行相应的分析工作。
而实际上,matlab对于graph这一对象的支持也做的很完善。可以通过命令doc grpah查看完整的帮助。
在这里插入图片描述
这里就不仔细为大家分析了。

参考文献

[1] Albert­László, Barabási. Scale­free networks: a decade and beyond.[J]. Science (New York,N.Y.), 2009, 325(5939): 412-­413
[2] Redner, S… How popular is your paper? an empirical study of the citation distribution[J]. Physics of Condensed Matter, 1998, 4(2)
[3] A.­L. Barabási, R. Albert. Emergence of scaling in random networks[J]. science, 1999, 286(5439): 509­-512
[4] L. Amara, A. Scala, M. Barthelemy, et al. Classes of small­world networks[J]. , 2011, 207­-210
[5] Q. Zha, G. Kou, H. Zhang, et al. Opinion dynamics in finance and business: a literature review and research opportunities[J]. Financial Innovation, 2020, 6(1): 1­-22


http://chatgpt.dhexx.cn/article/5qgkDsOf.shtml

相关文章

networkx学习(五)无标度网络

networkx学习(五)无标度网络 参考:参考来源,《巴拉巴西网络科学》 无标度网络: 对于随机网络和规则网络,度分布区间非常狭窄,大多数节点都集中在节点度均值< k >的附近,说明节点具有同质性,因此< k >可以被看作是节点度的一个特征标度。而在节点度服从幂…

无标度网络的生成模型

1999 年 Barabsi 和 Albert 提出了无标度网络模型&#xff08;简称 BA 模型&#xff09;。无标度网络的重要特征为&#xff1a; 无标度网络的节点度分布服从幂律分布。 无标度网络的度分布 p ( d ) p(d) p(d) 满足 p ( d ) ∼ d − α &#xff0c; p(d)\sim d^{-\alpha}&…

无标度网络(scale-free network)

无标度网络具有严重的异质性&#xff0c;其各节点之间的连接状况&#xff08;度数&#xff09;具有严重的不均匀分布性&#xff1a;网络中少数称之为Hub点的节点拥有极其多的连接&#xff0c;而大多数节点只有很少量的连接。少数Hub点对无标度网络的运行起着主导的作用。从广义…

无标度网络模型

网络节点的度没有明显的特征长度我们就称之为无标度网络。 一、BA无标度网络模型 1、模型概述 ER随机图和WS小世界模型忽略了实际网络的两个重要特性&#xff1a; &#xff08;1&#xff09;增长特性&#xff1a;即网络的规模是不断扩大的。例如每个月都会有大量的新的科研文…

2019年互联网公司月饼哪家强?阿里、百度、网易等14家中秋月饼盘点

一年一度的中秋节日马上到来&#xff0c;"八月十五月儿圆&#xff0c;中秋月饼香又甜"&#xff0c;没有月饼的中秋节是不完整的。而在互联网公司&#xff0c;月饼已然成为福利和文化的象征。特别是一些互联网大厂&#xff0c;在月饼设计上特别用心。今天&#xff0c;…

黑芝麻智能与上汽通用五菱签署战略合作协议;亚马逊广告发布一系列全新广告解决方案 | 全球TMT...

国内市场 黑芝麻智能与上汽通用五菱签署战略合作协议。双方在车规级自动驾驶计算芯片、视觉感知算法等方面展开紧密合作。上汽通用五菱和黑芝麻智能将基于华山二号A1000系列自动驾驶计算芯片、FAD全自动驾驶平台、山海人工智能开发平台等一系列开发工具&#xff0c;结合黑芝麻智…

如何处理投递的邮件被趋势RBL拦截的问题

外发邮件时&#xff0c;对方未收到&#xff0c;查询日志&#xff0c;报错如下&#xff1a; ……..blocked_using_Trend_Micro_RBL._Please_see…… 亚信安全使用的垃圾邮件地址库为国际的MAPS库&#xff0c;您可以通过&#xff1a;https://www.ers.trendmicro.com/ 右侧的IP Re…

持续保持逆势增长,亚信科技带给我们哪些启示?

面对逆境仍然能够持续保持业绩稳步增长&#xff0c;亚信科技可以带给我们哪些启示和借鉴&#xff1f; 逆势增长的亚信科技 众所周知&#xff0c;由于三年疫情带来的巨大冲击以及各种“黑天鹅”事件频发&#xff0c;近年来许多企业的财务报表都乏善可陈。 然而就是在这样复杂的外…

从雅虎被黑事件看在线数据的保护

根据最近雅虎被黑事件我们都能了解些什么&#xff1f;10 大最常见密码&#xff0c;其中“123456”终于胜过了 2011 年人民群众最喜爱的密码冠军“password”&#xff0c;而按照键盘上字母排列顺序的“qwert”也再次入围。 当您注册网站服务时&#xff0c;是否也会使用常见的单…

JVM——垃圾回收算法

1. 概述 垃圾收集&#xff0c;不是Java语言的伴生产物。早在1960年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题&#xff1a; 哪些内存需要回收&#xff1f; 什么时候回收&#xff1f; 如何回收&#xff1f; 1.1. 面…

安全世界 5正当时:亚信安全2020第五空间战略发展高峰论坛举行

点击上方关注我们! 11月15日&#xff0c;由亚信安全主办的“安全世界 5正当时”2020第五空间战略发展高峰论坛在北京盛大举行。来自政府、运营商、金融和能源等关键信息基础设施行业的负责人&#xff0c;生态合作伙伴出席本次活动&#xff0c;“共启安全数字世界”&#xff0c;…

趋势科技年度巨献 《2020》反黑大片

《2020》是趋势科技根据 ICSPA 的「2020 项目」报告所改编成的影片,描述一个不久即将发生的未来世界。这些影片以虚构的故事呈现该报告当中所描绘的社会变迁与科技演进,我们将告诉您移动及云安全技术的演进如何影响人与人之间以及人与世界的互动,还有人们如何工作以及如何认…

亚信安全走过“融合、突破”元年 探索网络安全的未来

2016年12月16日&#xff0c;云与大数据安全技术厂商亚信安全在京召开“亚信安全1周年暨2017战略媒体沟通会”。本次会议指明了不断演化的全球网络威胁及国家网络安全战略驱动下的产业发展源动力&#xff0c;回顾总结了亚信安全在2016年成立元年对核心竞争力塑造的融合之力&…

摆脱科技僵尸,回归生龙活虎

你身旁有这样无法抗拒尝试新科技的家人吗?半夜不睡觉,守着闪烁蓝光的手机、平板和其他夜猫子一起按赞、分享、留言和发短信。如果这听起来很像你或你的家人&#xff0c;这里有简单四步计划来帮助你减少科技消耗。 1.在你准备拥抱枕头前的3到4小时,停止所有的网络活动 英国睡眠…

亚信安全走过“融合、突破”元年 透露人工智能创新技术战略

近日&#xff0c;亚信安全在京召开“亚信安全1周年暨2017战略媒体沟通会”。本次会议指明了不断演化的全球网络威胁及国家网络安全战略驱动下的产业发展源动力&#xff0c;回顾总结了亚信安全在2016年成立元年对核心竞争力塑造的融合之力&#xff0c;突破之道。同时&#xff0c…

趋势科技4月移动客户端病毒报告

2014年4月移动客户端安全威胁概况 截至2014年4月30日,中国区移动客户端病毒码1.669.60,大小9,792,484字节,可以检测病毒约221万个。移动客户端病毒约12万个。 趋势科技移动客户端病毒码中排名前十的病毒家族: 趋势科技移动客户端4月新增病毒码中排名前十的病毒家族: 趋势…

中国互联网二十四年红黑史

作者 | 刘煜 转自一点财经 总有一种互联网时代到达拐角的感觉。 但不知道是到底是因为自身敏感&#xff0c;还是狼来了的条件反射&#xff0c;我们对未来&#xff0c;总是会突然欣喜之后又毫不在乎。 直播答题分钱与区块链和 P2P 没有接得住关于互联网继续狂欢的愿望&#xff0…

迎战APT 亚信安全发布高级威胁治理XDR战略

从网络病毒泛滥到APT攻击持续升级&#xff0c;从黑客刷存在感&#xff0c;到导致用户数据资产大量泄露的黑产兴起&#xff0c;APT&#xff08;高级持续性威胁&#xff09;堪称是在网络空间里进行的军事对抗。攻击者会长期持续地对特定目标进行精准打击。就像你家里隐藏了一个小…

中国四大骨干网和三大运营商网络是什么关系?

中国四大骨干网和三大运营商网络是什么关系&#xff1f; 文章目录 介绍Q1: 中国四大骨干网是什么&#xff1f;Q2: 和三大网运营商的关系是什么呢&#xff1f;Q3&#xff1a; 另外3个对个人用户开放使用吗&#xff1f;如何盈利&#xff1f; 中国四大骨干网络1、 中国科技网&…

亚信Internet中国

&#xff08;亚信创始人田溯宁&#xff09; 本文写于1999年。 现阶段&#xff0c;中国Internet上的商业价值远没有想象的那么大&#xff0c;所以&#xff0c;在中国率先成功的Internet企业是亚信这样从事Internet基础建设的公司。 美国也一样&#xff0c;最成功的Internet企业是…