De l'installation à la visualisation des résultats — tout ce qu'il faut pour utiliser BikeOptim en autonomie.
Python ≥ 3.10 requis. Trois niveaux d'installation selon les besoins.
Installe tous les extras d'un coup : géométrie, visualisation, solveur.
Installez uniquement les extras nécessaires pour votre usage.
Lancez les tests unitaires pour vérifier que tout fonctionne.
io et core.geometry sont écrits en stdlib pur — aucune dépendance externe. Vous pouvez charger et analyser des pièces sans installer Shapely, numpy ou matplotlib.| Extra | Dépendances | Modules débloqués |
|---|---|---|
geo | shapely, numpy | Géométrie avancée, AABB, inclusion polygonale |
viz | matplotlib | Rendus PNG, visualisation des fronts de Pareto |
solve | ortools | CP-SAT pour le packing exact (M3) |
full | Tous les ci-dessus | Installation complète |
Le point d'entrée du pipeline : transformer un JSON Revit en objet Room manipulable.
revit_dump.py. Les coordonnées sont en pieds impériaux et converties automatiquement en mètres SI par load_room().Les coordonnées boundary sont en pieds. load_room() multiplie par 0.3048 pour convertir en mètres.
Lancer le constructeur avec une configuration manuelle — sans passer par NSGA-II.
Tous les paramètres de configuration avec leur rôle et leurs valeurs par défaut.
systems — Liste des systèmes à tester
+
Type : List[str]
Défaut : ['ratelier_perp']
Liste des identifiants de systèmes à utiliser. Le constructeur teste chacun et retient le meilleur. Valeurs possibles :
mix_enabled — Mélange de systèmes par bande
+
Type : bool
Défaut : False
Si activé, différentes bandes de la même pièce peuvent utiliser des systèmes différents. Par exemple, une bande en râtelier perpendiculaire et une autre en longitudinal.
exact_zone — Packing exact (M3) vs glouton
+
Type : bool
Défaut : True
Active le packing exact par programmation dynamique (DP) ou CP-SAT au lieu du glissement glouton. Résultat optimal garanti mais légèrement plus lent (~15 ms vs ~5 ms).
Rapide (~5 ms)
Résultat approché
Filet « jamais pire »
Plus lent (~15 ms)
Résultat optimal
DP linéaire + CP-SAT
enforce_access — Garantir l'accessibilité (M4)
+
Type : bool
Défaut : True
Si activé, le constructeur élimine les emprises inaccessibles (celles qu'aucun couloir de 1,20 m ne relie à une porte). La capacité résultante est la capacité accessible.
enforce_access=True, capacity == capacity_accessible. Aucun vélo « fantôme » inaccessible ne subsiste dans le résultat.reserve_cargo — Réserver un emplacement cargo
+
Type : bool
Défaut : False
Réserve un emplacement pour vélo cargo (2,50 × 1,00 m) près d'une porte. L'optimiseur ne peut pas désactiver ce choix pour gonfler la capacité — c'est un invariant utilisateur.
Lancer l'optimiseur multi-objectif pour explorer l'espace des structures et trouver le front de Pareto.
Maximiser la capacité accessible — nombre de vélos réellement joignables via un couloir de 1,20 m.
Minimiser le coût de circulation — longueur totale pondérée des couloirs nécessaires.
budget_s=30 et des évaluations à ~50 ms, on atteint ~200 évaluations en ~10 s.seed garantit la reproductibilité. Deux exécutions avec la même graine sur la même pièce produisent le même front de Pareto, bit pour bit.Générer des rendus PNG des pièces et des implantations pour l'analyse visuelle.
Les top-N variantes sont sélectionnées pour maximiser la diversité structurelle : orientations, systèmes et partitionnements différents.
Scripts de benchmark par jalon et suite de tests unitaires pour valider chaque composant.
| Commande | Jalon | Description |
|---|---|---|
python scripts/bench_m2.py |
M2 | Parité golden numbers — vérifie que le constructeur reproduit les capacités de référence du moteur legacy |
python scripts/bench_m3.py |
M3 | Exact vs glouton — compare le packing exact (DP/CP-SAT) au glissement glouton sur toutes les pièces |
python scripts/bench_m4.py |
M4 | Accessibilité + 3 portes — vérifie le couloir 1,20 m, multi-portes, BFS sur pièces complexes |
python scripts/bench_m5.py |
M5 | NSGA-II + Pareto + top-N — lance l'optimisation complète, vérifie les gains stricts et la diversité |
python -m unittest discover -s tests -v |
Tous | 53 tests unitaires couvrant M1 → M5 — géométrie, constructeur, packing, circulation, NSGA-II |
python -m unittest discover -s tests -v dans votre CI/CD. Les 53 tests s'exécutent en ~2,5 s et vérifient tous les invariants non négociables (zéro chevauchement, reconnect = 0, déterminisme).Du JSON au PNG en un seul script — copier-coller et adapter.