当前位置: 首页 > news >正文

复杂网络入门到精通5:网络动力学

  • 本文为《复杂网络仿真入门到精通》系列第5篇。
    前几篇主要介绍了网络的结构特征,这一篇我们将正式进入网络动力学领域——让网络“动”起来。

系列文章:

  • 系列合集
  • 下一篇预告:网络鲁棒性分析

给大家推荐一个在线复杂计算平台, 欢迎大家进行体验
复杂网络分析平台

支持:

  • AI 智能报告生成 上传邻接矩阵文件;
  • 自动构建网络, 指标一键计算与可视化;
  • 网络鲁棒性分析(节点/边攻击)
  • 级联失效模型分析

一、什么是网络动力学?

网络动力学研究的是:

在一个由节点和边组成的系统中,状态如何随时间演化。

典型的研究问题包括:

  • 传染病在社交网络中的传播;
  • 信息在社交平台上的扩散;
  • 电力网络或神经网络的同步;
  • 系统中失效的传播。

抽象公式:
xi(t+1)=f(xi(t),{xj(t)}j∈Ni)x_i(t+1) = f(x_i(t), \{x_j(t)\}_{j \in N_i}) xi(t+1)=f(xi(t),{xj(t)}jNi)

其中:

  • xi(t)x_i(t)xi(t):节点 iii 在时刻 ttt 的状态;
  • NiN_iNi:与节点 iii 相连的邻居集合;
  • f(⋅)f(\cdot)f():状态更新规则。

二、SIR 传染病模型概述

SIR 模型是网络动力学中最经典的传播模型。
每个节点有三种状态:

状态含义颜色
S易感者(Susceptible)灰色
I感染者(Infected)红色
R康复者(Recovered)绿色

状态转移规则:
S+I→β2I,I→γRS + I \xrightarrow{\beta} 2I, \quad I \xrightarrow{\gamma} R S+Iβ2I,IγR

  • 感染率 β\betaβ:感染者以概率传播给邻居
  • 康复率 γ\gammaγ:感染者以概率康复

三、Python 实现

下面是一个简单可复现的 Python 版本,用于模拟传播过程:

import networkx as nx
import random
import matplotlib.pyplot as plt# 构建网络
G = nx.erdos_renyi_graph(50, 0.05)# 初始化节点状态
state = {node: 'S' for node in G.nodes()}
state[random.choice(list(G.nodes()))] = 'I'beta = 0.3
gamma = 0.1
steps = 30# 仿真
for t in range(steps):new_state = state.copy()for node in G.nodes():if state[node] == 'I':for nbr in G.neighbors(node):if state[nbr] == 'S' and random.random() < beta:new_state[nbr] = 'I'if random.random() < gamma:new_state[node] = 'R'state = new_state.copy()# 绘图color_map = {'S': 'skyblue', 'I': 'red', 'R': 'gray'}colors = [color_map[state[n]] for n in G.nodes()]nx.draw(G, node_color=colors, with_labels=False)plt.title(f'Time step {t}')plt.pause(0.3)plt.clf()

四、MATLAB 实现(直接输出仿真图)

MATLAB 版本可以直接显示传播过程的静态图或逐步演示:

%% 复杂网络 SIR 模型仿真(MATLAB 可视化示例)
clc; clear; close all;%% 网络参数
N = 50;           % 节点数
p = 0.07;         % ER 网络连边概率
steps = 30;       % 仿真步数%% 构建随机网络(ER 网络)
G = rand(N) < p;
G = triu(G,1);    % 只保留上三角
G = G + G';       % 对称邻接矩阵%% 初始化节点状态
state = repmat("S", N, 1); % 全部初始为易感者
state(randi(N)) = "I";     % 随机选择一个感染者%% SIR 模型参数
beta = 0.3;   % 感染率
gamma = 0.1;  % 康复率%% 节点布局(圆形)
theta = linspace(0, 2*pi, N+1);
pos = [cos(theta(1:N))', sin(theta(1:N))'];%% 定义颜色映射
color_map = containers.Map(["S","I","R"], ...{[0.7 0.7 0.7], ...  % S 灰色[1 0.2 0.2], ...    % I 红色[0.2 0.8 0.2]});    % R 绿色%% 仿真循环
figure('Position',[100 100 600 600]);
for t = 1:stepsnew_state = state;% 状态更新for i = 1:Nif state(i) == "I"neighbors = find(G(i,:));for j = neighborsif state(j) == "S" && rand < betanew_state(j) = "I";endendif rand < gammanew_state(i) = "R";endendendstate = new_state;% 绘制网络clf;gplot(G, pos, 'k-');  % 绘制连边hold on;% 每个节点的颜色node_colors = zeros(N,3);for k = 1:Nnode_colors(k,:) = color_map(state(k));endscatter(pos(:,1), pos(:,2), 100, node_colors, 'filled');title(['SIR 网络仿真, t = ' num2str(t)]);axis equal;axis off;drawnow;
end

每次运行都会生成一个动态展示,节点颜色随状态变化,可直观展示传播过程。


五、总结与延伸

  • 网络动力学让静态网络“动”起来,能够模拟现实中各种传播过程。

  • Python 适合逻辑演示与快速实验,MATLAB 适合可视化展示。

  • 后续可拓展:

    • 不同网络拓扑(无标度、小世界、随机网络)下的传播比较
    • SI、SIS、SEIR 等模型
    • 异质节点参数或动态网络演化

下一节预告

《复杂网络仿真入门到精通6:鲁棒性分析》
学习网络在攻击或故障下的稳定性。

http://www.dtcms.com/a/597532.html

相关文章:

  • 【论文阅读】PhotoBot: Reference-Guided Interactive Photography via Natural Language
  • Alpha稳定分布概率密度函数的MATLAB实现
  • 国内做网站好的公司淄博做网站小程序的公司
  • Python处理 “列表套字典” 结构JSON数据的三种方式对比
  • 广州市官网网站建设公司详情页模板尺寸
  • 深度学习_神经网络_损失函数基础
  • Centos7.9创建新用户,授权远程登录,禁用root远程登录
  • 柔性软风管-连续测量十分便利
  • 手机网站优化排名首页浏阳seo
  • 辽宁住房与城乡建设厅网站网站单子
  • python类的内置函数
  • chrome的Network上经常看不到网络请求,解决方案
  • 复现------
  • 专业网站建设制作多少钱江门网站建设技术托管
  • 基于MATLAB的POD-DMD联合分析实现方案
  • saas 平台架构做网站简述建设一个网站的具体步骤6
  • 均安公司网站建设wordpress tag做专题
  • 邯郸手机网站开发价格怎样找做淘宝客的网站
  • Linux系统编程——进程通信之无名管道
  • 基于springboot高校办公室行政事务管理系统【带源码和文档】
  • Amplitude使用记录
  • 云南建网站需要多少钱莱芜雪野湖别墅
  • 慢查询日志在性能优化中的价值
  • ADB点击实战-做一个自动点广告播放领金币的脚本app(中)
  • 网站优化关键词排名wampserver做网站
  • 中国建设银行网站首不能制作网页的软件有哪些
  • PostgreSQL insert 偶发变慢的原因分析 —— 从缓存击穿到系统 I/O
  • 简单的网站php开发教程高质量外链购买
  • MatplotlibDeprecationWarning
  • 织梦如何做网站地图西双版纳傣族自治州