在网络科学里面有单层的小世界网络,随机网络和无标度网络,在python和matlab中都提供了非常好的函数来供我们使用。但是当我们需要构造多层网络的时候,就需要我们自己来进行构造。本文就是把单层网络里面最简单的随机网络构造在多层网络的层内。主要是用来python里面的networkx库,下面给出代码。

# -*- coding: utf-8 -*-
"""
Created on Fri Jun 14 21:01:29 2019@author: Administrator""""""
随机网络是由一些节点通过随机连接而组成的一种复杂网络。
随机网络有两种等价方法(1).ER模型:给定N个节点,最多可以存在N(N-1)/2条边,
从这些边中随机选择M条边就可以得到一个随机网络,
且每一种可能的概率相同(2).二项式模型:给定N个节点,每一对节点以概率p进行连接,
这样,所有连线的数目是一个随机变量,其平均值为
M = pN(N-1)/2""""""层内节点连接的算法思想介绍:
此算法就是为了模拟随机网络里面的二项式模型
每一次每个在给定的节点总数nodes之间的任意两个节点都有连接的可能
即要模拟到随机网络的随机性。在给定的概率为p的情况之下,
即每两个节点之间连接的概率为p,nodes个节点之间的连边数目是一个随机变量,
平均值为 M = pN(N-1)/2""""""层间邻接矩阵产生的算法思想介绍:由于每一层内的标号都是1.2....n,
所以当上下两层进行连接的时候,会产生上层的1和下层的1进行连接的这种情况。
在构造邻接矩阵的时候会出现情况,所以在对邻接矩阵进行存储的时候,
每一层的下标会进行改变,比如第一层的还是为1,2,3....n
但是第二层的时候,1号下标会进行改变,改变的规则为每一层的下标会对前面所有层的下标进行累计
比如:第二层的1号为,(第二层的1号下标) = 1 + (2 - 1)*len(layer_nodes),
其中2为第2层层数,1为第1层层数。layer_nodes为每一层的节点数目,
当每一层有4个节点的时候,(第二层的1号下标) = 5 。""""""整个网络的邻接矩阵构造思想介绍:还是仿照单层的思想,两个节点之间有边则为1,没有边则为0,
比如一个多层网络存在三层的话,则第一层和第二层存在边的话,
则为1,不存在边的话,则为0.但是第一层和第三层之间肯定是
不存在连边的,所以全部为0.分别为整个网络添加层内和层间的连边,
即可以完成整个多层邻接矩阵的构造"""import networkx as nx
import random
import matplotlib.pyplot as plt
import numpy as np#node_number为节点总数,layer_number为层数
#p为层间的连接概率def ER_ER_MultilayerNetwork(node_number,layer_number,p,G):#用来存储层间的邻接矩阵filename = "test.txt"#用来存储整个网络的邻接矩阵filename1 = "test2.txt"#用来存储层间的邻接矩阵filename2 = "test3.txt"with open(filename,"w") as files:files.truncate()with open(filename1,"w") as file1s:file1s.truncate()with open(filename2,"w") as file2s:file2s.truncate()#全部输出np.set_printoptions(suppress=True, threshold=1e10)#添加每一层的节点nodes = list(range(1,node_number+1))#添加层数layers = list(range(1,layer_number+1))#用来存储整个多层网络的边edges2_list = []#产生一个空图,来存储整个网络所有的节点。从而产生整个网络的邻接矩阵G2 = nx.Graph()G2.add_nodes_from(list(range(1,node_number*layer_number + 1)))#print(list(range(1,node_number*layer_number + 1)))#根据算法思想来添加层内的边数for layer in layers: print("第"+str(layer)+"层层内的邻接矩阵为:")print(nx.to_numpy_matrix(G))with open(filename2,"a") as file2:file2.write("第"+str(layer)+"层层内的邻接矩阵为:\n")file2.write(str(nx.to_numpy_matrix(G)) + "\n")#根据算法思想来添加层间的边数for layer in layers: #用来存储每一个图的边edges_list = [] #产生一个空图,来存储层间的图,从而产生邻接矩阵G1 = nx.Graph()G1.add_nodes_from(list(range(1,node_number * 2 + 1)))length = len(nodes)#nodes个节点之间连边的数目m = int(p*length*(length - 1)/2)values = list(range(1,m+1))  for value in values:#这个循环是用来去掉层内的自环和重边while(True):   count = 0#层内连接的第一个节点first = random.randint(1,length)# print("first:" + str(first))#这个循环用来解决自环问题while(True):#层内连接的第二个节点last = random.randint(1,length)if(last != first):# print("last:" + str(last))break #这个循环用来去掉重边for edges in edges_list:if((first == edges[0] and last == edges[1]) or (first == edges[1] and last == edges[0])):breakelse:count = count + 1# print(count)if(count == len(edges_list)):breakedge = (first,last)          edges_list.append(edge)if layer < layer_number:G1.add_edge(first,last + node_number)edge2 = (first + node_number * (layer - 1), last + node_number *  layer )edges2_list.append(edge2)G2.add_edges_from(edges2_list)if(layer < layer_number):with open(filename,"a") as file1:str1 = str(layer) + "和" + str(layer + 1) + "层之间的邻接矩阵为:\n" print(str1)file1.write(str1)print(nx.to_numpy_matrix(G1))file1.write(str(nx.to_numpy_matrix(G1)) + "\n")print("整个网络的邻接矩阵如下:")print(nx.to_numpy_matrix(G2)) with open(filename1,"a") as file3:file3.write("整个网络的邻接矩阵如下:\n")file3.write(str(nx.to_numpy_matrix(G2)) + "\n")def network():#随机网络#G = nx.erdos_renyi_graph(200,0.8)#小世界网络#G = nx.watts_strogatz_graph(200, 4, 0.8)#BA网络G = nx.barabasi_albert_graph(200,8)ER_ER_MultilayerNetwork(200,3,0.9,G)network()

