复杂网络-无标度网络BA模型「建议收藏」

复杂网络-无标度网络BA模型「建议收藏」%建立无标度网络BA模型%第一部分,设立基础数据,四个参数m_original=50;%未增长前网络节点个数m_originalm_add=3;%每次添加一个点增加的边数m_addm_after_growth=52;%增长后的网络规模m_after_growthpp=3;%pp:初始网络节点的连接选择%pp=1节点均孤立…

大家好,欢迎来到IT知识分享网。

%建立无标度网络BA模型
%第一部分,设立基础数据,四个参数
m_original=50;           %未增长前网络节点个数m_original
m_add=3;                 %每次添加一个点增加的边数m_add
m_after_growth=52;       %增长后的网络规模m_after_growth
pp=3;                    %pp:初始网络节点的连接选择
                         %pp=1 节点均孤立  
                         %pp=2 节点间构成完全图  
                         %pp=3 随机连接一些边(随机图)
 
%第二部分,得到m_original个点的横纵坐标(初始网络的横纵坐标)
x=100*rand(1,m_original);
y=100*rand(1,m_original);
%rand(1,n)是生成一行n列的列向量,其中每个数的值是0-1,再乘上100,相当于把点分布到100*100的二维空间中
 

%第三部分,通过pp值得到初始网络(初始邻接矩阵A)的状态
A=zeros(m_original);                        %初始化邻接矩阵A为全0矩阵
switch pp                                   %通过选择pp,确定A的初始状态
    case 1   %节点孤立图
        A=zeros(m_original);
    case 2   %节点完全图
        A=ones(m_original);
    case 3   %节点随机图
        for i=1:m_original
            for j=i+1:m_original     %操纵上半角矩阵
                p=rand(1,1);         %生成0-1随机数
                if p>0.5             %以0.5的概率生成边
                    A(i,j)=1;
                    A(j,i)=1;
                end
            end
        end
end
 
%第四部分,生成增加的节点和边
for k=m_original+1:m_after_growth    %一共生成m_after_growth-m_original+1个节点
    M=k-1;                           %当前要生成第k个节点,那么针对的图的规模就是k-1
    p=zeros(1,M);                    %初始化每个点的连接概率为0
    
    %随机生成第k个节点的坐标
    x_now=100*rand(1,1);
    y_now=100*rand(1,1);
    x(k)=x_now;
    y(k)=y_now;
 
    for i=1:M
        p(i)=(length(find(A(i,:)==1))+1)/(length(find(A==1))+M);
    end
    %这里就是前面说的修正孤立节点连接概率为0的方法
    p
    pp=cumsum(p);    %第一轮的叠加概率计算
    pp
    
%第五部分,初始化访问数组
    visit=zeros(1,M);      %初始化访问数组为全0数组(1行M列)
    for i=1:m_add          %开始生成m_add条边
        random_data=rand(1,1);
        random_data
        aa=find(pp>=random_data); jj=aa(1);  %通过上方介绍的叠加概率+随机数的方法,得到随机连边
         
        A(k,jj)=1;
        A(jj,k)=1;
        visit(jj)=1;       %标记访问
        visit              %显示访问情况
        degree=zeros(1,M); %给出度数组来记录变化后的度值,以达到访问过度数假装变成0的目的
        total_degree=0;    %总度数
        for ii=1:M
            if visit(ii)==1
                p(ii)=0;
                degree(ii)=0;
            else
                degree(ii)=length(A(i,:)==1)+1;   %如果访问过度数为0,没有就照原来的方法
            end
            total_degree=total_degree+degree(ii); %总度数计算
        end
        for iii=1:M
            p(iii)=degree(iii)/total_degree;      %新一轮的p数组计算
        end
       
        p
        pp=cumsum(p);                             %新一轮的叠加概率计算
        pp
    end
end
A
plot(x,y,’ro’,’MarkerEdgeColor’,’g’,’MarkerFaceColor’,’r’,’MarkerSize’,8);  %画出点
hold on;     %保持住窗口
for i=1:m_after_growth
    for j=i+1:m_after_growth                                %按邻接矩阵上三角矩阵画出连线
        if A(i,j)~=0                                        %~=0是不等于0的意思,就是有边,就画出来
            plot([x(i),x(j)],[y(i),y(j)],’linewidth’,1.2);  
        end
    end
end
 
axis equal;  %横纵坐标相等
hold off;    %停止保存窗口
    
       
                

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25452.html

(0)

相关推荐

发表回复

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

关注微信