🚲 MOTEUR D'OPTIMISATION

Implantation Optimale
de Parkings Vélo

Placer le maximum de vélos accessibles dans une pièce réelle, en respectant la réglementation — par programmation exacte et algorithme génétique NSGA-II.

M1→M5
Jalons réalisés
+100%
Gain NSGA-II
53
Tests unitaires
0
Chevauchements
Découvrir le problème → Voir le pipeline

L'idée directrice

La difficulté n'est pas de poser une rangée de vélos — c'est un sous-problème 1D résolu exactement. La difficulté est l'orchestration : comment découper la pièce, quelle orientation, quel système, comment faire circuler.

🧩 Constructeur exact

À structure fixée, produit une implantation optimale et valide par construction — jamais de réparation a posteriori.

→ Jalons M2 + M3

🧬 Optimiseur NSGA-II

Explore l'espace des structures (le « génome ») et fait raffiner chacune par le constructeur. Multi-objectif : capacité × coût circulation.

→ Jalon M5

🔗 Accessibilité garantie

Chaque vélo est joignable depuis une porte via un couloir de 1,20 m. Pas d'entassement inutile — seule la capacité accessible compte.

→ Jalon M4
🎯
Résultat marquant — Sur la pièce 46 en configuration resserrée, le glouton entassait 29 vélos dont 15 injoignables. L'optimiseur en place 28 tous accessibles — en découvrant qu'une disposition en simple rangée partitionnée vaut mieux que la double rangée dense. C'est une optimisation de structure, pas un réglage.

Le pipeline par jalons

5 jalons successifs, chaque étage vérifiable et ne pouvant jamais faire pire que le précédent.

📖
Inspiration — Le pipeline est calqué sur le papier HABX (Laignel et al., Automation in Construction 123, 2021) : programmation par contraintes pour la structure, algorithme génétique multi-objectif pour le raffinement.

Les systèmes de stationnement

Chaque système a ses cotes réglementaires et ses propriétés géométriques distinctes.

Râtelier perp. Resserré Longitudinal Double étage Arceau
SystèmeEntraxeAlléeProfondeurVélos/empr.
Râtelier perpendiculaire0,75 m1,80 m2,00 m1
Resserré0,60 m1,80 m2,00 m1
Longitudinal sol0,75 m0,90 m2,00 m1
Double étage0,60 m2,65 m2,00 m2
Épi 45°M6 — non encore implémenté
Pièce rectangulaire 8×6 m — râtelier perpendiculaire, double rangée

Golden numbers

Capacités de référence du moteur legacy (à égaler ou battre) sur les 4 pièces réelles.

PièceRâtelierMix perp+longiResserréNSGA-II (accessible)
46 (trapèze)22222928 ✓
47 (rectangle biseauté)10121412 ✓
4810111410 ✓
22voir banc M2
📊
Pièce 46 resserrée — Le glouton plaçait 29 vélos dont seulement 14 accessibles. NSGA-II trouve 28 vélos tous accessibles (+100% de capacité utile) en partitionnant intelligemment l'espace.

Les 5 invariants non négociables

1. Jamais pire

Capacité ≥ golden numbers du banc legacy sur toutes les pièces de référence.

2. reconnect = 0

Re-vérifier la connectivité d'un résultat final ne doit retirer aucune emprise. Le couloir 1,20 m est réellement garanti.

3. chevauchements = 0

Aucune emprise n'en recoupe une autre. Test AABB en repère local sur chaque résultat.

4. Déterminisme

Tout aléa passe par un unique random.Random(seed). Deux exécutions à graine égale → même résultat.

5. Respect de l'intention utilisateur

Un optimiseur ne désactive jamais un choix utilisateur (réserve cargo, double rangée…) pour gonfler un score.

En 3 commandes

Python ≥ 3.10 — extras : shapely, numpy, OR-Tools, matplotlib.

📦 Installation

$ pip install -e .[full]

🧪 Tests (53 tests, M1→M5)

$ python -m unittest discover -s tests -v

🚀 Banc NSGA-II

$ python scripts/bench_m5.py
Pièce 46 resserré : 14 → 28 accessibles (+100%)

Pages du guide