← Volver al cuaderno

Ingeniería · Optimización

Cuando los turnos se convierten en matemáticas

Un motor con CP-SAT: reglas humanas, restricciones matemáticas y una decisión que sigue en manos de quien lo utiliza.

Era más que un calendario

Un cuadrante terminado parece sencillo: nombres distribuidos entre días y turnos. Lo difícil es llegar hasta él. Una elección que resuelve un turno hoy puede eliminar la única opción viable de mañana.

Los condicionales ayudan a validar situaciones concretas. Encontrar una distribución que respete todas las reglas a la vez exige otro enfoque. Así entraron en el proyecto Google OR-Tools y su solver CP-SAT.

De reglas a variables

El solver recibe un modelo: variables de decisión, restricciones y una función objetivo. Cada combinación entre una plaza y una persona elegible puede representarse mediante una variable booleana. Cada plaza debe tener exactamente una asignación.

Los conflictos horarios, los límites de horas y otras condiciones restringen las combinaciones. El solver busca una solución para todo el modelo. No aprende de cuadrantes anteriores: resuelve el problema matemático que definimos.

Primero, el dominio

Si las reglas del dominio ya excluyen una combinación, no tiene sentido crear una variable para ella. El filtrado determinista reduce el espacio de búsqueda y permite explicar la falta de elegibilidad.

También separa las pruebas. La elegibilidad es lógica de dominio; la formulación matemática puede comprobarse con entradas pequeñas y controladas. Así es más fácil distinguir errores en los datos, el filtro o el modelo.

Viable no significa óptimo

Una solución puede respetar todas las restricciones y repartir mal el trabajo. La función objetivo debe expresar qué significa equilibrio en ese contexto, con disponibilidades y límites diferentes.

Según el problema y el tiempo disponible, CP-SAT puede encontrar una solución viable o demostrar su optimalidad para el modelo. No sería correcto prometer siempre una solución óptima.

Explicar la inviabilidad

INFEASIBLE puede ser una respuesta matemática correcta y dejar a la persona usuaria sin un siguiente paso. El diagnóstico de inviabilidad forma parte del producto.

La cantidad de candidatos por plaza y los motivos de exclusión ofrecen indicios útiles. Un escenario relajado puede explorar compromisos, siempre que se distinga de una solución estrictamente válida.

Sugerencia, no sentencia

El motor genera sugerencias editables. Una persona revisa y confirma las asignaciones. Las matemáticas no eliminan las excepciones ni la información reciente que aún no está en el modelo.

OR-Tools se ejecuta localmente en un backend Python y FastAPI. React y TypeScript permiten configurar y revisar; MySQL y SQLAlchemy asíncrono gestionan la persistencia.

Lo más difícil fue explicar

Invocar el solver fue solo una parte. Traducir reglas humanas, distinguir restricciones rígidas y flexibles y explicar por qué no existe una solución exigió más trabajo.

La fiabilidad depende del sistema completo: backend, datos, interfaz y revisión humana. Un modelo matemático resulta útil cuando sus decisiones se pueden comprender.

Capturas de Diagnostique