由于使用的是对邻接矩阵进行拼接的方式,所以整个网络的邻接矩阵并不是完整的,需要把相应部分的邻接矩阵添加进去。这里只是给出了随机网络构造在层内的构造思想。

python来构建多层网络相关推荐

  1. python画多层网络_绘制多层n

    我想用Python绘制一个多层网络.预期的图表如下所示: 我想用Python的Multinetx绘制这个网络.这是我的命令:import Multinetx as mx import matplotl ...

  2. python画多层网络_基于Python的多层网络可视化包Multinetx

    之前记录过基于R语言和Octave的多层网络可视化工具,但安装起来比较麻烦,发现Github上有基于Python的版本,提供了supra-adjency和多关系网络可视化,直接看:https://gi ...

  3. python项目构建_通过构建4个项目来学习Python网络

    python项目构建 The Python programming language is very capable when it comes to networking. We've releas ...

  4. 某学校有计算机主机1300台,网络互联技术与实践第14章:构建基于静态路由的多层网络.ppt...

    网络互联技术与实践第14章:构建基于静态路由的多层网络 * * * * * * * * * * 14.5 扩展知识 14.5.3 中小型园区网设计 2. 中型园区网 FE连接客户机 第3层交换 第2层 ...

  5. python restful django_Python构建RESTful网络服务[Django篇:使用PostgreSQL替代SQLite]

    文章提要:安装PostgreSQL 用PostgreSQL取代SQLite作为Django的模型数据库 使用Python操作PostgreSQL 使用Django模型类操作PostgreSQL 先导文 ...

  6. as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]

    系列文章介绍 本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务.Django官方教程地址https://docs.djangoproject.com/zh-han ...

  7. 使用Scrapy构建一个网络爬虫

    记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考虑到各种特殊情形, ...

  8. 神经网络:多层网络与C++实现

    相关源码可参考最新的实现:https://github.com/ronnyyoung/EasyML ,中的neural_network模块,后持续更新,包括加入CNN的结构. 一.引言 在前一篇关于神 ...

  9. Python黑客编程3网络数据监听和过滤

    课程的实验环境以下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      触及到的主要python ...

最新文章

  1. python3如何使用mysql_python3怎么用sqlalchemy操作mysql
  2. 设计模式 日志系统设计_模式:我们设计系统的故事
  3. redmine只是管理插件redmine_knowledgebase升级到0.4.0
  4. SpringBoot整合Jersey2.x实现文件上传API
  5. echo 单引号和双引号
  6. python基本代码教程-(Python基础教程之三)Python代码中添加注释
  7. kickstart_2018_round_H_C Let Me Count The Ways
  8. 2012年之前Mac Book pro 安装新系统macOS 10.15 Catalina 制作U盘启动盘
  9. 漫谈工业软件(4)-关于开源工业控制软件
  10. 魔兽世界服务器修改模型,修改模型教程!
  11. csma研究背景_前言 自制8位计算机 项目背景介绍
  12. 程序员必备的10个B站优质UP主!
  13. html5绘制心形图案,HTML5/Canvas 渐变色彩的心形图案
  14. 扣哒世界入选第33届国际信息学奥赛IOI专项赛
  15. HashMap源码解析——构造方法
  16. python指数函数表示_python实现画出e指数函数的图像
  17. NLP第四范式:Prompt概述【Pre-train,Prompt(提示),Predict】【刘鹏飞】
  18. 54、 按之字形顺序打印二叉树
  19. Enumeration
  20. Java项目:考试在线报名管理系统(java+SSM+HTML+JS+jsp+mysql)

热门文章

  1. ERROR: Minions returned with non-zero exit code
  2. Atitit.执行cli cmd的原理与调试
  3. 第四章:更多的bash shell命令
  4. nginx 参数、变量和例子
  5. Hexo Reload in new Mac
  6. 图解exports 和 module.exports
  7. 艰困之道中学到的经验教训
  8. Android 获取系统或SDCARD剩余空间信息(转)
  9. 【CAM应用】谈CAM软件在实际生产中的应用举例
  10. 好男人往往找不到女朋友