Ce qu'on a changé.
Toutes les corrections et améliorations, dans l'ordre. Aucune release silencieuse — si on touche au solveur, c'est listé ici. Mis à jour environ une fois par semaine.
-
21 mai 2026
Quatre corrections sur les formes complexes.
On a corrigé quatre cas où les sphères, cylindres et formes en L pouvaient être mal interprétés par le solveur. Les plans qui utilisent ces formes sont maintenant calculés correctement, peu importe leur orientation.
Au passage, un bug ancien (un plantage rare sur certains chargements à 15% de porte-à-faux) a disparu : il était en fait corrigé depuis une mise à jour précédente, simplement personne ne l'avait vérifié. Ré-activation de cette tolérance par défaut.
Détails techniques
commit 1e25c8c · audit v5 — 3 findings HAUTE + CRIT-4 résolus
FIND-003 SPHERE volume/rotations :
Box::volume()=(π/6)·orig_l³, parser warn si shape=2 et dims ≠.FIND-010 CYLINDER overlap radius asymétrique : parser warn si shape=1 et
il≠iw.FIND-011 L_SHAPE rotation-aware : 5 sites consommateurs corrigés (
chk_centroid_support,chk_support_any,supp_area,rollout_score_fast, output BOX).CRIT-4 SIGSEGV avec OVERHANG_TOLERANCE=0.15 non reproductible sur 220 CSV ASan+UBSan. Default rétabli à 0.15 (Loi 2 — porte-à-faux ≤15%/côté).
-
20 mai 2026
Un vieux compromis numérique n'avait jamais servi.
Depuis longtemps, on gardait une option de compilation "rapide mais imprécise" parce qu'on pensait qu'elle améliorait les performances sur certaines instances. On a bench 172 instances pour vérifier : aucun gain mesurable, donc aucune raison de prendre le risque. Retirée.
Conséquence : le calcul est désormais plus prévisible numériquement. Aucun changement perceptible côté résultat.
Détails techniques
commit 311861b · CRIT-2 fermé définitivement
Bench BR1-BR8 single-container (119 inst) :
ffm_mean=78.35%vsno_ffm_mean=78.35%, Δ=+0.01pp = bruit pur.Bench mode prod (53 inst, 5 modes × 10 difficultés) : walls identiques, fill rate dans la variance.
Anti-régression test1/test2/test3 (seed=42, t=60s) : 52.5% / 54.9% / 54.5%.
-ffast-mathretiré dedeploy_solver.sh,deploy_all.sh,docs/DEPLOY_QUEUE.md. -
19 mai 2026
Quatre vérifications physiques plus strictes.
Le solveur teste plusieurs lois physiques pour valider un plan : centre de gravité, support au sol, anti-roulis des cylindres couchés, ratio hauteur/base d'une pile. Ces quatre tests sont maintenant plus précis — ils refusent des configurations qui étaient théoriquement acceptées mais qui auraient pu poser problème dans le camion.
Concrètement : moins de plans qui passent la simulation et casseraient sur la route.
Détails techniques
commit 0efa6e2 · 4 findings HAUTE physique résolus
FIND-001
chk_centroid_support: test par rectangle (avec soustraction L-shape), plus par bbox union.FIND-002
is_upright()cube-pseudo cylinder :rotations()ne retourne que upright.FIND-005 cylindre couché : sup et area clipés sur bande axiale ±10% du diamètre.
FIND-006
chk_aspect_ratio: BFS support chain pour calculer la vraie base locale connectée. -
18 mai 2026
Un nouveau mode de calcul fait gagner 9 points en moyenne.
On a ajouté deux nouvelles stratégies de placement spécialisées pour les chargements mono-conteneur (un camion ou un container, sans phase palette). Sur le benchmark académique de référence du secteur (BR1 à BR8), le taux de remplissage moyen passe de 69.4% à 78.35%.
À noter : ce changement ne s'applique qu'au mode mono-conteneur. Les plans en deux phases (colis → palettes → camion) restent strictement identiques aux versions précédentes.
Détails techniques
commit 9f0f899 · F-S-D-01 résolu — Phase 0.5 BPP-layered + shelf-stack
greedy_bpp_layered(~140 LOC) : 2D BLF par layer h-uniforme, heuristique d'orientation. Optimal pour h-homogène (BR1 +6.5pp).greedy_bpp_shelf_stack(~120 LOC) : 3D BLF avec stack vertical par shelf, 6 rotations testées. Optimal multi-h (BR3 +18.8pp).Pick-best en Phase 0.5 sous
g_single_container=true. Budget 1.5s + 2.0s pour ne pas manger Beam.Anti-régression mode prod (g_single_container=false) : aucune modif. test1=52.5% test2=56.2% test3=54.5%.
-
17 mai 2026
Le solveur ne peut plus boucler indéfiniment.
Sur certaines machines très chargées, le solveur pouvait dans de rares cas ne pas respecter le temps de calcul demandé. C'est maintenant garanti : si vous demandez 60 secondes, vous avez un plan en 60 secondes, même si la machine est sous pression.
Détails techniques
commit 68b16e2 · F-S-C-01 v3.1 final
Timer wall-aware per-Timer :
max(virt, real_since_start)+ safety net global 10×/600s + EP cap abaissé 200→50.Versions v2/v3/v3.2/v3.3 testées et rejetées (wall 5-8× trop long). v3.1 = équilibre validé.
-
14 mai 2026
En cas de problème, le solveur le dit.
Avant, si le solveur n'arrivait pas à placer un colis sans chevauchement, il pouvait silencieusement le retirer du plan. C'est terminé : maintenant, soit le solveur arrive à placer tous les colis, soit il émet une erreur explicite. Plus de plan "incomplet sans qu'on le sache".
Détails techniques
commit 9f5e2cb · politique no-drop overlap
Overlap fix retry jusqu'à convergence, jamais de drop silencieux. Fail loud sur épuisement (SSE error).
Bonus : renderer App.jsx détecte l'axe cylindre couché via paires égales (le solveur fait
l ≠ orig_len rotation X/Z).
Une question sur une release ? [email protected]