Constraint Logic Programming (CLP): alguien lo usa en produccion?

Nuria
12 de Agosto del 2026

Relacionado con lo de si Prolog puro se usa hoy fuera de clase: ¿alguien trabaja con Constraint Logic Programming (CLP) en algo real? Me refiero a librerías tipo clpfd (sobre dominios finitos) que muchas implementaciones de Prolog traen, y que se usan bastante para problemas de planificación, horarios, asignación de recursos.

La diferencia con Prolog "clásico" es que en vez de generar soluciones y filtrar por fuerza bruta (como en la típica búsqueda de caminos hamiltonianos o el 3 en raya que se ve tanto en este subforo), con CLP declaras las restricciones del problema y el motor de resolución de restricciones poda el espacio de búsqueda mientras avanza, en vez de generar primero y comprobar después. Para problemas de scheduling con muchas restricciones cruzadas puede ser bastante más eficiente que la fuerza bruta clásica.

¿Lo habéis usado en algún proyecto de verdad (cuadrantes de turnos, asignación de aulas, ese tipo de cosas), o es tan de nicho como el propio Prolog?

Nuria


Ivan
12 de Agosto del 2026

Lo he visto usado de verdad en un contexto muy concreto: generación de cuadrantes de turnos de personal, donde hay muchísimas restricciones cruzadas (horas máximas por persona, descansos obligatorios entre turnos, cobertura mínima por franja horaria, preferencias del empleado) que serían un infierno de codificar como búsqueda por fuerza bruta con poda manual.

Con CLP sobre dominios finitos, declaras cada restricción como una relación separada (esta persona no puede trabajar más de X horas seguidas, esta franja necesita mínimo Y personas) y dejas que el motor de resolución de restricciones combine todo y pode el espacio de búsqueda mientras avanza, en vez de generar combinaciones completas y descartar al final. Para un problema con muchas restricciones que interactúan entre sí, esto puede ser dramáticamente más eficiente que la búsqueda generar-y-filtrar clásica.

La curva de aprendizaje es real, eso sí: pensar en términos de restricciones declarativas en vez de algoritmo paso a paso cuesta al principio, incluso para gente con experiencia en programación normal. Pero para el tipo de problema de scheduling/asignación con muchas restricciones cruzadas, una vez que lo dominas, resulta mucho más mantenible que intentar mantener a mano un algoritmo heurístico propio que haga lo mismo.

Ivan