Genético + NFP
Población de layouts evolucionando por crossover y mutación. Cada candidato evaluado con No-Fit Polygon: cuánto material queda usable después de colocar todas las piezas. Operador de reparación para soluciones inválidas.
Un genético con No-Fit Polygon optimiza aprovechamiento. Un score de matching de 3 componentes evalúa cada junta. Simulated annealing refina el resultado. Sin datos de entrenamiento, sin caja negra, mismo input → mismo output con seed fija.
Población de layouts evolucionando por crossover y mutación. Cada candidato evaluado con No-Fit Polygon: cuánto material queda usable después de colocar todas las piezas. Operador de reparación para soluciones inválidas.
Tres componentes ponderados automáticamente: suavidad de la línea de junta, diferencia de orientación de veta, delta de color entre placas. Un solo número, 70% verde garantizado.
Búsqueda local con temperatura decreciente sobre el mejor candidato del genético. Permite escapar de óptimos locales del NFP y mejorar el score de matching sin perder aprovechamiento.
No es una caja negra. Tres etapas, terminología real del worker, el mismo input siempre da el mismo output.
El algoritmo genético mantiene muchos acomodos candidatos a la vez. Crossover y mutación combinan los mejores; un operador de reparación corrige los inválidos.
Cada candidato se evalúa con No-Fit Polygon: dónde puede entrar cada pieza sin solaparse con las demás. Se maximiza el material usable de la placa.
Sobre el mejor candidato del genético, la temperatura decreciente permite escapar de óptimos locales y mejorar el score de junta sin perder aprovechamiento.
El motor está benchmarkeado en trabajos típicos de marmolería: 8-12 piezas, 1-3 placas. Las cifras son del p95 medidas sobre la suite golden con seed fija.
< 0 min
Cómputo p95
≥ 0.00
Score matching
≥ 0%
Aprovechamiento
0%
Determinismo seed
< 0s
Pipeline imagen p50
< 0s
Pipeline imagen p95
0
Datos de entrenamiento
DEAP · scipy · Shapely
Stack
Una red entrenada en placas naturales necesitaría miles de ejemplos etiquetados, un costo de inferencia por trabajo y una explicación posible de cada decisión. El motor procedural resuelve los tres en una sola arquitectura.

Las 13 tablas con taller_id tienen Row-Level Security forzada a nivel base de datos. El rol de la aplicación es NOBYPASSRLS: ni siquiera un bug del backend puede mostrar datos de otro taller.
TESTS ADVERSARIALES EN CI · 0 PASSED
