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.
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.
À structure fixée, produit une implantation optimale et valide par construction — jamais de réparation a posteriori.
Explore l'espace des structures (le « génome ») et fait raffiner chacune par le constructeur. Multi-objectif : capacité × coût circulation.
Chaque vélo est joignable depuis une porte via un couloir de 1,20 m. Pas d'entassement inutile — seule la capacité accessible compte.
5 jalons successifs, chaque étage vérifiable et ne pouvant jamais faire pire que le précédent.
Polygone Shapely, portes, poteaux. Visualisation PNG. Géométrie de base : lacet, ray-casting, angle principal.
Portage CPython du moteur pyRevit. Pavage par bandes, glissement leftmost-fit, 8 combinaisons, mélange de systèmes. Golden numbers reproduits.
Sélection optimale des bandes par programmation dynamique / CP-SAT. Résout le sous-problème que le glouton approximait.
Dijkstra à coût d'occupation sur grille fine (0,15 m). Mutualisation multi-portes. Accessibilité BFS de chaque rack.
Génome structurel, front de Pareto (−capacité_accessible, coût_circulation), top-N variantes diverses. Gains stricts vérifiés.
Chaque système a ses cotes réglementaires et ses propriétés géométriques distinctes.
| Système | Entraxe | Allée | Profondeur | Vélos/empr. |
|---|---|---|---|---|
| Râtelier perpendiculaire | 0,75 m | 1,80 m | 2,00 m | 1 |
| Resserré | 0,60 m | 1,80 m | 2,00 m | 1 |
| Longitudinal sol | 0,75 m | 0,90 m | 2,00 m | 1 |
| Double étage | 0,60 m | 2,65 m | 2,00 m | 2 |
| Épi 45° | M6 — non encore implémenté | |||
Capacités de référence du moteur legacy (à égaler ou battre) sur les 4 pièces réelles.
| Pièce | Râtelier | Mix perp+longi | Resserré | NSGA-II (accessible) |
|---|---|---|---|---|
| 46 (trapèze) | 22 | 22 | 29 | 28 ✓ |
| 47 (rectangle biseauté) | 10 | 12 | 14 | 12 ✓ |
| 48 | 10 | 11 | 14 | 10 ✓ |
| 22 | voir banc M2 | — | ||
Capacité ≥ golden numbers du banc legacy sur toutes les pièces de référence.
reconnect = 0Re-vérifier la connectivité d'un résultat final ne doit retirer aucune emprise. Le couloir 1,20 m est réellement garanti.
chevauchements = 0Aucune emprise n'en recoupe une autre. Test AABB en repère local sur chaque résultat.
Tout aléa passe par un unique random.Random(seed). Deux exécutions à graine égale → même résultat.
Un optimiseur ne désactive jamais un choix utilisateur (réserve cargo, double rangée…) pour gonfler un score.
Python ≥ 3.10 — extras : shapely, numpy, OR-Tools, matplotlib.
Vocabulaire, objets, unités, repères, invariants non négociables.
Formule du lacet, ray-casting, angle principal, géométrie des portes.
Pavage par bandes, glissement, 8 combinaisons, mélange de systèmes, décomposition L/T.
Sélection d'intervalles pondérés, DP linéaire, CP-SAT, filet « jamais pire ».
Grille fine, Dijkstra, couloir 1,20 m, mutualisation multi-portes, accessibilité BFS.
Génome structurel, Pareto, crowding distance, top-N diversité, +100% gains.
JSON → Room → Analyse → Constructeur → NSGA-II → Rendus PNG.
Décret 2022-930, Arrêté 30/06/2022, cotes exactes par système.
Installation, chargement, implantation, optimisation, visualisation.
Conception HABX, deux niveaux, modules, fitness, opérateurs génétiques.
Questions fréquentes, glossaire complet, carte des modules.