无标度网络的生成模型

无标度网络的生成模型本文采用由 Barab si 和 Albert 于 1999 年提出的增长网络网络模型 BA 模型 在该模型中 网络初始时具有 m0 个节点 两两互连 之后每过一个时间单位增加一个新节点 新节点从当前网络中选择 m m m0 个节点与之连接 某节点被选中的概率与其节点度的大小成正比 可以证明当时间足够长时 按此规律增长的网络的度分布为幂指数等于 3 的幂律分布

在这里插入图片描述

1999 年 Barabási 和 Albert 提出了无标度网络模型(简称 BA 模型)。无标度网络的重要特征为: 无标度网络的节点度分布服从幂律分布。

无标度网络的度分布 p ( d ) p(d) p(d) 满足 p ( d ) ∼ d − α , p(d)\sim d^{-\alpha}, p(d)dα其中 d d d 代表度的大小, α \alpha α 为度分布的幂律指数。 真实网络 α \alpha α 值一般介于 2~3之间。

近年来越来越多的研究表明, 真实世界网络既不是规则网络, 也不是随机网络, 而是兼具小世界和无标度特性的复杂网络, 具有与规则网络和随机网络截然不同的统计特性。

本文采用的无标度网络生成模型是由 Barabási 和 Albert 于 1999 年提出的增长网络网络模型(BA 模型)。在该模型中,网络初始时具有 m 0 m_0 m0 个节点,两两互连。 之后每过一个时间单位增加一个新节点。新节点从当前网络中选择 m ( m ≤ m 0 ) m(m ≤ m_0) m(mm0) 个节点与之连接, 某节点 v i v_i vi 被选中的概率 p ( v i ) p(v_i) p(vi) 与其节点度 d i d_i di 的大小成正比,即 p ( v i ) = d i ∑ j d j p(v_i) = \frac{d_i}{\sum_j d_j} p(vi)=jdjdi经过 t 个时间单位后,网络中含有 m 0 + t m_0+t m0+t 个节点, m 0 ( m 0 − 1 ) / 2 + m t m_0(m_0-1)/2+mt m0(m01)/2+mt条边。可以证明当 t 足够大时, 按此规律增长的网络的度分布为幂指数等于 3 的幂律分布。

function scale_free(N,m0,m) % %param N: num of vertices 期望节点数 %param m0: num of initial vertices 初始边数 %param m: num of vertices a new node try to connect 新节点连接的边数 % tic; I = 2 ; %生成的网络个数,只为统计需要 realization_of_distribution = sparse( I , N ) ; for J = 1 : I format long; %初始化邻接矩阵,前m0个节点两两互连 adjacent_matrix = sparse( m0 , m0 ) ; parfor i = 1 : m0 for j = 1 : m0 if j ~= i adjacent_matrix( i , j ) = 1 ; end end end adjacent_matrix = sparse( adjacent_matrix ) ; % 计算当前节点度分布 node_degree = sparse( 1 , m0 ) ; for p = 1 : m0 node_degree( p ) = sum( adjacent_matrix( 1 : m0 , p ) ) ; end % 开始演化 for iteration = m0 + 1 : N total_degree = 2 * m * ( iteration - m0 -1 ) + m0*(m0-1) ; % m*2 degree_frequency = node_degree / total_degree ; cum_distribution = cumsum( degree_frequency ) ; choose = zeros( 1 , m ) ; for new_edge = 1:m r = rand(1) ; choose_edge = find( cum_distribution >= r ,1) ; while any(choose == choose_edge) r = rand(1) ; choose_edge = find( cum_distribution >= r,1) ; end choose(new_edge) = choose_edge; end for k = 1 : m adjacent_matrix( iteration , choose(k) ) = 1 ; adjacent_matrix( choose(k) , iteration ) = 1 ; end for p = 1 : iteration node_degree(p) = sum( adjacent_matrix( 1 : iteration , p ) ) ; end end number_of_nodes_with_equal_degree = zeros( 1 , N ) ; parfor i = 1 : N number_of_nodes_with_equal_degree(i) = length( find( node_degree == i ) ) ; end realization_of_distribution( J , : ) = number_of_nodes_with_equal_degree ; save(['adj_',num2str(J)],'adjacent_matrix'); end %{ %plot degree distribution 在双对数坐标下画图 average = sum( realization_of_distribution )/ ( I * N ); loglog( 1:N , average , '*' ) axis([1 N 0.0000001 0.9]) hold on; x = 1:N; y = 2 * m^2 * x .^ ( -3 ) ; loglog( x , y , 'r' ) ; % p(k)=2*m^2*k^(-3) %} toc; end 

人工生成网络的概率质量函数(网络节点数 N N N 分别为 50、 100、 200、 400)
在这里插入图片描述
图中直线为理论结果: p ( d ) = 2 m 2 d 3 p(d)=2\frac{m^2}{d^3} p(d)=2d3m2




在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204961.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午7:07
下一篇 2026年3月19日 下午7:08


相关推荐

  • 求复数的对数[通俗易懂]

    求复数的对数[通俗易懂]其实除了0以外,复数是都可以求解对数的。用欧拉公式可以简单的得到结果。

    2025年6月27日
    4
  • 遗传算法详解及代码实现

    遗传算法详解及代码实现遗传算法定义相关术语交叉变异产生子代完整过程遗传算法应用问题的提出与解决方案 袋鼠跳 问题爬山法 最速上升爬山法 模拟退火遗传算法遗传算法实现过程遗传算法的一般步骤遗传算法图解进化细节编码方法二进制编码浮点编码法符号编码法袋鼠染色体编码评价个体的适应度适应度函数 fitnessfunct 射杀一些袋鼠选择函数 selection 遗传染色体交叉 crossover 变异基因突变 Mutation 定义遗传算法 GeneticAlgor GA 起源于对生物系统所进行的计

    2026年3月20日
    1
  • oracle修改表名称索引丢失,修改表名索引约束触发器等对象不会失效[通俗易懂]

    oracle修改表名称索引丢失,修改表名索引约束触发器等对象不会失效[通俗易懂]修改表名后,索引、约束、触发器、comment、授权不会失效,这些对象的创建脚本中的表名会正常自动更改修改表名前,索引脚本如下CREATEINDEXCUX.CUX_MSC_RMP_SDCI_DTLS_N2170307ONCUX.CUX_MSC_RMP_SDCI_DTLS(LINE_ID)修改表名后,索引脚本如下CREATEINDEXCUX.CUX_MSC_RMP_SDCI_DTLS_N…

    2022年5月16日
    46
  • MySQL常用命令总结

    MySQL常用命令总结一.连接MySQL格式:mysql-h主机地址-u用户名-p用户密码或者:mysql-u用户名-p//回车后要求输入密码,密码不可见1、连接到本机上的MYSQL首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql-uroot-p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是如果-p后带有用

    2022年6月26日
    32
  • jenkins自动触发构建_为什么触发器有定时问题

    jenkins自动触发构建_为什么触发器有定时问题前言跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。jenkins的定时任务是用的crontab语法定时构建语法

    2022年7月28日
    21
  • Busybox的安装步骤[通俗易懂]

    Busybox的安装步骤[通俗易懂]一、下载busyboxwww.busybox.net/downloads/(busybox-1.17-0.tar/bz2)二、安装:1、修改Makefile文件:第175行交叉编译器CORSS_COMPILE2、makemenuconfig当出现如下错误时的解决办法:make[2]:***[scripts/kconfig/lxdialog/check…

    2022年7月16日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号