Réalisé par Sylvain Hoffmann & Roni Kolukisayan
Tuteur de stage : M. Didier Mayou
Projet de stage à l'Institut Néel (CNRS)
Le réseau électrique est modélisé comme un graphe où :
- Nœuds (bus) : centrales, sous-stations, points de charge
- Arêtes (lignes) : lignes de transmission avec poids
- Signes (+1/-1) : encodent la direction du flux de puissance
- Poids (B) : susceptibilité des lignes
Le système est représenté par une matrice Hamiltonienne H satisfaisant :
H|ψ⟩ = P
où |ψ⟩ est le vecteur d'état (distribution de puissance) et P est la puissance injectée/extraite.
| Symbole | Description |
|---|---|
| β_i | Éléments hors-diagonale de la matrice tridiagonale |
| κ_i | Coefficients pour la reconstruction de ψ |
| q_i | Vecteurs de Lanczos (base orthonormée) |
| ψ | Distribution de puissance approximative |
| R_eff | Résistance effective entre source et puits |
Méthode itérative representant H dans la base de Krylov par les vecteurs de Lanczos :
Étapes :
- Initialisation : q₀ = 0, q₁ = vecteur source normalisé
- Itération : qᵢ₊₁ = (1/βᵢ₊₁) ⋅ (H·qᵢ − βᵢ·qᵢ₋₁)
- Calcul de βᵢ₊₁ = ‖qᵢ₊₁‖, puis normalisation
- Reconstruction de ψ via les coefficients κᵢ
Permet de calculer efficacement l'effet de la pérturbation par un regard local pour calculer les résistances effectives et d'identifier les lignes critiques.
stage/
├── utils.py # Classes et algorithmes principaux
├── european.ipynb # Notebook d'analyse du réseau européen
├── reseau_carre.ipynb # Notebook d'analyse du réseau carré
├── networks/ # Fichiers réseau PyPSA (.nc)
│ ├── elec_s_128.nc # Réseau 128 nœuds
│ ├── elec_s_512.nc # Réseau 512 nœuds
│ ├── elec_s_1024.nc # Réseau 1024 nœuds
└── web_client/ # Interface de visualisation (Flask)
Classe pour tester l'algorithme sur une grille carrée régulière.
grid = HamiltonianGrid(N=100, q_N=50, ix=0, iy=0, iw=1, ex=9, ey=9, ew=-1)
grid.create_network(grid_size=10)
grid.iterate_qs()Méthodes clés :
create_network(grid_size): crée la grille N×Niterate_qs(): exécute les itérations de Lanczoscalculate_effective_resistances(): calcule R_eff pour toutes les lignes
Classe pour analyser le réseau électrique européen réel via PyPSA.
grid = EuropeanGrid(network_path="networks/elec_s_128.nc", q_N=100, source="DE0", sink="FR0")
grid.iterate_qs()
psi = grid.calculate_psi_approx()Méthodes clés :
load_network(): charge le réseau PyPSAset_endpoints(source, sink): définit source/puitscalculate_psi_approx(): calcule la distribution de puissanceremove_line(line_id)/remove_node(node_id): simule des pannes
# Cloner le dépôt
git clone <repo-url>
cd stage
# Créer environnement virtuel
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Installer les dépendances
pip install -r requirements.txt| Fichier | Nœuds | Description |
|---|---|---|
elec_s_128.nc |
128 | Résolution moyenne |
elec_s_512.nc |
512 | Très haute résolution |
elec_s_1024.nc |
1024 | Résolution maximale |
Modèle open-source du réseau électrique européen :
- https://github.com/PyPSA/pypsa-eur
- Données ENTSO-E, topologie réelle
country_shapes.geojson: frontières paysregions_onshore_*.geojson: régions terrestresregions_offshore_*.geojson: zones maritimes
- PyPSA — Brown, T. et al. (2018). "PyPSA: Python for Power System Analysis"
- PyPSA-Eur — Hörsch, J. et al. (2018). "PyPSA-Eur: An open optimisation model of the European transmission system"
- Quantum Analogy of the Power Grid — Guichard P. (2024) A quantum analogy for the modeling of large power grids
Stage réalisé à l'Institut Néel — CNRS