Buscando un tema para escribir en este blog, me dio por buscar una definición formal de Constraint Programming, o Programación por Restricciones. Una técnica, por cierto, utilizada con asiduidad en los proyectos de decide4AI. Mirando en wikipedia, Programación por Restricciones se define como un paradigma de la programación en el cual las relaciones entre las variables son expresadas en forma de restricciones.
Lo particular de este paradigma es que, en lugar de definir la manera de llegar a una solución, sencillamente define las propiedades que debe tener esta solución sin determinar el modo de llegar a ella. En este sentido es un paradigma claramente declarativo.
Si bien es cierto que el uso en el ámbito de los negocios de este paradigma implica algo más que la simple definición de las variables y restricciones que intervienen en el problema, esta definición bien sirve como punto de partida para explicar a qué nos referimos en decide4AI cuando hablamos de Optimización.
Restricciones (contexto)
Todos los problemas que nos encontramos en el día a día, para los cuales se hace necesaria la toma de decisiones, se pueden formular aplicando este paradigma. Cualquier decisión que tomemos tendrá que ser aplicable en un contexto concreto, definido por un conjunto de restricciones o normas que esta solución tiene que cumplir para tener sentido. Cada vez que tomamos una decisión necesitamos conocer el contexto (restricciones) en el que esta decisión se va a aplicar, de modo que aseguremos que la decisión tomada es viable.
Por ejemplo, cuando queremos movernos en el coche de un lugar a otro tendremos que hacerlo siguiendo, como mínimo, las reglas de la física y las normas de tráfico (puesto que somos unos ciudadanos responsables). Una ruta válida será aquella que cumple todas las restricciones impuestas por el contexto física + normas de tráfico. El resto de las rutas, las que pasan por encima de ríos sin puente, cruzan edificios, hacen giros prohibidos y demás, carecen de interés.
En un problema de fabricación las restricciones vendrán definidas por la capacidad de las líneas de producción, los tiempos necesarios para la realización de cada una de las tareas, las relaciones de precedencia entre las mismas, etc. Una solución viable será una secuenciación de tareas de producción que respete todas estas restricciones. En un problema de asignación de turnos las restricciones vendrán definidas por el convenio laboral, por las necesidades de trabajo a cubrir, por los pactos particulares de cada empleado, etc. En este caso, una solución consistirá en una asignación de turnos a personas durante un horizonte temporal, respetando todas estas restricciones.
Criterios de ‘bondad’ (intención)
Si bien es cierto que hay casos en los que es suficiente con tomar una solución viable, esto no es lo habitual. Lo habitual es que queramos tomar la mejor decisión dentro de las viables.
Pero, ¿qué hace que una solución sea ‘mejor’ que otra? ¿Existe algún criterio objetivo que nos ayude a distinguirlas? La realidad es que no. Detrás del juicio que determina que una solución viable es mejor que otra, siempre hay una intención. Puede que nuestra intención sea llegar lo antes posible a nuestro destino, llegar recorriendo la menor distancia o incluso elegir la ruta que tenga mejores paisajes. En función de cuál sea el criterio que utilicemos para valorar las distintas rutas, el resultado de este juicio será distinto.
Lo que es seguro es que siempre tenemos un criterio que nos permite valorar las soluciones. Preferiremos fabricar lo más rápido posible o lo más barato posible. Preferiremos una asignación de turnos que minimice el número de empleados utilizado o que minimice el coste económico de la asignación, o bien una mezcla de ambas (multiobjetivo). Pero siempre tenemos un criterio. Por lo tanto, todo problema de toma de decisiones es, en realidad, una mezcla entre un problema de satisfacción de restricciones (búsqueda de soluciones viables) con un problema de optimización (búsqueda de soluciones buenas).
Un mundo cambiante
Una aproximación razonable (e infalible) a la búsqueda de estas soluciones sería la de enumerar todas las soluciones factibles (viables), valorar cada una de ellas, y seleccionar la mejor en función de los criterios de ‘bondad’ que estemos manejando.
Pero la mente humana no es buena enumerando cosas. Cierto es que posee otras virtudes: es creativa y capaz de inventar reglas o pautas a partir de la experiencia. De hecho, esta es la vía que habitualmente se utiliza para la resolución de estos problemas de toma de decisiones: expertos planificadores utilizan su experiencia traducida en pautas y reglas de planificación para tomar ‘buenas’ decisiones en sus sistemas restringidos.
Sería injusto defender que esta técnica no funciona. Toda la evolución de la humanidad ha sido consecuencia del uso de esta técnica. Los seres humanos hemos ido adquiriendo experiencia y estableciendo reglas para la resolución de los problemas que nos hemos ido encontrando. De esta manera hemos conseguido apartar esos problemas para poder centrarnos en los siguientes. Es obvio que esta forma de hacer ha funcionado. Pero también es cierto que en los últimos 50 años las técnicas han evolucionado más que en los anteriores milenios. Ante un mundo cambiante, no hay tiempo para dejar actuar a la experiencia. Las reglas que eran buenas hace 10 años ya no lo son ahora, y las reglas que son buenas ahora no lo serán dentro de 5 años. Esta diferencia entre la velocidad a la que se producen los cambios y la velocidad a la que se asimilan (se convierten en ‘experiencia’) hace que, a la hora de la verdad, se acaben aplicando soluciones obsoletas a problemas nuevos. Es decir, que se utilicen con cierta frecuencia reglas generales que funcionaron antaño pero que ahora ya no lo hacen tan bien.
De qué hablo cuando hablo de Optimización
Si queremos ser competitivos y adaptar nuestros procesos de toma de decisiones a las condiciones cambiantes, necesitamos tomar otras aproximaciones.
Es aquí cuando comienzan a tener sentido las técnicas de Optimización e Inteligencia Artificial. Los ordenadores no tienen problemas a la hora de enumerar soluciones, ni de realizar millones de cálculos por segundo. Esta aproximación de ‘fuerza bruta’ tiene una ventaja esencial: no depende de un conocimiento previo, es decir, de la experiencia. La técnica de enumerar las posibles soluciones a un problema y seleccionar la mejor sólo requiere conocer las restricciones del problema y los criterios de ‘bondad’, su estructura. Si el problema cambia, con conocer qué es lo que ha cambiado (las restricciones o criterios que lo hayan hecho), la técnica funciona exactamente igual.
Si bien es cierto que la mayor parte de problemas tienen un número de soluciones viables demasiado elevado, incluso para un ordenador, en las últimas décadas la comunidad científica ha hecho un gran esfuerzo tanto desde el punto de vista teórico como desde el punto de vista práctico para abordar esta complejidad.
Se han creado una serie de técnicas, paradigmas de la programación, resultados teóricos y prácticos que posicionan a los ordenadores como serios competidores a la hora de tomar decisiones. Y de esto hablo cuando hablo de optimización: de la aplicación de técnicas software, matemáticas o estadísticas en la toma de decisiones automatizada.
Este es el trabajo que decide4AI lleva realizando en sus inicios. La Programación por Restricciones es una de las técnicas que usamos, pero hay más. Las técnicas de Programación Lineal (Lineal Entera, Lineal Entera Mixta) son capaces de resolver muchos de los problemas reales de nuestros clientes. La Programación Estocástica aborda la aparición de incertidumbre en el planteamiento de los problemas de optimización. Las técnicas Metaheurísticas se fijan en la manera en la que la naturaleza resuelve sus problemas para adaptarlas a la resolución de problemas de negocio. Y así un sinfín de técnicas más (Programación No Lineal, Programación Dinámica, etc.) que la ciencia ha puesto a nuestra disposición para permitir a los ordenadores resolver problemas complejos de la operativa diaria.
¿Quieres saber más sobre optimización?
Si quieres saber más sobre decide4AI y mantenerte al tanto de futuros webinar o eventos, síguenos en las redes sociales (Linkedin, Twitter, Youtube).