生物医学网络科学Biomedical Network Science
Example03 / 11

模块化网络上的分层同步

所属专题
同步与协同动力学
下载
Notebook · .py

4 个社团、每个 40 个节点,社团内连接概率 0.3,社团间 0.005。所有振荡器固有频率相同(=0), 初始相位随机。记录每个时刻的“社团内平均序参量”(4 个社团各自的 r 取平均)和“全局序参量”。 解读:社团内部先同步(r_local 很快接近 1),全局同步要慢得多。

Output输出图

模块化网络上的分层同步:输出图 1

Output文字输出

t=20 时 r_local = 0.98, r_global = 0.46
t=150 时 r_local = 1.00, r_global = 0.99

Code代码

# 4 个社团、每个 40 个节点,社团内连接概率 0.3,社团间 0.005。所有振荡器固有频率相同(=0),
# 初始相位随机。记录每个时刻的“社团内平均序参量”(4 个社团各自的 r 取平均)和“全局序参量”。
# 解读:社团内部先同步(r_local 很快接近 1),全局同步要慢得多。
import numpy as np
import networkx as nx
import scipy.sparse as sp
import matplotlib.pyplot as plt

sizes = [40, 40, 40, 40]
G = nx.random_partition_graph(sizes, 0.3, 0.005, seed=3)
A = sp.csr_matrix(nx.to_scipy_sparse_array(G, nodelist=range(G.number_of_nodes())))
labels = np.repeat(np.arange(len(sizes)), sizes)
theta = np.random.default_rng(1).uniform(0, 2 * np.pi, G.number_of_nodes())
K, dt, steps = 0.05, 0.1, 1500

r_local, r_global = [], []
for _ in range(steps):
    s, c = np.sin(theta), np.cos(theta)
    theta = theta + dt * K * (c * (A @ s) - s * (A @ c))
    z = np.exp(1j * theta)
    r_global.append(abs(z.mean()))
    r_local.append(np.mean([abs(z[labels == c_].mean()) for c_ in range(len(sizes))]))

t = np.arange(steps) * dt
print("t=20 时 r_local = %.2f, r_global = %.2f" % (r_local[200], r_global[200]))
print("t=%.0f 时 r_local = %.2f, r_global = %.2f" % (t[-1], r_local[-1], r_global[-1]))
plt.plot(t, r_local, label="within communities")
plt.plot(t, r_global, label="global")
plt.xlabel("time"); plt.ylabel("r"); plt.legend(); plt.title("Hierarchical synchronization")
plt.show()

Run在浏览器中运行

首次加载 Python 环境约需 20–40 秒;可以修改参数后重新运行。

模块化网络上的分层同步