BikeOptim
Moteur autonome (hors Revit, CPython) de génération et d'optimisation d'implantations de stationnement vélo dans des pièces réelles, conforme au Décret n° 2022-930 et à l'Arrêté du 30 juin 2022.
Successeur du moteur BikeEngine (pyRevit / IronPython, gelé dans legacy/),
avec une ambition supérieure : un pipeline d'optimisation à l'échelle du papier
HABX (Floor plan generation through a mixed constraint programming-genetic
optimization approach, Laignel et al., Automation in Construction 123, 2021) —
programmation par contraintes pour la structure, algorithme génétique
multi-objectif (NSGA-II) pour le raffinement, top-N de variantes diverses.
Statut
M1 → M5 réalisés (voir docs/ROADMAP.md) :
- M1 — modèle de pièce (shapely) + visualisation PNG.
- M2 — parité legacy : constructeur glouton porté en CPython/mètres, golden numbers reproduits à l'identique.
- M3 — packing exact par zone (sélection des bandes par DP maison / CP-SAT).
- M4 — circulation réseau de premier rang : mutualisation multi-portes + accessibilité garantie de chaque rack.
- M5 — NSGA-II sur le génome structurel : front de Pareto, top-N variantes diverses, gains stricts vérifiés (ex. 46 resserré 14 → 28 vélos accessibles).
Reste M6 (extensions : épi 45°, double étage, multi-pièces, rapport, CLI).
📖 Nouveau venu ? Lire
docs/GUIDE.md— guide pédagogique complet (concepts, mathématiques, chronologie algorithmique, mode d'emploi).
Démarrage rapide
# Dépendances (le socle de calcul reste stdlib pur ; extras pour geo/viz/exact)
pip install -e .[geo,viz,solve]
# Toute la suite de tests (53 tests, M1→M5)
python -m unittest discover -s tests -v
# Bancs de démonstration par jalon
python scripts/bench_m2.py # parité golden numbers
python scripts/bench_m3.py # exact vs glouton + contrôles
python scripts/bench_m4.py # accessibilité + mutualisation 3 portes
python scripts/bench_m5.py # gains NSGA-II + rendus Pareto / top-N
# Référence : rejouer le moteur legacy validé (golden numbers)
python legacy/bench/bench_layout.py
Carte du dépôt
| Chemin | Contenu |
|---|---|
docs/GUIDE.md |
Guide pédagogique : concepts, mathématiques, chronologie, mode d'emploi |
docs/HANDOFF.md |
Handoff exhaustif du moteur legacy : algorithmes, leçons, bugs corrigés, résultats |
docs/ARCHITECTURE.md |
Conception du moteur cible (CP + NSGA-II) |
docs/ROADMAP.md |
Jalons M1→M6 avec critères d'acceptation |
docs/ETAT_DE_LART.md |
Pipeline HABX détaillé + outillage état de l'art |
docs/REGLEMENTATION.md |
Cotes et règles du Décret 2022-930 / Arrêté 30/06/2022 |
docs/FORMAT_DONNEES.md |
Schéma JSON des pièces + grammaire du dump Revit |
data/rooms/ |
4 pièces réelles de référence (22, 46, 47, 48) |
legacy/ |
Copie gelée du moteur pyRevit validé + banc de test (référence) |
src/bikeoptim/ |
Le moteur : io · core · catalog · solve · circulation · optimize · viz |
scripts/ |
Bancs de démonstration (bench_m2…m5) et rendus |
tests/ |
Tests unitaires (53, M1→M5) |
Principes
- Unités : mètres partout dans le moteur (conversion 1 ft = 0,3048 m à l'import).
- Jamais pire : toute évolution doit égaler ou battre les golden numbers du banc legacy.
- Déterminisme : tout aléa passe par un RNG seedé.
- Validité par construction : non-chevauchement, connectivité des accès (1,20 m), conformité réglementaire vérifiables sur chaque résultat.
Auteur
Loukas Delevaux (ANMA) — assisté par Claude Code.