%求一个网络的平均集聚系数:所有节点的CC之和/节点数目N
%方法一:节点的CC(聚类系数)=邻居实际相连的边/邻居间应该相连的边=邻居实际相连的边/(di*(di-1)/2。其中,di为节点i的度
%方法二:以节点i的邻居们为节点,构造邻接矩阵的子图。

%算法思路:
%(1)生成邻接矩阵
%(2)通过(1)可分析度分布、平均度
%(3)Floyd算法构造距离矩阵,分析平均最短路径距离
%(4)编写集聚系数算法
%(5)加循环,归纳统计性质

clc;                %清除当前区域的命令/清空命令窗口
clear;              %清空工作区变量
N=100;              % N为总节点数
a=100;              %a为循环次数
j=1;                %j为p值递增标志

for p=0:0.01:1          % p=0.1;
    degree=zeros(N,a);  %degree包含所有网络所有节点的度分度k
    a_k=zeros(a,1);     %a_k包含所有网络的平均度
    a_D=zeros(a,1);     %a_D包含所有网络的平均最短距离D
    sum_CC=zeros(N,a);  %sum_CC是所有网络所有节点的(邻居实际相连的边数)
    a_CC=zeros(N,a);    %求所有网络所有节点的集聚系数
    ave_CC=zeros(a,1);  %一个网络的集聚系数

    for i=1:a
        adjmex=zeros(N,N);  %adjmex为邻接矩阵 邻接矩阵(adjacent matrix)
        for m=1:N
            for n=m+1:N
                if(rand(1,1)<p)
                    adjmex(m,n)=1;
                    adjmex(n,m)=1;
                end
            end
        end

%求网络的度分布
for b=1:N
    degree(b,i)=sum(adjmex(b,:));
end

%求网络的平均度
a_k(i,1)=sum(adjmex(:))/N;

%求网络的平均最短距离路径:节点对之间距离之和/节点对数目。
%其中,不可达两点距离为0,节点自身与自身距离为0,节点对数目为(N*(N-1)/2)
D=adjmex;   %D为距离矩阵
D(find(D==0))=inf;
for k=1:N       %Floyd算法求解任意两点的最短距离
    for e=1:N
        for f=1:N
            if D(e,f)>D(e,k)+D(k,f)
                D(e,f)=D(e,k)+D(k,f);
            end
        end
    end
    D(k,k)=0;
end
D(find(D==inf))=0;
a_D(i,1)=(sum(D(:))/2)/(N*(N-1)/2);

%求网络的平均集聚系数:所有节点的CC之和/节点数目
%节点的CC(聚类系数)=邻居实际相连的边/邻居间应该相连的边=邻居实际相连的边/(di*(di-1)/2)
%其中,di为节点i的度
for k=1:N
    num_k=sum(adjmex(k,:));
    if num_k==0||num_k==1   %若节点i度为0或1,则其没有CC
        sum_CC(k,i)=0;
    else
        for e=1:N
            for f=e+1:N
                if adjmex(k,e)+adjmex(k,f)==2 && adjmex(e,f)==1
                    sum_CC(k,i)=sum_CC(k,i)+1;
                end
            end
        end
        a_CC(k,i)=sum_CC(k,i)/((num_k)*(num_k-1)/2);
    end
end
ave_CC(i,1)=sum(a_CC(:,i))/N;
    end
aver_k(j,1)=sum(a_k(:))/a;       %求统计平均度
aver_D(j,1)=sum(a_D(:))/a;       %求统计平均最短距离
aver_CC(j,1)=sum(ave_CC(:))/a;   %求统计平均集聚系数
j=j+1;
end

%随p值变化统计特性的图
x = linspace(0,1,101);                %表示在0和101之间等间隔取1 例如x=linspace(x0,xn,xm)表示在x0和xn之间等间隔取m个数
figure;                               %控制窗口数量

subplot(3,1,1);                       %指一个三行一列的图中从左到右从上到下的第一个位置
plot(x,aver_k);                       %函数将以x为横轴,绘制aver_k
xlabel('p');                          %x轴为概率p
title('随机网络的平均度');             %表头命名为随机网络的平均度

subplot(3,1,2);                       %指一个三行一列的图中从左到右从上到下的第二个位置
plot(x,aver_D);                       %函数将以x为横轴,绘制aver_D
xlabel('p');                          %x轴为概率p
title('随机网络的平均最短路径距离');   %表头命名为随机网络的平均最短路径距离

subplot(3,1,3);                       %指一个三行一列的图中从左到右从上到下的第三个位置
plot(x,aver_CC);                      %函数将以x为横轴,绘制aver_CC
xlabel('p');                          %x轴为概率p
title('随机网络的平均集聚系数');       %表头命名为随机网络的平均集聚系数

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