¿Cuáles son algunos ejemplos de buen diseño que resuelven problemas combinatorios al crear información para un objeto dentro de una aplicación?

Actualmente estoy estudiando programación de restricciones en mi universidad y parece que el paradigma CP es adecuado para este tipo de problemas. Simplemente indique en su programa los objetos con los que está trabajando, los dominios en los que está trabajando (por ejemplo, los posibles valores para el color del producto), y finalmente agrega sus restricciones (por ejemplo, un producto no puede ser hecho de cierto material y cuesta más de x dólares). Después de que le haya indicado el problema a la computadora, la computadora lo resuelve y le brinda todas las soluciones posibles. Los lenguajes CP han incorporado mecanismos para buscar y encontrar la solución óptima. Funcionan reduciendo los dominios mediante la aplicación y propagación de las restricciones definidas por el usuario hasta que se encuentra una solución, por lo tanto, el usuario se libera de la carga de especificar cómo se debe lograr la solución, todo lo que tiene que hacer es modelar el problema en cuestión y dáselo a la computadora para que lo resuelva. Este método es bastante flexible y facilita la modificación del programa si se cambian las especificaciones del problema.