主要是调用调用networkx和random库(可以直接构建网络、然后利用random随机生成相应数据)
plt.show()可以生成相应的图片
小世界网络中要注意邻接个数必须是偶数
版本1:直接生成型

import networkx as ne
import random
from matplotlib import pyplot as plt
from networkx import shell_layout
from networkx.generators import random_graphs

def efficiency(G):
    for u in G.nodes():  # 遍历流量图F的每个点
      sumeff = 0
    path = ne.shortest_path_length(ws,source=u)  # 在网络G中计算从u开始到其他所有节点(注意包含自身)的最短路径长度。如果两个点之间没有路径,那path里也不会存储这个目标节点(比前面的代码又省了判断是否has_path的过程)
    for v in path.keys():  # path是一个字典,里面存了所有目的地节点到u的最短路径长度
        if u != v:  # 如果起终点不同才累加计算效率
            sumeff += 1 / path[v]
            result = (2/(n*(n-1))) * sumeff  # 计算网络剩余效率
            return result

n=random.randint(8,200)#小世界网络中的节点数(随机生成的整数,(上限,下线))
k1=random.randint(2,20)#x先随机生成一个小于节点数的数
if k1%2 ==0:
    k=k1
else:
    k=k1-1
p=random.random()#小世界网络中的加边概率(随机生成0-1之间)
ws=random_graphs.watts_strogatz_graph(n,k,p)

print('小世界网络图中的节点总数:', n)
print('小世界网络图中要连的邻接个数:', k)
print('小世界网络的随机加边概率p为:{:.2f}'.format(p))
dws=ne.degree(ws)#获取小世界网络的度
bws=ne.betweenness_centrality(ws)#介数
cws=ne.core_number(ws)#K壳
ccws=ne.clustering(ws)#聚类系数
ccf=efficiency(ws)
print('输出的小世界网络度为:',dws)
print('输出的小世界网络介数为:',bws)
print('输出的小世界网络介数k壳为:',cws)
print('输出的小世界网络聚类系数为:',ccws)
print('小世界网络的网络效率:',ccf)
ne.draw(ws,pos=shell_layout(ws),with_labels=False,node_size=30)
plt.show()
ne.write_pajek(ws,'ws.net')


#无标度网路
x=random.randint(8,200)#小世界网络中的节点数(随机生成的整数,(上限,下线))
y=random.randint(2,20)#x先随机生成一个小于节点数的数
wbd=random_graphs.barabasi_albert_graph(x, y)
ne.draw(wbd,pos=shell_layout(wbd),with_labels=False,node_size=30)
print('无标度网络中的节点总数:', x)
print('无标度网络中,每次加入的边数是:', y)
plt.show()
ne.write_pajek(wbd,'wbd.net')



#随机网络
m=random.randint(8,200)#小世界网络中的节点数(随机生成的整数,(上限,下线))
z=random.random()
ER=ne.erdos_renyi_graph(m,z)
ne.draw(ER,pos=shell_layout(ER),with_labels=False,node_size=30)
print('ER随机网络图中的节点总数:', m)
print('随机网络中随机加边的概率是{:.2f}'.format(z))
plt.show()
ne.write_pajek(ER,'ER.net')

小世界网络

用python自动生成网络配置_用python自动生成网络配置


无标度网络

用python自动生成网络配置_用python自动生成网络配置_02


随机网络

用python自动生成网络配置_用python自动生成网络配置_03


版本二:手动输入型

from random import random
import networkx as ne #导入建网络模型包,命名ne
import matplotlib.pyplot as plt #导入科学绘图包,命名mp
from networkx import shell_layout
from networkx.generators import random_graphs

#WS network graphy
print('请输入网络节点总数NETWORK_SIZE:')
NETWORK_SIZE=int(input())
print('请输入规则网络要连的邻接个数k:')
k=int(input())
print('请输入重连概率p:')
p=float(input())
ws=ne.watts_strogatz_graph(NETWORK_SIZE,k,p)
ps=ne.circular_layout(ws)#布置框架
ne.draw(ws,ps,with_labels=False,node_size=30)
plt.show()
ne.write_pajek(ws,'pajek.net')


print('请输入无标度网络节点总数x:')
x=int(input())
print('请输入规则网络要连的邻接个数t:')
y=int(input())
wbd=random_graphs.barabasi_albert_graph(x, y)
ne.draw(wbd,pos=shell_layout(wbd),with_labels=False,node_size=30)
ne.draw(wbd,ps,with_labels=False,node_size=30)
plt.show()

print('请输入随机网络节点总数m:')
m=int(input())
print('请输入随机网络节点总数z:')
z=int(input())
ER=ne.erdos_renyi_graph(m,z)
ne.draw(ER,pos=shell_layout(ER),with_labels=False,node_size=30)
plt.show()