
Invariants émergents dans réseaux dynamiques : méta-pipeline bottom-up testable Auteur : Kevin FradierDate : 2026Licence : © 2026 Kevin Fradier — CC BY-NC-ND 4.0 Résumé Cette publication propose un pipeline bottom-up minimal et testable pour détecter des signaux émergents dans des réseaux dynamiques à partir de corrélations locales uniquement. L’objectif est de fournir un outil reproductible et indépendant de tout cadre théorique global, permettant de : Extraire des motifs locaux (cycles, sous-graphes connectés) Calculer des signaux émergents agrégés à partir de ces motifs Vérifier la robustesse des signaux face à des perturbations locales Visualiser le réseau et la distribution des signaux Les utilisateurs sont invités à tester, ces observables pour leurs propres applications, sans hypothèses additionnelles. Code Python : emergent_dynamics.py import numpy as np import networkx as nx import matplotlib.pyplot as plt from itertools import combinations class EmergentDynamics: def __init__(self, adjacency, states, motif_size=(2,3)): """ adjacency : np.array NxN Matrice d'adjacence du réseau states : np.array NxT États locaux simulés motif_size : tuple Taille minimale et maximale des motifs locaux """ self.A = adjacency self.states = states self.motif_size = motif_size self.motifs = [] self.signal = None def extract_motifs(self): nodes = list(range(self.A.shape[0])) self.motifs = [] for r in range(self.motif_size[0], self.motif_size[1]+1): for combo in combinations(nodes, r): sub = self.A[np.ix_(combo, combo)] if np.any(sub): self.motifs.append(list(combo)) return self.motifs def compute_signal(self, method="mean"): if not self.motifs: self.extract_motifs() vals = [] for m in self.motifs: S = self.states[m,:] if method=="mean": vals.append(np.mean(S)) elif method=="norm": vals.append(np.linalg.norm(S)) self.signal = np.mean(vals) if vals else 0 return self.signal def perturb_and_stabilize(self, noise_levels=[0,0.05,0.1], trials=50): stable_vals = [] for noise in noise_levels: trial_vals = [] for _ in range(trials): perturbed = self.states + np.random.normal(0, noise, self.states.shape) trial_vals.append(np.mean([np.mean(perturbed[m,:]) for m in self.motifs])) stable_vals.append(np.mean(trial_vals)) self.signal = np.mean(stable_vals) return self.signal def plot_network(self, node_colors=None, save_path=None): G = nx.from_numpy_array(self.A) pos = nx.spring_layout(G) plt.figure(figsize=(8,6)) nx.draw(G, pos, node_color=node_colors, cmap='coolwarm', node_size=25) plt.title(f"Réseau - Signal : {np.sign(self.signal)}") if save_path: plt.savefig(save_path, dpi=300) plt.show() def plot_signal_distribution(self, save_path=None): traces = [np.mean(self.states[m,:]) for m in self.motifs] plt.figure(figsize=(10,5)) plt.hist(traces, bins=15, color='skyblue', edgecolor='k') plt.axvline(np.mean(traces), color='r', linestyle='--', label='Moyenne') plt.title("Distribution du signal émergent") plt.xlabel("Signal local") plt.ylabel("Nombre de motifs") plt.legend() if save_path: plt.savefig(save_path, dpi=300) plt.show() if __name__=="__main__": np.random.seed(123) A = np.random.randint(0,2,(10,10)) states = np.random.choice([-1,1], size=(10,5)) pipeline = EmergentDynamics(A, states) pipeline.extract_motifs() sig = pipeline.compute_signal() sig_stable = pipeline.perturb_and_stabilize() print("Signal brute :", sig) print("Signal stabilisé :", sig_stable) pipeline.plot_network(node_colors=states[:,0], save_path="../figures/example_network.png") pipeline.plot_signal_distribution(save_path="../figures/example_signal.png") Licence : CC BY-NC-ND 4.0 © 2026 Kevin Fradier — Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 4.0 International (CC BY-NC-ND 4.0) Vous êtes libres de : - Partager — copier et redistribuer le matériel sous n’importe quel format - Attribution obligatoire Vous ne pouvez pas : - Utiliser à des fins commerciales - Modifier, transformer ou créer un dérivé README.md # Invariants émergents dans réseaux dynamiques : pipeline bottom-up testable ## Description Ce dépôt fournit un **pipeline minimal** pour détecter des signaux émergents dans des réseaux à partir de **corrélations locales uniquement**. Aucun cadre global n’est requis. ## Contenu - `code/emergent_dynamics.py` : code Python principal - `mini_dataset.npy` : mini-dataset simulé (10x10) - `figures/` : figures générées automatiquement - `LICENSE` : licence CC BY-NC-ND 4.0 ## Installation ```bash pip install numpy networkx matplotlib Utilisation rapide import numpy as np from code.emergent_dynamics import EmergentDynamics # Charger le mini-dataset A = np.load("mini_dataset.npy") states = np.random.choice([-1,1], size=(10,5)) # Initialiser pipeline pipeline = EmergentDynamics(A, states) pipeline.extract_motifs() signal = pipeline.compute_signal() signal_stable = pipeline.perturb_and_stabilize() print("Signal brute :", signal) print("Signal stabilisé :", signal_stable) # Générer figures pipeline.plot_network(node_colors=states[:,0], save_path="figures/example_network.png") pipeline.plot_signal_distribution(save_path="figures/example_signal.png") Notes Les données réelles sont hors dépôt pour raisons légales. Le mini-dataset permet de tester immédiatement toutes les fonctionnalités. Les utilisateurs peuvent tester, ce pipeline pour leurs propres applications. Licence © 2026 Kevin Fradier — CC BY-NC-ND 4.0
| selected citations These citations are derived from selected sources. This is an alternative to the "Influence" indicator, which also reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically). | 0 | |
| popularity This indicator reflects the "current" impact/attention (the "hype") of an article in the research community at large, based on the underlying citation network. | Average | |
| influence This indicator reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically). | Average | |
| impulse This indicator reflects the initial momentum of an article directly after its publication, based on the underlying citation network. | Average |
