Motor procedural

Aprovecha cada placa, sin caja negra.

Un algoritmo genético con No-Fit Polygon (GA + NFP) acomoda las piezas para aprovechar el material. Un puntaje de 3 componentes evalúa cada junta y el recocido simulado (SA) afina el resultado. Sin datos de entrenamiento ni caja negra: con la misma semilla da el mismo resultado cuando el corte es por generaciones.

En la app hoy: el acomodo automático de los trabajos se calcula con el genético + NFP, que optimiza el aprovechamiento de la placa. El score de matching de vetas y el refinamiento con simulated annealing que se describen abajo se miden en la suite de referencia del motor; el acomodo automático de la app no optimiza hoy el matching de vetas.

Aprovechamiento

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.

Calidad de junta

Score de matching

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 por junta: verde, ámbar o rojo.

Refinamiento

Simulated annealing

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.

El motor en movimiento

Cómo se resuelve un layout.

No es una caja negra. Tres etapas, terminología real del worker, el mismo input siempre da el mismo output.

  1. Fase 1 · GA

    Población de layouts evolucionando

    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.

  2. Fase 2 · NFP

    No-Fit Polygon probando encajes

    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.

  3. Fase 3 · SA

    Simulated annealing refina el matching

    Sobre el mejor candidato del genético, la temperatura decreciente permite escapar de óptimos locales y mejorar el score de junta sin perder aprovechamiento.

Score matching0.62
Temperatura SA
Performance

Tres minutos, con el método publicado.

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.

  • < 3 min

    Cómputo p95

  • ≥ 82%

    Aprovechamiento

  • 0

    Datos de entrenamiento

  • DEAP · scipy · Shapely

    Stack

Por qué decidimos contra IA

Costo, explicabilidad, determinismo.

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.

  • Funciona desde día 1, sin dataset
  • Cada decisión es trazable a un score numérico
  • Costo de cómputo predecible (CPU, no GPU)
  • Sin sorpresas — mismo input, mismo output
Onyx Oro
OXO-2026-0001
Aislamiento

RLS Postgres + set_config.

Todas las 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 DE AISLAMIENTO RLS EN CI · 240+ PASSED

Estado del proyecto

Hecho desde cero, sin atajos. Tests de verdad.

  • 2000+

    Tests backend pasando

  • 100%

    Tablas de talleres con RLS forzado

  • 15

    Docs fundacionales

  • 3-2-1

    Política de backup

  • RS256

    JWT + refresh httpOnly

  • AES-256-GCM

    Cifrado PII

  • WCAG 2.1 AA

    Accesibilidad como objetivo

¿Quiere verlo correr?

Demo del producto sin costo.En menos de tres minutos.